Я могу использовать модуль Runbook для автоматизации Azure (powershell) для запуска Powershell, находящегося на виртуальной машине. Он работает хорошо, пока нет параметров, требуемых VM Powershell. Если мы отправляем параметры из runbook в VM powershell, то он не работает. VM powershell получает параметры как нулевые. В остальном у Runbook нет проблем. Вот как передается параметр.
$runcmdparameters=
@{"name" = "EXE"}
Out-File -InputObject $ScriptToRun -FilePath ScriptToRun.ps1
Invoke-AzVMRunCommand -AsJob -ResourceGroupName $RG-Name -Name $myName-CommandId 'RunPowerShellScript' -ScriptPath ScriptToRun.ps1 -Parameter $runcmdparameters -Verbose
Вот так параметр получен в VM-powershell-script
[CmdletBinding()]
param (
[Parameter(Position=0)]
[string]$name
)
После моей проверки вам просто нужно передать переменную Hashtable в параметры команды запуска -Parameter
, см. здесь.
Вот рабочий образец для справки:
function Install-Postgres {
[CmdletBinding()]
param (
[Parameter(Position=0)]
[string]$name
)
Write-Host "This is a sample script with parameters $name"
}
$ScriptToRun = Get-Content Function:\Install-Postgres
Out-File -InputObject $ScriptToRun -FilePath ScriptToRun.ps1
$params = @{"name" = "EXE" }
$ss=Invoke-AzVMRunCommand -ResourceGroupName $rgName -VMName $VMVame -ScriptPath "ScriptToRun.ps1" -CommandId 'RunPowerShellScript' -Parameter $params
Write-output $ss.Value[0].Message
На самом деле это так. Сценарий (функция) является частью сценария автоматизации. В то время как ОП поместил это в виртуальную машину в виде файла powershell. Передача параметров тому, что вызвало проблему. Это не решает эту проблему, но это лучшее решение для ОП.
Это не отличается от первоначально опубликованного кода, поэтому я думаю, что должна быть какая-то другая проблема.