2017-08-11 61 views
5

Próbuję wdrożyć maszyny wirtualne Azure za pośrednictwem przepływu pracy, aby można było to zrobić równolegle. Kod działa dobrze poza przepływem pracy. Ale otrzymuję ten błąd, gdy próbuję to zrobić poprzez przepływ pracy.Jak przekonwertować PSVirtualMachineObjects?

Importuję parametry maszyny wirtualnej za pośrednictwem pliku csv. Czy istnieją dodatkowe uwagi dotyczące wdrażania maszyn wirtualnych Azure za pośrednictwem przepływu pracy?

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 
    } 
} 

i otrzymuję ten błąd

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

+0

Czy próbowałeś aktualizować moduły powershell? – 4c74356b41

+0

Tak. Nie pomaga. Używam Powershell v5.1 –

+1

Testuję w moim laboratorium. Mam taki sam rezultat z tobą. Może mógłbyś użyć [przykład] (https://blogs.inframon.com/2016/09/deploy-in-parallel-multiple-azure-virtual-machines-powershell-workflow-script/), aby utworzyć maszynę wirtualną równolegle. –

Odpowiedz

1

rozwiązać za pomocą skryptu inline dla niekompatybilnych 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 
     } 
    } 
}