Windows PowerShell:PowerShell 指令碼與 PowerShell 工作流程比較
每個月這一年,DonJones將在 12 個部分的教程中安裝 Windows PowerShell 工作流。 我們鼓勵您通過一系列按順序,讀開頭 2013 年 1 月列。
Don Jones
工作流的外觀和感覺很像 Windows PowerShell 函數或腳本,但他們不是。 其相似之處只是表面現象,和它可能甚至無法穿過皮膚。
你要記住 Windows PowerShell 已將工作流化為一種完全獨立的技術 — Windows 工作流基礎 (WF)。 這意味著你可以只做你可以白表中存在重複的事情。 您的代碼將運行在一種全然不同的環境,都有其自己的規則和限制。 事實上,工作流和一個"正常"的腳本之間的差異可以很大。
而不是多一個運行空間
在一個正常的腳本,在腳本中的一切在單一的運行空間,與單個作用域層次結構中運行。 運行空間是大致相當於一個 Windows PowerShell 的過程。 如果您認為 Windows PowerShell 主控台視窗的這是單一的運行空間。 這意味著一切都是相同的一致和持續的運行空間內。
變數、 命令、 磁碟機和其他一切一切開始的一種方式。 他們保持相同,除非您更改它們。 所內的運行空間,做任何更改"粘"在這一過程的持續時間。
在工作流中,每一項活動 — 每個命令、 內聯腳本塊等等 — 可以有它自己的運行空間。 這意味著如果你在一個進行了更改,它可能不會顯示在任何其他國家。 在您的工作流的一部分中設置一個變數可能不執行任何更改的工作流,而另一部分除非你採取特別的措施,否則確保。
正如你看到的在上個月的文章,如果你定義一個變數在工作流的最高級別,它存在整個工作流 (系統採取步驟,以確保這是真的)。 如果工作流中的命令創建一個變數,該變數不會提供給工作流的其餘部分。
這意味著模組使用也是不同的。 導入一個模組在一個點不會必然使命令可用在以後的時間點。 您需要更多的照顧,因為單個工作流基本上可以跨越多個獨立作用域。
句法差異
有一些語法差異內一個工作流,其中一些我已經在以前的文章中這一系列中指出:
- 您不能使用位置參數。 你必須拼出的每個命令參數。 如果你以前運行 Dir C:\Windows,您需要瞭解如果 –Path C:\Windows 相反。 您仍然可以使用別名 (如 Dir) 或截斷參數名 (例如,–Comput,–ComputerName)。
- 工作流可以有參數,但是他們只可以包括在其名稱中的字母、 數位、 底線和連字號。 這是不同于普通的 Windows PowerShell 腳本規則。
- 您不能將一個模組導入工作流會話。 事實上,命令真的不能更改當前會話和對後續的命令有任何影響。 如果工作流需要使用一個模組,你需要使用 –PSRequiredModules 活動參數。
- InlineScript 活動和工作流活動實現的命令,你得到額外的命令參數,包括前面提到的 –PSRequiredModules 參數的一群。
- 除非你在一個內聯腳本塊內這樣做,您不能在工作流中,運行物件的方法。 該物件必須在方法工作秩序中的內聯腳本塊內生產。
- 你不能點源的腳本。
- 您不能使用"&"叫用作業符。
- 交換器構造必須包括的 –CaseSensitive 參數。 工作流相當於交換器構造是以本機方式區分大小寫。 Switch 語句必須使用常量。 您不能使用比較運算子、 運算式、 檔引用或腳本塊。 基本上,儘量避免交換器構造。
- 不允許中斷和繼續發言。
- 只有 PSDrives 添加由 Windows PowerShell 核心供應商 — 檔案系統、 註冊表、 憑證存放區區、 環境、 函數、 變數和 WS 管理 — 是有效的。 若要使用由一個模組創建的 PSDrive,–PSRequiredModules 參數運行活動和指定的模組名稱。
是的是很大的區別。 如果你是一個認真的 Windows PowerShell 程式師,你會遇到更少的這些機構,例如命名您的參數。 你仍會遇到你忘了直到你成為真正熟悉寫作工作流的差異。
獎金
Windows PowerShell 工作流並不是所有的壞消息差異 — 事實上,它給你一噸的功能免費。每個工作流收益內置參數,包括:
- –AsJob 作為後臺作業運行的工作流。 你可以給它通過使用 –JobName 的作業名稱。
- –PSComputerName 上的指定的電腦或電腦,使用 Windows PowerShell 遠端處理運行工作流。
- –PSCredential 和各種相關參數讓您指定備用身份驗證的詳細資訊。
- –PSPort 和其他與連接相關的參數允許您指定工作流的遠端處理元件的備用連接詳細資訊。
注意到這些參數數目以 –PS 開頭嗎? 那被稱為一個命名空間。 你應避免創建您自己也開始與 –PS 的參數。 如果 Windows PowerShell 的未來版本中添加新的參數,他們很可能就會開始 –PS。 如果您通常避免那你就會避免碰撞與您自己的參數名稱的首碼。
更糟糕的是,不更好,但不同
這裡的實際結果是工作流不是 Windows PowerShell 腳本。 他們是不同的。 他們有一些差別,可以讓你的生活更容易。 一些其他的差異可以要求從你的工作多一些。 瞭解差異可以説明您更快速地開始編寫有效的工作流。
Don Jones 是 Windows PowerShell 最有價值球員獎收件者和特約編輯 TechNet 雜誌 》*.*他合著了四本關於 Windows PowerShell 版本 3,其中包括免費的 Windows PowerShell 遠端處理上的與在 Windows PowerShell 中創建 HTML 報告書。找到他們都是在 PowerShellBooks.com,或在討論論壇上問Jones PowerShell.org。