我有以下在本地运行良好的 PS 脚本:
Get-AzureVM | Where-Object { $_.Name -eq "my-server-selector" } | select name | ForEach-Object {
Write-Output $_.Name
Start-AzureVM $_.Name $_.Name
}
在我的本地 PS 控制台的上下文中,我添加了我的订阅信息并且代码执行没有问题;所有虚拟机都打印到输出并启动服务器。
当我将它移动到云端时,我需要做一些其他的事情,即,将订阅纳入范围。为此,我在门户中创建凭证资产,通过所述凭证将帐户添加到我的脚本中,然后在脚本中选择正确的订阅。我还将它包装在一个工作流中(我打算在以后对某些方面进行参数化)。
最终代码如下:
workflow StartServer
{
$credential = GetAutomationPSCredential -Name "credential-asset-name"
Add-AzureAccount -Credential $credential
Select-AzureSubscription -SubscriptionName "subscription-name"
Write-Output "Starting the server."
Get-AzureVM | Where-Object { $_.Name -Contains "my-server-selector" } | select name | ForEach-Object {
Write-Output $_.Name
Start-AzureVM $_.Name $_.Name
}
Write-Output "Execution Complete."
}
如果我删除该Start-AzureVM
命令,工作流将按预期运行。我得到了打印出来的所有匹配虚拟机的列表。如果我尝试重新输入命令,则会收到以下错误:
Parameter set cannot be resolved using the specified named parameters.
所以,我认为我知道的事情:
- 凭据正在工作,因为我正在获取正确的虚拟机列表
- 订阅设置正确,因为它已转储到输出
- 脚本的内部部分在本地 powershell 控制台上工作,无需任何更改
任何人都可以提供有关在 Azure 自动化工作流中需要以不同方式完成哪些工作以使其正常工作的任何想法吗?