共用方式為


Windows PowerShell:看起來很像工作流程

每個月這一年,DonJones將 Windows PowerShell 工作流目前 12 部分教程中的安裝。 我們鼓勵您通過一系列的順序,讀開頭 2013 年 1 月列

Don Jones

工作流了很多像 Windows PowerShell 函數或腳本的外觀和感覺 — 但是他們不是。 這相似只是表面現象,和它或許不會穿過皮膚甚至延長。

你要始終記住 Windows PowerShell 必須將工作流化為一種完全獨立的技術 — Windows 工作流基礎 (WF)。 這意味著你可以只做可以在 WF 中重複的事情。 然後,代碼將運行在一種全然不同的環境中具有其自己的規則和限制。

作為一個工作流運行任何腳本

運行工作流的最簡單方法是,只是作為一個工作流運行任何標準的 Windows PowerShell 腳本。 可以使用調用 AsWorkflow 命令來執行此操作。 雖然 Windows PowerShell 版本 3 應該是能夠發現並不需要顯式地第一次載入模組情況下運行的命令,此命令在 PSWorkflow 模組中,生活。 此命令在 InlineScript 塊,意味著它內 WF 作為單步運行中基本上環繞你整個腳本。

這意味著您不必擔心 Windows PowerShell 工作流的限制。 不過,你也不能利用某些 Windows PowerShell 工作流功能,像恢復被中斷的進程的能力。 在這種情況下,您的"進程",將包括在單個步驟中運行整個腳本。 是沒有可能的要通過中途恢復,如果你要暫停或中斷。 這裡是一個示例,其中我用幾個命令創建一個腳本塊,然後將它們作為一個工作流運行:

$script = { $name = Get-Content Env:\COMPUTERNAME $name | Out-File c:\MyName.txt Get-Service } Invoke-AsWorkflow -Expression $script -PSComputerName DC,CLIENT

我在這裡使用一個變數的原因之一是顯示 WF 作為單一的 InlineScript 運行所有這一切。 請記住,每個命令 WF 運行獲取其自己的新鮮的環境。 沒有內置的方法,以保持兩個命令之間的資料。 這意味著變數本身相當無用。 但是,因為這整件事隱式包裝為單一步驟 InlineScript,我創建的變數將在整個依然存在。

將你何必呢? Windows PowerShell 工作流仍為您提供了幾個額外優勢。 有一定數量的共用的所有工作流的參數。 這些服務允許您指定目標電腦名稱稱的東西等等。 您的腳本將繼承多機工作基本的基礎結構。 對於長時間運行的腳本,您可以啟動工作流,然後從遠端電腦斷開連接,而工作流繼續運行,這真是太好。

正式工作流語法

這裡是一個非常簡單的工作流:

Workflow New-Server { Get-Content -Path Env:\COMPUTERNAME | Out-File -FilePath C:\MyName.txt Get-NetAdapter -Physical } New-Server -PSComputerName CLIENT,DC

工作流是一種 Windows PowerShell 命令,像一個 Cmdlet、 腳本或函數。 這種情況下,您可以運行他們只需通過調用它們的名稱,所做的關於此示例中的最後一行。 請記住,所有的工作流繼承一定數量的內置參數,如 –PSComputerName。 工作流還依賴于 Windows PowerShell 遠端處理功能,在此示例中的兩台電腦上啟用的。

實際結果是,在工作流中的這兩個命令正在運行右在遠端電腦上,回到我的電腦的結果。 我沒有的任何的代碼或甚至創建電腦名稱稱參數。 我沒有要枚舉的電腦名稱稱,創建連接或別的什麼。 Windows PowerShell 工作流對它為我所有。 絕對沒有在此腳本中我不能沒有 Windows PowerShell 工作流實現 — 它只需要多一點點我的一部分工作。

你會發現我已經在我的工作流中闡明的命令名稱。 我還在每個實例使用命名的參數。 總是在任何 Windows PowerShell 腳本中的最佳做法,但它是強制性的工作流。 您不能使用位置參數。 你必須清楚說明一切,否則你會出錯。

現在簽出此工作流 (不是您需要導入您在"工作流"關鍵字是法律秩序的殼實例的 PSWorkflow 會議):

Workflow New-Server { $name = Get-Content -Path Env:\COMPUTERNAME Get-Content -Path Env:\COMPUTERNAME | Out-File -FilePath C:\MyName.txt Get-NetAdapter -Physical $name | Out-File -FilePath C:\MyOtherName.txt } New-Server -PSComputerName CLIENT,DC

當我第一次寫此示例中,我想,"MyOtherName.txt 將為空"。請記住,作為單獨的命令,它們之間沒有共用上下文運行的每個工作流的內容。 當我運行此示例時,但它工作。 電腦名稱稱的確是寫給 MyName.txt 和 MyOtherName.txt。 誰給?

Windows PowerShell 實際上許多罩下的東西,以嘗試並確保您得到您期望的結果從工作流。 例如,一個"正常的"工作流命令是用寫的非常具體的方式。 WF 不能以本機方式運行只是任何舊的 Windows PowerShell Cmdlet。 Windows PowerShell 團隊提供 WF 等效一大堆的本機 Cmdlet,所以,通常是 Cmdlet 和 WF 活動之間的一對一映射。

當您使用 Cmdlet,沒有相應的活動時,Windows PowerShell 隱式環繞您 WF InlineScript 活動範圍內的代碼。 這已使運行 Windows PowerShell、 執行您在 Windows PowerShell 命令,然後考慮結果回 WF WF 的效果。 所以很多東西,"不應該"工作會工作,因為 Windows PowerShell hacks 它一起為你。

這裡的危險是疑難排解可以成為極其困難,因為你不會總是能夠看到 Windows PowerShell 引擎蓋下做什麼。 在此示例中,Windows PowerShell 確保頂級變數保存整個工作流。

我們打算下一步

信不信由您,你已經有足夠開始寫作基本工作流。 您可以讓這些目標在您安裝 Windows PowerShell 版本 3 和啟用遠端處理的任何電腦。 啟用遠端處理是理由的它創建一個 Windows PowerShell 工作流使用的會話配置。 如果上啟用了遠端處理電腦與 Windows PowerShell 版本 2,然後再安裝版本 3,要重新運行啟用 PSRemoting 來創建必要的配置。

保持您的工作流相當簡單。 運行的命令序列和不要做大量的花式動作。 您不應該有任何問題,你就會利用內置的 Windows PowerShell 工作流遠端、 多機靶向和其他功能。

下個月,我就會開始獲取複雜得多。 我看看深工作流和正常的 Windows PowerShell 腳本之間的差異,然後開始探索一些更有趣的 Windows PowerShell 工作流功能。

Don Jones

Don JonesWindows PowerShell MVP 獎得主、 TechNet 雜誌 》 的特約編輯。 他合著了有關 Windows PowerShell 版本 3,包括在 Windows PowerShell 和 Windows PowerShell 遠端處理中創建 HTML 報表上的幾個免費標題的四本書。 找到它們都在 PowerShellBooks.com,或問Jones你在 PowerShell.org 的討論論壇。

相關的內容