2016-08-22 11 views
0

Azure環境でVM作成を自動化しようとしています。すべてが正常に動作しています.VMがこのスクリプトで作成されていても、スクリプトはハングしていて、Ctrl + Alt + Deleteを使用してスクリプトを終了するたびに停止します。デバッガを置いている間、私のコードの最後の行に実行が停止しているのを見ています。すべての回線の残りの部分は、最後の回線に掛かっている間だけ、正常に動作しています。PowerShell Azure New-AzureRmVMが応答しない

$result = New-AzureRmVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VirtualMachine -Verbose 

次のコードを入力して、VM作成のステータスを読み取ります。私は状況を読んでそれに応じてユーザーを更新したいと思います。残念ながら、コントロールはまったくここに来ていません。

if($result.Status -eq 'Succeeded') { 
$result 
Write-Verbose ('VM named ''{0}'' is now ready, you can connect using username: {1} and password: {2}' -f $VMName, $username, $password) 
} else { 
    Write-Error 'Virtual machine was not created successfully.' 
} 

以下はスクリプト全体です。これを取り除くことをお勧めします。

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 

$objForm = New-Object System.Windows.Forms.Form 
$objForm.Text = "Azure Automation" 
$objForm.Size = New-Object System.Drawing.Size(413, 320) 
$objForm.StartPosition = "CenterScreen" 
$objForm.TopMost=$true 


#$objForm.AutoScaleDimensions= New-Object System.Drawing.SizeF(6F 13F) 
#$objForm.AutoScaleMode = New-Object System.Windows.Forms.AutoScaleMode.Font 

# Project Name Label 
$lblProjectName = New-Object System.Windows.Forms.Label 
$lblProjectName.AutoSize = $true; 
$lblProjectName.Location = New-Object System.Drawing.Point(23, 55) 
$lblProjectName.Size = New-Object System.Drawing.Size(83, 13) 
$lblProjectName.TabIndex = 0 
$lblProjectName.Text = "Project Name" 
$objForm.Controls.Add($lblProjectName) 

#Project Name TextBox 
$txtProjectName = New-Object System.Windows.Forms.TextBox 
$txtProjectName.Location = New-Object System.Drawing.Point(151, 55) 
$txtProjectName.MaxLength = 9 
$txtProjectName.Name = "txtProjectName" 
$txtProjectName.Size = New-Object System.Drawing.Size(146, 20); 
$txtProjectName.TabIndex=1 
$objForm.Controls.Add($txtProjectName) 

#Label VM Size 
$lblVMSize = New-Object System.Windows.Forms.Label 
$lblVMSize.AutoSize = $true 
$lblVMSize.Location = New-Object System.Drawing.Point(23, 97) 
$lblVMSize.Name = "lblVMSize"; 
$lblVMSize.Size = New-Object System.Drawing.Size(53, 13) 
$lblVMSize.TabIndex = 2 
$lblVMSize.Text = "VM Size" 
$objForm.Controls.Add($lblVMSize) 

#Combo VM Size 
$cmbVMSize = New-Object 'System.Windows.Forms.ComboBox' 
$cmbVMSize.Location = New-Object System.Drawing.Point(151, 94) 
$cmbVMSize.Name = "cmbVMSize"; 
$cmbVMSize.Size = New-Object System.Drawing.Size(146, 21); 
$cmbVMSize.TabIndex = 3; 
$cmbVMSize.SuspendLayout() 
[void]$cmbVMSize.Items.Add('Standard_A0') 
[void]$cmbVMSize.Items.Add('Standard_A1') 
[void]$cmbVMSize.Items.Add('Standard_A2') 
[void]$cmbVMSize.Items.Add('Standard_A3') 
[void]$cmbVMSize.Items.Add('Standard_A4') 
$cmbVMSize.ResumeLayout($false) 
[void]$objForm.Controls.Add($cmbVMSize) 

    #Lable OS 
$lblOS = New-Object System.Windows.Forms.Label 
$lblOS.AutoSize = $true; 
$lblOS.Location = New-Object System.Drawing.Point(23, 143) 
$lblOS.Name = "lblOS"; 
$lblOS.Size = New-Object System.Drawing.Size(106, 13) 
$lblOS.TabIndex = 4 
$lblOS.Text = "Operating System" 
[void]$objForm.Controls.Add($lblOS) 

    #Combo OS 
$cmbOS = New-Object 'System.Windows.Forms.ComboBox' 
$cmbOS.Location = New-Object System.Drawing.Point(151, 140) 
$cmbOS.Name = "cmbOS"; 
$cmbOS.Size = New-Object System.Drawing.Size(146, 21); 
$cmbOS.TabIndex = 5; 
$cmbOS.SuspendLayout() 
[void]$cmbOS.Items.Add('Windows Server') 
[void]$cmbOS.Items.Add('Ubuntu Server') 
[void]$cmbOS.Items.Add('Red Hat Enterprise Linux') 
[void]$cmbOS.Items.Add('SQL Data Center') 
[void]$cmbOS.Items.Add('Oracle Data Center') 
$cmbOS.ResumeLayout($false) 
[void]$objForm.Controls.Add($cmbOS) 

    #Lable DB 
$lblDB = New-Object System.Windows.Forms.Label 
$lblDB.AutoSize = $true; 
$lblDB.Location = New-Object System.Drawing.Point(23, 185) 
$lblDB.Size = New-Object System.Drawing.Size(61, 13) 
$lblDB.TabIndex = 6 
$lblDB.Text = "Database" 
[void]$objForm.Controls.Add($lblDB) 

    #Combo DB 
$cmbDB = New-Object 'System.Windows.Forms.ComboBox' 
$cmbDB.Location = New-Object System.Drawing.Point(151, 182) 
$cmbDB.Name = "cmbDB"; 
$cmbDB.Size = New-Object System.Drawing.Size(146, 21); 
$cmbDB.TabIndex = 7; 
$cmbDB.SuspendLayout() 
[void]$cmbDB.Items.Add('SQL2014-WS2012R2') 
[void]$cmbDB.Items.Add('SQL2014SP1-WS2012R2') 
$cmbDB.ResumeLayout($false) 
[void]$objForm.Controls.Add($cmbDB) 

# Submit Button 
$submitbutton = New-Object System.Windows.Forms.Button 
$submitbutton.Location = New-Object System.Drawing.Size(26, 249) 
$submitbutton.Size = New-Object System.Drawing.Size(75,23) 
$submitbutton.Text = "Submit" 
$submitbutton.UseVisualStyleBackColor = $false; 
$submitbutton.TabIndex = 8 
$submitbutton.Add_Click($Button_Click) 
[void]$objForm.Controls.Add($submitbutton) 


$objForm.Add_Shown({$objForm.Activate()}) 
#$objForm.ShowDialog() 
[System.Windows.Forms.Application]::Run($objForm) 

$Button_Click = 
{ 
    #Assign unique number 
    $randomNumber = Get-Random -minimum 1 -maximum 1000 
    #Value taken from UI 
    $ProjectName = $txtProjectName.Text.ToLower(); 
    $VMSize = $cmbVMSize.SelectedItem 
    $OfferName = $cmbDB.SelectedItem 
    #Internal Value 
    $Location = "westeurope" 
    $ResourceGroupName = $ProjectName + $randomNumber 
    $StorageName = $ProjectName + "storage" 
    $StorageSku = "Standard_LRS" 
    $InterfaceName = $ResourceGroupName + "ServerInterface" 
    $VNetName = $ResourceGroupName + "VNet" 
    $SubnetName = "Default" 
    $VNetAddressPrefix = "10.0.0.0/16" 
    $VNetSubnetAddressPrefix = "10.0.0.0/24" 
    $TCPIPAllocationMethod = "Dynamic" 
    $DomainName = $ProjectName 
    $VMName = $ResourceGroupName + "VM" 
    $ComputerName = $ResourceGroupName + "Server" 
    $OSDiskName = $VMName + "OSDisk" 
    $PublisherName = "MicrosoftSQLServer"  
    $Sku = "Standard" 
    $Version = "latest" 


    ## Main Logic to connect VM 
    # Step 1: Install Azure PowerShell 
    Try 
{ 
    $objForm.Close() 
    Login-AzureRmAccount 
    #Start-Sleep -s 10 
    New-AzureRmResourceGroup -Name $ResourceGroupName -Location $Location 
    Get-AzureRmStorageAccountNameAvailability $ResourceGroupName 
    $StorageAccount = New-AzureRmStorageAccount -ResourceGroupName $ResourceGroupName -Name $StorageName -SkuName $StorageSku -Kind "Storage" -Location $Location 

    if(-not $StorageAccount) 
    { 
    throw "Unable to find storage account '$StorageName'. Cannot continue." 
    } 
    # Enable verbose output and stop on error 
    # Create the VNET 
    Write-Verbose 'Creating Virtual Network' 
    $SubnetConfig = New-AzureRmVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $VNetSubnetAddressPrefix 
    $VirtualNetwork = New-AzureRmVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix -Subnet $SubnetConfig 
    # Create the NIC 
    Write-Verbose 'Creating Public IP' 
    $PublicIpAddress = New-AzureRmPublicIpAddress -Name $InterfaceName -ResourceGroupName $ResourceGroupName -Location $Location -AllocationMethod $TCPIPAllocationMethod -DomainNameLabel $DomainName 
    $InterfaceNic = New-AzureRmNetworkInterface -Name $InterfaceName -ResourceGroupName $ResourceGroupName -Location $Location -SubnetId $VirtualNetwork.Subnets[0].Id -PublicIpAddressId $PublicIpAddress.Id 
    # Credentials 
    Write-Verbose 'Entering Credentials' 
    $username = "indmukhe" 
    $password = ConvertTo-SecureString –String "[email protected]" –AsPlainText -Force 
    $Credential = new-object management.automation.pscredential $username,$password 
    #$Credential = Get-Credential 
    # Specify the VM name and size 
    Write-Verbose 'Creating VM Config' 
    $VirtualMachine = New-AzureRmVMConfig -VMName $VMName -VMSize $VMSize 
    $VirtualMachine = Set-AzureRmVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName $ComputerName -Credential $Credential -ProvisionVMAgent -EnableAutoUpdate #-TimeZone = $TimeZone 
    $VirtualMachine = Add-AzureRmVMNetworkInterface -VM $VirtualMachine -Id $InterfaceNic.Id 
    $OSDiskUri = $StorageAccount.PrimaryEndpoints.Blob.ToString() + "vhds/" + $OSDiskName + ".vhd" 
    $VirtualMachine = Set-AzureRmVMOSDisk -VM $VirtualMachine -Name $OSDiskName -VhdUri $OSDiskUri -Caching ReadOnly -CreateOption FromImage 
    $VirtualMachine = Set-AzureRmVMSourceImage -VM $VirtualMachine -PublisherName $PublisherName -Offer $OfferName -Skus $Sku -Version $Version 
    Write-Verbose 'Creating VM...' 
    $result = New-AzureRmVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VirtualMachine -Verbose 
    if($result.Status -eq 'Succeeded') { 
    $result 
    Write-Verbose ('VM named ''{0}'' is now ready, you can connect using username: {1} and password: {2}' -f $VMName, $username, $password) 
    } else { 
     Write-Error 'Virtual machine was not created successfully.' 
    } 


} 
Catch 
{ 
    $ErrorMessage = $_.Exception.Message 
    $FailedItem = $_.Exception.ItemName 

    write-Error $ErrorMessage 
    write-Error $FailedItem 

} 
Finally 
{  

    $objForm.Dispose() 
    exit 1 
} 

} 

答えて

0

this-

if($result.ProvisioningState -eq "Succeeded") 
{ 
    Write-Verbose ('VM named ''{0}'' is now ready, you can connect using username: {1} and password: {2}' -f $VMName, $username, $password) 
} 
else 
{ 
    Write-Error 'Virtual machine was not created successfully.' 
} 
をお試しください
関連する問題