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