1
votes

I can use azure automation runbook(powershell) to run a Powershell residing in the VM. It works well as long as there is no parameters required by the VM Powershell. If we send parameters from the runbook to VM powershell then it is not working. VM powershell recieves parameters as null. Runbook has no issues otherwise. This is how parameter is passed.

$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

This is how the parameter is received in the VM-powershell-script

[CmdletBinding()]
param (
    [Parameter(Position=0)]
    [string]$name
)
1

1 Answers

1
votes

After my validation, you just need to pass a Hashtable variable into the run command parameters -Parameter, refer here.

Here is a working sample for your reference:

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

enter image description here