azure 将参数从Runbook Invoke-AzVMRunCommand传递到虚拟机上的Powershell

snz8szmq  于 2023-02-25  发布在  Shell
关注(0)|答案(1)|浏览(107)

我正在尝试在PowerShell中执行Invoke-AzVMRunCommand,并将参数传递给需要执行的脚本。
在运行Runbook之前,我可以定义参数名称:Define Parameter
Runbook中的代码:

param(
    [Parameter(Mandatory=$true)]
    [string]$name
)


Write-Output "Connecting to azure via Connect-AzAccount -Identity"
Connect-AzAccount -Identity 
Write-Output "Successfully connected with Automation account's Managed Identity"

Write-Output "Run Script Against Machines"

$ScriptToRun = "C:\testps.ps1"

Out-File -InputObject $ScriptToRun -FilePath ScriptToRun.ps1 

Invoke-AzVMRunCommand -ResourceGroupName "RG" `
                      -VMName "VM" `
                      -CommandId 'RunPowerShellScript' `
                      -ScriptPath ScriptToRun.ps1 `
                      -Parameter @{"name" = $name}
                    
Remove-Item -Path ScriptToRun.ps1

要使用以下参数执行的服务器上的脚本:

param(
    [string]$name
)

MKdir -Path "C:\Users" -Name $name

脚本未生成预期的输出:正在使用C:\Users下的参数创建名为的文件夹。未创建任何文件夹。
如果我在同一个脚本上执行Invoke-AzVMRunCommand,并使用如下硬编码参数:
MKdir -路径“C:\Users”-名称“TEST”,它确实工作,并创建文件夹。

nhhxz33t

nhhxz33t1#

首先,我在虚拟机上有脚本,并遵循Microsoft-Document

param(
    [string]$name
)
MKdir -Path "C:\Users" -Name $name

然后,我在脚本中使用az invoke命令代替Invoke-AzVMRunCommand,并使用以下命令:

az vm run-command invoke  --command-id RunPowerShellScript --name "name of the VM" -g "name of the resourcegrp" --scripts "C:\test.ps1  $name"

这里的$name是您发送到runbook的参数。
通过这种方式,您可以创建具有所需名称的文件夹。

参考文献摘自:

  • 使用参数在Azure上的远程VM上执行Powershell脚本-堆栈溢出
  • 如何将json文件作为参数传递给Azure Powershell Runbook?-堆栈溢出

相关问题