How to convert PSVirtualMachineObjects?

I am trying to deploy Azure VM through a workflow so that this can be done in parallel. The code works great outside of the workflow. But getting this error while trying to do it through a workflow.

I am importing VM parameters via csv file. Are there any additional considerations for deploying Azure VM through Workflow?

Workflow Deploy-VMs { $cred1= New-Object System.Management.Automation.PSCredential "User",$(ConvertTo-SecureString "Password" -asplaintext -force) $b=Import-Csv Y:\NLG\vms1.csv -Verbose|? type -eq 'VM' foreach ($c in $b) { AzureRM.Resources\Login-AzureRmAccount -Credential $cred1 -SubscriptionId subscription id $nic = New-AzureRmNetworkInterface -Name $c.Name -ResourceGroupName nlg -Location $c.Location -SubnetId $c.SubnetID $cred= New-Object System.Management.Automation.PSCredential "nladmin",$(ConvertTo-SecureString $c.Password -asplaintext -force) $vmConfig = New-AzureRmVMConfig -VMName $c.Name -VMSize "Standard_D1" $vmConfig = Set-AzureRmVMOperatingSystem -VM $vmConfig -Windows -ComputerName $c.Name -Credential $cred $vmConfig = Set-AzureRmVMSourceImage -VM $vmConfig -PublisherName "MicrosoftWindowsServer" -Offer "WindowsServer" -Skus "2012-R2-Datacenter-smalldisk" -Version "latest" $vmConfig = Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $nic.Id $vmConfig = Set-AzureRmVMOSDisk -VM $vmConfig -Name $c.Name -CreateOption FromImage New-AzureRmVM -ResourceGroupName $c.RG -Location $c.Location -VM $vmConfig } } 

and get this error

Unable to bind "VM" parameter. Cannot convert the value "Microsoft.Azure.Commands.Compute.Models.PSVirtualMachine" to enter "Microsoft.Azure.Commands.Compute.Models.PSVirtualMachine". Error: "Unable to convert Value" Microsoft.Azure.Commands.Compute.Models.PSVirtualMachine "type" Deserialized.Microsoft.Azure.Commands.Compute.Models.PSVirtualMachine type "Microsoft.Azure.Commands.Compute.Models.PSVirtualMachine "+ CategoryInfo: InvalidArgument: (:) [Set-AzureRmVMOperatingSystem], ParameterBindingException + FullyQualifiedErrorId: CannotConvertArgumentNoMessage, Microsoft.Azure.Commands.Compute.SetAzureVMOperatingSystemCommand + PSComputer]

+5
source share
1 answer

Inline script is allowed for incompatible cmdlets.

 Workflow Deploy-VMs { $cred1 = New-Object System.Management.Automation.PSCredential "User", $(ConvertTo-SecureString "Password" -AsPlainText -Force) $b = Import-Csv Y:\NLG\vms1.csv -Verbose|? type -eq 'VM' foreach -Parallel ($c in $b) { AzureRM.Resources\Login-AzureRmAccount -Credential $cred1 -SubscriptionId c2d7e81b-ed6a-4de9-a4cd-36e679ec4259 $nic = New-AzureRmNetworkInterface -Name $c.Name -ResourceGroupName nlg -Location $c.Location -SubnetId $c.SubnetID $cred = New-Object System.Management.Automation.PSCredential "nladmin", $(ConvertTo-SecureString $c.Password -AsPlainText -Force) InlineScript { $vmConfig = New-AzureRmVMConfig -VMName $using:c.Name -VMSize "Standard_D1" $vmConfig = Set-AzureRmVMOperatingSystem -VM $vmConfig -Windows -ComputerName $using:c.Name -Credential $using:cred $vmConfig = Set-AzureRmVMSourceImage -VM $vmConfig -PublisherName "MicrosoftWindowsServer" -Offer "WindowsServer" -Skus "2012-R2-Datacenter-smalldisk" -Version "latest" $vmConfig = Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $using:nic.Id $vmConfig = Set-AzureRmVMOSDisk -VM $vmConfig -Name $using:c.Name -CreateOption FromImage New-AzureRmVM -ResourceGroupName $using:c.RG -Location $using:c.Location -VM $vmConfig } } } 
+1
source

Source: https://habr.com/ru/post/1270793/


All Articles