共用方式為


Windows PowerShell:常見參數與執行階段變數

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

Don Jones

有關工作流的整潔的事情之一就是你獲得一噸的內置功能。 例如,每個工作流,您編寫本機知道如何跟遠端電腦通過 Windows PowerShell 遠端處理 (Windows 遠端系統管理,稱為 WinRM)。

這意味著您可以編寫每個工作流對本地電腦上,運行,您可以遠端的整件事。 常見的工作流參數和變數讓你訪問這些本機的"快捷方式"功能。

通用工作流參數

這些都記錄在 about_WorkflowCommonParameters 的説明檔中,雖然您需要手動導入的 PSWorkflow 模組 Windows PowerShell 3.0 中可見該説明檔的順序。 這裡是看看一些更常見的:

  • -AsJob 部隊該工作流作為後臺作業運行。 相關-JobName 參數允許您將一個自訂名稱應用於這份工作。
  • -PSAuthentication 允許您指定的身份驗證機制如 Kerberos 或憑據安全性支援提供者 (CredSSP) 的遠端連線。 CredSSP 很有用的當工作流需要訪問非本地資源,需要額外的網路"躍點"。
  • -PSComputerName 允許您指定一個或多個電腦名稱稱後,您計畫運行工作流。 例如,PSComputerName (Get ADComputer-篩選器 * |請選擇-展開名稱) 將所有域電腦上運行工作流。 你應該小心這一個。
  • -PSConnectionRetryCount 指定的次數,工作流將嘗試連接到每台遠端電腦,和-PSConnectionRetryIntervalSec 是嘗試之間等待的秒數。
  • -PSCredential 允許您指定用於遠端連線的備用憑據。
  • -PSParameterCollection 允許您指定工作流常用參數的雜湊表。 這是棘手。 您可以與每個連接到一個或多個電腦的雜湊表指定的散清單,以逗號分隔的清單。 例如,此參數指定為電腦一個和兩個不同的連接重試計數: -

PSParameterCollection, @{PSComputerName='ONE';PSConnectionRetryCount=10},@{PSComputerName='TWO';PSConnectionRetryCount=20}

  • PSPort 和-PSUseSSL 讓您指定備用埠和 (可選) 啟用 SSL (假設遠端機器有一個有效的 SSL 憑證和配置 WinRM 攔截器) 的連接。

請記住,所有的工作流獲取這些選項。 您不必編寫任何代碼,使他們的工作。 他們是免費的感覺太棒了。

自動工作流變數

所有正常 Windows PowerShell 自動變數,如 $Args、 $Error、 $MyInvocation、 $PSBoundParameters 和 $PsCmdlet,是在工作流內可用。 工作流中添加更多在 Windows PowerShell 的提供:

  • $PSParentActivityID 為當前作用域和所有子作用域提供一個唯一的識別碼。 這允許您唯一地標識每個實例的工作流,例如當您想要將資訊記錄到一個中央的檔。
  • $PSWorkflowRoot 包含工作流的根路徑。
  • $WorkflowInstanceID 是工作流實例的唯一識別碼。

整個組變數反映了較早前所述的共同工作流參數的內容。 例如,$PSComputerName 包含-PSComputerName 參數的值。 您還可以使用 $ParentJobName 和 $JobName 來訪問作業資訊。 如果-PSComputerName 包含多個值,然後運行該工作流的每個電腦將看到只有自己在 $PSComputerName 中的名稱。 看看這個變數的完整清單為額外的參考。

變數規則

請記住在工作流中的變數的工作方式有點不同。 例如,您不能將子運算式的結果分配給一個變數。 取代以下程式碼:

$x = $(Get-Service)

你只需運行:

$x = Get-Service

此外,不能將一個變數的值分配給在同一語句中的另一個變數:

$a = $b = 23

你要做,作為兩個單獨的操作。 而且,不能將物件放在一個變數中,並更改該物件的屬性:

$obj = New-PSSessionOption $obj.SkipCACheck = $true

您自己的參數和變數

您的工作流當然可以在參數塊中定義它們自己的輸入的參數。 這些變數作為公開工作流中。 例如,定義-MyParam 給你 $MyParam 變數在該工作流。 只是不要添加通用工作流參數。 那些神奇地在工作流運行時由 Windows PowerShell 添加。

活動常見參數

在這裡是有點令人困惑 — — 你運行在工作流中,每個命令或命令你在 InlineScript {} 塊中運行的每個塊被認為是一項活動。 Windows PowerShell 中添加常用參數以及,這些活動包括-PSComputerName。 因為這些活動看起來像正常的 Cmdlet,這可以是令人困惑。 範例:

Get-Process –PSComputerName ONE,TWO,THREE

正常的獲取進程 Cmdlet 都有-ComputerName 參數,但不是-PSComputerName 參數。 僅在一個工作流內, 有效的後者是在獲取進程從技術上講不是 Cmdlet — — 它是一種工作流活動。 InlineScript {} 塊支援這些參數:

InlineScript { Get-Process } –PSComputerName ONE,TWO,THREE

InlineScript {} 內的命令將只是 Cmdlet。 他們不會活動的一般參數。 最後,和只是為了讓事情更令人困惑,不會有相當的工作流的任何命令活動將隱式地裹 InlineScript {},但不能使用的共同活動參數。 範例:

Get-WindowsFeature

這是一種命令,不是工作流活動。 有可用的沒有等效的活動。 不是說你會知道的因為那裡是沒話可說。 但不是能向它添加-PSComputerName。 這是工作流獲取令人討厭的地方,因為那裡是沒有辦法到輕鬆地告訴活動是什麼和什麼不是。 所以你不會總是知道,除了要試一試,和有它成功或失敗。

看看這如何獲取棘手嗎?

這是與工作流的工作從何處開始變得困難。 你有引擎蓋下發生的所有這些額外的位。 雖然多數都是有説明的他們是不一貫地執行。 就出現了大量的試驗和錯誤。

只是記住,工作流是一個不同的世界。 Windows PowerShell 只提供給它一個閘道。 你不能指望正常的 Windows PowerShell 環境完全一致。

Don Jones

Don Jones 是 Windows PowerShell 最有價值球員獎的收件者和 TechNet Magazine 》 的特約編輯。 他合著了四本關於 Windows PowerShell 版本 3.0,包括免費的 Windows PowerShell 遠端處理上的與在 Windows PowerShell 中創建 HTML 報告書。 找到他們都是在 PowerShellBooks.com,或在討論論壇上問Jones PowerShell.org

相關的內容