2017-08-11 75 views
5

Azure VM'leri bir iş akışından dağıtmaya çalışıyorum, böylece paralel olarak yapılabilir. Kod, bir iş akışının dışında iyi çalışır. Ama bu hatayı bir iş akışıyla yapmaya çalışırken alınıyor.PSVirtualMachineObjects nasıl dönüştürülür?

VM parametrelerini csv dosyası aracılığıyla içe aktarıyorum. Azure VM'leri bir İş Akışı aracılığıyla dağıtmak için ek hususlar var mı?

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

ve bu hatayı uyumsuz davranırlar için satır içi komut dosyası kullanılarak Çözülmüş

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

Powershell modüllerini güncelleştirmeyi denediniz mi? – 4c74356b41

+0

Evet. Yardım etmiyor. Ben Powershell v5.1 kullanıyorum –

+1

Ben laboratuvarımda test ediyorum. Seninle aynı sonucu elde ediyorum. Belki de paralel olarak VM oluşturmak için [example] (https://blogs.inframon.com/2016/09/deploy-in-parallel-multiple-azure-virtual-machines-powershell-workflow-script/) kullanabilirsiniz. –

cevap

1

alma.

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