簡體   English   中英

在 .ps1 腳本和 .ps1 腳本文件中使用 az vm run-command

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM