使用全域資產簡化服務管理自動化 Runbook 撰寫
全域資產可供自動化環境中的所有 Runbook 使用。 您可以使用管理入口網站中的自動化工作區,或 Windows PowerShell 中適當的指令程式來建立及設定這些資源。 在 Runbook 中,您可以為 RunbookConstructs 模組中的活動擷取及設定全域資產的值。 Windows PowerShell Cmdlet 可用於 Service Management Automation 中的 Runbook,但建議使用活動,因為它們不需要透過自動化 Web 服務運作,因此會更有效率。
取得或設定認證
自動化認證是可以在 Windows PowerShell 命令中使用的使用者名稱及密碼,或是上傳至伺服器的憑證。 認證的屬性會安全地儲存在自動化資料庫中,而且可以使用 Get-AutomationPSCredential 或 Get-AutomationCertificate 活動在 Runbook 中存取。
用於管理認證的 PowerShell
您可以使用下表中的 Cmdlet,在 Service Management Automation 中使用 Windows PowerShell 建立和管理認證。
指令程式 | 描述 |
---|---|
Get-SmaCertificate | 擷取自動化憑證。 |
Get-SmaCredential | 擷取自動化PowerShell認證。 |
Remove-SmaCertificate | 拿掉自動化憑證。 |
Remove-SmaCredential | 拿掉自動化PowerShell認證。 |
Set-SmaCertificate | 建立新的憑證,或設定現有憑證的屬性,包括上傳憑證檔案和設定.pfx 的密碼。 |
Set-SmaCredential | 建立新的 Automation PowerShell 認證,或設定現有認證的屬性。 |
用於使用認證的 PowerShell
您可以使用下表中的活動來存取 Runbook 中的認證。
活動 | 描述 |
---|---|
Get-AutomationCertificate | 取得在 Runbook 中使用的憑證。 |
Get-AutomationPSCredential | 取得要在 Runbook 中使用的使用者名稱/密碼。 |
注意
您應該避免在 「Get-AutomationPSCredential 和 Get-AutomationCertificate 的 Name 參數中使用變數,因為這會使探索 Runbook 與自動化變數之間的相依性變得複雜。
在管理入口網站中建立PowerShell認證
選取 [自動化] 工作區。
在視窗頂端,選取 [ 資產]。
在視窗底部,選取 [ 新增設定]。
選取 [ 新增認證]。
在 [認證類型] 下拉式清單中,選取 [PowerShell 認證] 。
在 [ 名稱 ] 方塊中輸入認證的名稱。
選取 [向右鍵]。
輸入每個屬性的值。
選取複選標記以儲存認證。
在 中建立憑證
管理入口網站
選取 [自動化] 工作區。
在視窗頂端,選取 [ 資產]。
在視窗底部,選取 [ 新增設定]。
選取 [ 新增認證]。
在 [認證類型] 下拉式清單中,選取 [憑證] 。
在 [ 名稱 ] 方塊中輸入憑證的名稱。
選取 [向右鍵]。
選取 [ 瀏覽檔案 ],然後流覽至.cer或 .pfx 檔案。
如果您選取 .pfx 檔案,請提供其密碼。
選取複選標記以儲存憑證。
使用 PowerShell 建立認證
下列命令範例示範如何建立新的認證。
$webServer = 'https://MyWebServer'
$port = 9090
$credName = 'MyCredential'
$user = 'contoso\MyUser'
$pwd = ConvertTo-SecureString -String 'P@$$w0rd' -AsPlainText -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user,$pwd
Set-SmaCredential -WebServiceEndpoint $webServer -port $port -Name $credName -Value $cred
在 Service Management Automation 中使用 Windows PowerShell 建立新 PowerShell 憑證
下列命令範例示範如何匯入憑證檔案以建立新憑證。
$webServer = 'https://MyWebServer'
$port = 9090
$certName = 'MyCertificate'
$path = 'c:\certs\MyCertificate.pfx'
$certPwd = ConvertTo-SecureString -String 'P@$$w0rd' -AsPlainText -Force
Set-SmaCertificate -WebServiceEndpoint $webServer -port $port -Name $certName -Path $certPath -Password $certPwd
在 Runbook 中使用 PowerShell 認證
使用 Get-AutomationPSCredential 活動擷取 Runbook 中的 PowerShell 認證。 這會傳回可在工作流程中使用的 PSCredential 物件。
下列命令範例顯示如何在 Runbook 中使用 PowerShell 認證。 在此範例中,認證會使用 InlineScript 活動,使用替代認證以執行一組命令。
$myCredential = Get-AutomationPSCredential -Name 'MyCredential' InlineScript { <Commands> } -PSComputerName $ServerName -PSCredential $myCredential
管理 SMA 連線
自動化連線包含從 Runbook 連線至服務或應用程式所需的資訊。 這項資訊定義於應用程式的模組,且通常包含使用者名稱、密碼及連線的電腦等資訊。 可能也需要其他資訊,例如憑證或訂用帳戶標識碼。 聯機的屬性會安全地儲存在自動化資料庫中,而且可以使用 Get-AutomationConnection 活動在 Runbook 中存取。
Windows PowerShell Cmdlet
您可以使用下表中的 Windows PowerShell Cmdlet 來建立和管理認證。
指令程式 | 描述 |
---|---|
Get-SmaConnection | 擷取特定連線中每個欄位的值。 |
Get-SmaConnectionField | 擷取特定連線類型的欄位定義。 |
Get-SmaConnectionType | 擷取可用的連線類型。 |
New-SmaConnection | 建立新連線。 |
Remove-SmaConnection | 移除現有的連線。 |
Set-SmaConnectionFieldValue | 設定現有連線的特定欄位值。 |
Runbook 活動
您可以使用下表中的活動,存取 Runbook 中的連線。
活動 | 描述 |
---|---|
Get-AutomationConnection | 取得在 Runbook 中使用的連線。 |
在管理入口網站中建立連線
選取 [自動化] 工作區。
在視窗頂端,選取 [ 資產]。
在視窗底部,選取 [ 新增設定]。
選取 [新增連線]。
在 [連線類型] 下拉式清單中,選取連線類型。
在 [ 名稱 ] 方塊中輸入連線的名稱。
選取 [向右鍵]。
輸入每個屬性的值。
選取複選標記以儲存連線。
使用 Windows PowerShell 建立連線
下列命令範例會使用名稱 MyVMMConnection 建立新的 Virtual Machine Manager 連線。
注意
我們使用哈希表來定義連接的屬性。 這是因為不同類型的連線需要不同的屬性集。 另一種類型的連線會使用一組不同的欄位值。
如需有關雜湊表的詳細資訊,請參閱 about_Hash_Tables。
$webServer = 'https://MyWebServer'
$port = 9090
$connectionName = 'MyConnection'
$fieldValues = @{"Username"="MyUser";"Password"="password";"ComputerName"="MyComputer"}
New-SmaConnection -WebServiceEndpoint $webServer -port $port -Name $connectionName -ConnectionTypeName "VirtualMachineManager" -ConnectionFieldValues $fieldValues
在 Runbook 中使用連線
使用 Get-AutomationConnection 活動在 Runbook 中使用連線。 此活動會擷取連接中不同欄位的值,並將它們當做哈希表傳回,然後可以搭配 Runbook 中的適當命令使用。
如需有關雜湊表的詳細資訊,請參閱 about_Hash_Tables。
下列程式碼範例示範如何使用連線,為另一部電腦上執行命令的 InlineScript 區塊提供電腦名稱與認證。
$con = Get-AutomationConnection -Name 'MyConnection'
$securepassword = ConvertTo-SecureString -AsPlainText -String $con.Password -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $con.Username, $securepassword
InlineScript {
<Commands>
} -PSComputerName $con.ComputerName -PSCredential $cred
使用全域變數簡化 Runbook 開發
自動化變數是可供所有 Runbook 使用的值。 您可以從管理入口網站、Windows PowerShell 或 Runbook 內建立、修改及擷取它們。 自動化變數對下列案例很實用:
在多個 Runbook 之間共用一個值。
從相同 Runbook 的多個工作之間共用一個值。
從管理入口網站,或從 Runbook 使用的 Windows PowerShell 命令列中管理值。
自動化變數會保存,因此即使 Runbook 失敗,它們仍可繼續使用。 這也允許一個 Runbook 設定值,然後由另一個 Runbook 使用,或在下次執行時由相同的 Runbook 使用。
建立變數時,您必須從下列清單指定其資料類型。 如此一來,管理入口網站就可以顯示變數值的適當控件。 您只能將正確類型的值指派給變數。
String
整數
布林值
Datetime
建立變數時,您可以指定將其加密儲存。 加密變數時,它會安全地儲存在 SMA 資料庫中,而且無法從 Get-SmaVariable Cmdlet 擷取其值。 擷取加密值的唯一方式是從 Runbook 中的 Get-AutomationVariable 活動。 您可以藉由建立哈希表,將定義型別的多個值儲存至單一變數。
Windows PowerShell Cmdlet
您可以使用下表中的 Windows PowerShell Cmdlet 來建立和管理變數。
指令程式 | 描述 |
---|---|
Get-SmaVariable | 擷取現有變數的值。 |
Set-SmaVariable | 建立新變數,或設定現有變數的值。 |
Runbook 活動
您可以使用下表中的活動來存取 Runbook 中的變數。
活動 | 描述 |
---|---|
Get-AutomationVariable | 擷取現有變數的值。 |
Set-AutomationVariable | 設定現有變數的值。 |
注意
您應該避免在 「Get-AutomationVariable 的 Name 參數中使用變數,因為這會使探索 Runbook 與自動化變數之間的相依性變得複雜。
在管理入口網站中建立新的變數
選取 [自動化] 工作區。
在視窗頂端,選取 [ 資產]。
在視窗底部,選取 [ 新增設定]。
選取 [ 新增變數]。
在 [類型] 下拉式清單中,選取資料類型。
在 [ 名稱 ] 方塊中輸入變數的名稱。
選取 [向右鍵]。
輸入變數的值,並指定是否要加密它。
選取複選標記以儲存新的變數。
使用 Windows PowerShell 建立新的變數
Set-SmaVariable Cmdlet 會建立新變數和設定現有變數的值。 下列命令範例會顯示如何建立字串類型的變數。
$web = 'https://MySMAServer'
$port = 9090
Set-SMAVariable -WebServiceEndpoint $web -Port $port -Name 'MyVariable' -Value 'My String'
在 Runbook 中使用變數
下列程式碼範例示範如何設定及擷取 Runbook 中的變數。 在此範例中,假設已建立名為 NumberOfIterations 和 NumberOfRunnings 的類型整數變數,以及名為 SampleMessage 的類型字元串變數。
$NumberOfIterations = Get-AutomationVariable -Name 'NumberOfIterations' $NumberOfRunnings = Get-AutomationVariable -Name 'NumberOfRunnings' $SampleMessage = Get-AutomationVariable -Name 'SampleMessage' Write-Output "Runbook has been run $NumberOfRunnings times." for ($i = 1; $i -le $NumberOfIterations; $i++) { Write-Output "$i`: $SampleMessage" } Set-AutomationVariable -Name NumberOfRunnings -Value (NumberOfRunnings += 1)