[英]Using az vm run-command from within a .ps1 script and with .ps1 script file
我已經在 Azure 中創建了一個 VM,並且可以從我的本地 Windows 10 Powershell 窗口運行以下命令:
az vm run-command invoke --command-id RunPowerShellScript --resource-group $ResourceGroup --name $AD1Name --scripts "@provision.ps1"
但是,當我將此行放在 Powershell 腳本文件 CreateVMAndProvision.ps1 中,並運行我的 CreateVMAndProvision.ps1 並運行az vm create...
我收到以下錯誤:
"value": [
{
"code": "ComponentStatus/StdOut/succeeded",
"displayStatus": "Provisioning succeeded",
"level": "Info",
"message": "",
"time": null
},
{
"code": "ComponentStatus/StdErr/succeeded",
"displayStatus": "Provisioning succeeded",
"level": "Info",
"message": "At C:\\Packages\\Plugins\\Microsoft.CPlat.Core.RunCommandWindows\\1.1.5\\Downloads\\script6.ps1:1 char:1
+ @provision.ps1
+ ~~~~~~~~
The splatting operator '@' cannot be used to reference variables in an expression. '@provision'
can be used only as an argument to a command. To reference variables in an expression use
'$provision'.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : SplattingNotPermitted
",
"time": null
}
]
}
將 az cli 命令的本地 provision.ps1 文件指定為"@provision.ps1"
的語法似乎是問題所在,但我不知道如何解決這個問題。 我曾嘗試使用雙引號,雙引號和單引號的組合,這里的字符串 (@"..."@) 和 (@'...'@) 沒有任何成功。
任何人都知道如何解決這個問題?
謝謝! :: 彼得
是的,這是 Azure CLI 文檔中記錄的引用問題之一:
在 PowerShell 中運行 Azure CLI 命令時,當參數包含 PowerShell 的特殊字符時,會發生解析錯誤,例如
@
。 您可以通過在特殊字符前添加反引號 (`) 來解決這個問題,或者用單引號或雙引號 '/" 將參數括起來。例如,
az group deployment create --parameters @parameters.json
在 PowerShell 中不起作用,因為@
被解析為splatting 符號。 要解決此問題,您可以將參數更改為 `@parameters.json 或 '@parameters.json'。
由於您已經擁有一個 PS 腳本,因此最簡單的方法是使用az vm run-command
的 PowerShell 等效項,即Invoke-AzVMRunCommand 。
以下是如何使用它:
Invoke-AzVMRunCommand -ResourceGroupName '<myResourceGroup>' -Name '<myVMName>' -CommandId 'RunPowerShellScript' -ScriptPath '<pathToScript>' -Parameter @{"arg1" = "var1";"arg2" = "var2"}
此處介紹了使用 Run Command 在 Windows VM 中運行 PowerShell 腳本的其他方法。
但是,如果您確實有在 PS 腳本中使用 Azure CLI 命令的特定原因,您也可以嘗試在您的命令中使用 PowerShell 的停止解析符號--%
。 PowerShell 3.0 中引入的停止解析符號 (--%) 指示 PowerShell 避免將輸入解釋為 PowerShell 命令或表達式。
所以這應該可以解決問題:
az --% vm run-command invoke --command-id RunPowerShellScript --resource-group '<myResourceGroup>' --name '<myVMName>' --scripts @script.ps1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.