αααααααΎ PowerShell αα·ααααα αα·αα’αααααααααααα IT ααααΎααααααααααααα·ααααααΆαααΆαααααααααααααααααα αααααααΎααΆααα·αααααΉααααααα»αααα·αααααα»ααααααα ααα»αααααααααΆααααΆαα½αα αααααΆαα ααΆααααααααααα ααΆαα·αααααΆαα½α Azure αααααα αααα»αααααΈααααααΆαααααΎααΆαααΆαααα PowerShell ααΊααΆαααΆαααΆααααα½α αα·αααΏαααΆαααΆαααααΎααΆαααΆαααααα·ααααα Azure α ααΌαα’ααα»αα αααααααααααααααααα·ααΆααααααΆ PowerShell α’αΆα ααααΌαααΆαααααΎαα ααΎααααααααααααα·ααααα·ααΆαααΆαα½αα
αα·αααΆα’ααααααα»αααααΎαααΆα Ubuntu, Red Hat α¬ Windows αα PowerShell α’αΆα
αα½αα’ααααααα»αααΆααααααααααααααΆααααααααα’αααα αααααααΎαααΌαα»α
αα αααα»αα’αααααααα ααΎαααΉααα·αα·αααααΎαααΈαααααααα’αααα’αΆα ααααΎ PowerShell ααΎααααΈααααΌαααα α VM αα αααα»α Azure cloud ααααΌα ααΆαα»α VM αα·αααααα»αααααΆαααααααααααααΆα
ααααΆαα! αα»αααααα
ααΆαααααΉαααΉαα’αΆαα»α ααΎααααΈαααα
αααΆαααΆαα
- α’αααααΉαααααΌαααΆααααΌαα»α αααΌαα»α Azure PowerShell - ααΆα’αΆα
ααααΌαααΆαααΆαααααΈ PowerShell Gallery αααααααΎααΆααααααααΆ
Install-Module Az
. - α’αααααααΌααααααααααΆαααα
αααα»αααα Azure ααααααΆαααΈααα·αααα·ααααα»αααααΎαααΆααααααααΎαααΆαααΆααααααααΆ
Connect-AzAccount
.
ααααΌα ααΎααααααΎαααααααΈααααααΉαααααΆααααααΌαααα α Azure VM α αααααΎα VS Code α αΎααααααΆαα»αααααααΈα PowerShell ααααΈαα½αα α ααΆ ααααΌαααα α-AzVirtualMachine.ps1 β ααΎαβααΉαβααααααβαααααβααβααΌαβαα βααΆβαα βαααβαααβα§ααΆα αααβααααΎαααΆαα
ααΎαααααΎαα»αααα α VM αααααΆα
αα»ααααα’αααααααΆααααααΌαααα α VM α’αααααααΌαααααααααααΆααΎααα αααΆαααα’αΆα
ααα½αααααΆααααααΆαααααΆαααΈααα·αααα·ααα
αααα»α Azure cloudα ααΎααααΈααααΎααΌα
αααα’αααααααΌαααααΎαααΆαααΆααααααααΆ Get-AzVMSize
.
ααΌα αααααααααΆαααααΆαααΈααα·αααα·α devvm01 ααΈαααα»αααααΆα dev ααΎαααααΎαα»αααα ααααα’αΆα ααα½αααααΆαααΆααα’ααα
Get-AzVMSize -ResourceGroupName dev -VMName devvm01
(ααΆααΆααα·αααΆαα, αα αααα»ααααα αΆαα·α, αααα½αα±αα ResourceGroupName=dev ΠΈ VMName= devvm01 α’αααααΉααααααΆαααααααααααΆαααααα½αααααα’ααααααααΆαααααΆαααΆααααααααΆαααααα )
ααΆααααααααΆααΉααααα‘ααα’αααΈαα½αααΌα αααα
ααΆαααααααΊααΆαααααΎαααα ααααα’αΆα
ααααΎααΆαααΆααα’αααααα’αΆα
ααααΌαααΆαααααααααααΆαααααΆαααΈααα·αααα·ααααααΆααααααα±ααα
αααααααΌαααα αα‘αΆα
α§ααΆα ααα ααΎαααΉαααααΌαααα ααα ααα αααααΈα Standard_B1ls - ααΆαααααα·ααα ααααΆααααΈαα½ααααα»ααααααΈααΆαααΎα (ααΆααΆααα·αααΆαα αα αααα»ααααααα·ααΈααΈαα·ααα·α α’αααααααΎαααΎαααα αααΆαα½ααααα’αααααααΌαααΆαα )
- ααααΌααααααααΎααΆααααααααΆ
Get-AzVM
ααΎαααα½αααΆαααααααΆαα’αααΈααααα»ααααααΎα (αααΆαααΈααα·αααα·α) ααααααααΆαα»αααΆαα αααα»αα’ααααα½αα$virtualMachine
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
- αααααΆααααααΎααααααααααααααααα·ααΈααααα»αααα
.HardwareProfile.VmSize
α αΎαααααααααααααααΈαααα ααααΆαα$virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
- α αΎαα₯α‘αΌααααααΎαααααΆααααααααα·ααααα·ααΆααααααααΆααααΎαα
αα
α»ααααααααΆα VM -
Update-AzVm
:Update-AzVM -VM devvm01 -ResourceGroupName dev
- ααΎαααααΎα±ααααααΆααααΆα’αααΈαααααΎαααΆαααΆαααα’ - ααΎααααΈααααΎααΌα
αααα ααΎαααααΎαα»αααααααΆαα’αααΈααααα»ααααααΎαααααααα α αΎααα·αα·αααααΎαα’α
αααααααα
$virtualMachine.HardwareProfile
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01 $virtualMachine.HardwareProfile
ααααα·αααΎααΎαααΎααα ααΈααα Standard_B1ls - αααααΆααααααΆα’αααΈααααααααΆαααΊαααα·ααα αααα»αααααΆααααα αααααααααααααααΌαααΆαααααΆααααααΌαα α’αααα’αΆα αααααα αα»αααα αα·αααααααΆαααααααααααα’ααααααααααΆααααααΌαααα α VMs ααΆα αααΎααααα»αααααααα½ααααααααΎα’αΆαααα½αα
α α»αααΆααα»α VM αα αααα»α Azure αα·α?
ααΆαα½αααΉαααΆααα»α αα·ααααα’αααΈαααΆααα’ααααΊααΆαααα αα·ααααααααΌα αααααΆα αΆααααΌα ααΆαααααα αααααΆααααΈααΆαααΆααα’αα ααΆα αΆαααΆα ααααα»αααΆαααα ααααΌαααααΆααα½αα ααα½ααααααΆααααααΉααααΆαααΈαααα αα½αααΆααα
- α αΆααααααΎαα§ααααααααα»αααΆααα·αα·α αααα
- α ααα»α αααααΆαααααααΆαα
- α’αΆααααααΆα IP ααΆααΆααα
- ααΆααααααααα αα·ααααα»ααααααααΆαααΆαααααααΆααααΌαααΆααααααΆαα»α
- ααΆααα·αααααα
ααΌα
ααααααΎαααΉααααααΎααα»αααΆααα½αα αΎαα α
ααΆα Remove-AzrVirtualMachine
- α αΎαααΆααΉααα»ααα·αααααΉααα Azure VM ααα»αααααααααα»αααααααααΆααααΆααα’ααααΆαααΎαααααα
ααΎααα
αα·ααΈαααααααΆα α αΎαααααΌαααα½αααΆαααααα»ααααααΎα (VM) αααααααΎααΆααααααααΆ Get-AzVm
. ααΆα§ααΆα αααααΌαα±ααααΆααΆα‘αΆα WINSRV19 ααΈαααα»αααααΆα MyTestVMs.
α
αΌαβαααααΆβαα»αβααααα»βαααβαα½αβααΆβαα½αβααΉαβααααααβαααααααα·βααααβααΆβααΆααα’ααβαα
βααΆβα’ααα $vm
:
$vm = Get-AzVm -Name WINSRV19 -ResourceGroupName MyTestVMs
ααΆααααα»αααΊαααα ααααΆαα½αααΉαα―αααΆααα·αα·α ααααα αΆααααααΎα
αα ααααααααΎα VM αα αααα»α Azure α’αααααααΎααααΆααααααααΌαααΆαααααΎα±αααααααΎααα»αααΊααααααααΆαααααααΆαα»αααΆααα·αα·α ααααααΆαα αΆααααααΎα (α§ααααααααα»αααΆααα·αα·α ααααα αΆααααααΎα) ααΌα ααααααααα·αααΎααΆααααα αΆααΆαα½αααΉαααΆαα αΆααααααΎα ααΆαα’αααΈαααααααΌαααΎααααααΆααααΆααααααααΆααααα αΆα ααααααΆαααΆααααα αα αααααα VM ααααΌαααΆααα»α αα»αααΊααααααααααΌαααΆααα»αααΎααααΈααααα’αααα·ααΆααααααααΆααααααααα₯α‘αΌααααα α αΌαααΎααα½ααα»αααααΆαααΆααααα
- ααΆααααΌα α
αΌαααΎαααααααααααΆααΎααααΈαααα»ααα½αααΆααΆαααααα·αααα·αααααα»αααΊααα - αααααΆαααααα αΆαααααΎαααααΌαααααααααααααααααααααα·
storageUri
αα αααα»αααααααααααααααα»DiagnosticsProfile
VM ααααααΎαα αααααΆααααΏαααα αααα»αααααΎααααααααααααΆαααα$diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
- α₯α‘αΌαα’αααααααΌααααααααααααααα»αααΊααα α αΎααααααΆααααΆα’αααααααΌαααααααααααΆαα VM αααααααΎααΆααααααααΆ
Get-AzResource
:if ($vm.Name.Length -gt 9) { $i = 9 } else { $i = $vm.Name.Length - 1 } $azResourceParams = @{ 'ResourceName' = WINSRV 'ResourceType' = 'Microsoft.Compute/virtualMachines' 'ResourceGroupName' = MyTestVMs } $vmResource = Get-AzResource @azResourceParams $vmId = $vmResource.Properties.VmId $diagContainerName = ('bootdiagnostics-{0}-{1}' -f $vm.Name.ToLower().Substring(0, $i), $vmId)
- αααααΆαααα ααΎαααα½αααΆαααααααααα»αααααΆαααααα»αααΊαααααΆαααααα·αααα·α
$diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
- α αΎαα₯α‘αΌααααααΎαααΆαα’αααΈααααααααΆααααααΎαααααΌααα»ααα»αααΊααααααααααΎααΆααααααααΆ
Remove-AzStorageContainer
:$saParams = @{ 'ResourceGroupName' = $diagSaRg 'Name' = $diagSa } Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force
ααΆααα VM
α₯α‘αΌαβααΎαβαα»αβαααΆαααΈαβαα·αααα·αβαααβαααα½αβα―α αααααβααΎαβααΆαβαααααΎαβα’αααβαα½α
βα αΎαα $vm
αααααΆααααααα»αααααααΌαααααΆα α’ααα
αΉααααααααΎαααΆαααΆααααααααΆ Remove-AzVm
:
$null = $vm | Remove-AzVM -Force
ααΆαααα ααα»α αααααΆαααααααΆα αα·αα’αΆααααααΆα IP ααΆααΆαααα αα
VM ααααααΎααα
ααααΆαα
ααα»α
αααααΆαααααααΆααα½α (α¬ααΌααααΈααα
αααΎα) (NICs) - ααΎααααΈαα»ααα½αααΆα
ααααααα·αα
αΆαααΆα
α ααΌαα
αΌααα
ααΎααααααααααααααα· NetworkInterfaces
ααααα» VM ααααααΎαα αΎααα»α NIC αααααααΎααΆααααααααΆ Remove-AzNetworkInterface
. αααα»αααααΈααΆαα
ααα»α
αααααΆαααααααΆαα
αααΎαααΆααα½α ααΎαααααΎααααα·ααα»αα αααααΉαααΉαααααααααΆαα NIC ααΈαα½ααααΎαααΉααα·αα·αααααΎααααααααααααααα· IpConfiguration
ααΎααααΈαααααααΆααΎα
ααα»α
αααααΆααααΆαα’αΆααααααΆα IP ααΆααΆαααα ααααα·αααΎααααααΎα ααΎαααΉααα»αααΆα
αααααααααΎααΆααααααααΆ Remove-AzPublicIpAddress
.
αααααΊααΆα§ααΆα αααααααΌααααααα αααααΎααα·αα·αααααΎα NICs ααΆααα’αααα
αααα»αααααα·ααα»α αα»ααα½αααΆ α αΎααα·αα·αααααΎαααΆααΎααΆα IP ααΆααΆααααααα¬ααα ααααα·αααΎααΆα, αααααΆααααααααααααααααααααα· PublicIpAddress
ααααααααααααααααΆααααααααΌαααααΆααα ID α αΎααα»αααΆα
ααα
foreach($nicUri in $vm.NetworkProfile.NetworkInterfaces.Id) {
$nic = Get-AzNetworkInterface -ResourceGroupName $vm.ResourceGroupName -Name $nicUri.Split('/')[-1]
Remove-AzNetworkInterface -Name $nic.Name -ResourceGroupName $vm.ResourceGroupName -Force
foreach($ipConfig in $nic.IpConfigurations) {
if($ipConfig.PublicIpAddress -ne $null) {
Remove-AzPublicIpAddress -ResourceGroupName $vm.ResourceGroupName -Name $ipConfig.PublicIpAddress.Id.Split('/')[-1] -Force
}
}
}
ααΆαααααΆαααααααααα αα
ααΆα OS ααΊααΆαααα»ααααααΆαααΆααααααααΆααΎααααΈαα»αααΆα Remove-AzStorageBlob
- ααα»αααααα»ααααααααα·ααααα·ααΆ α’αααααΉαααααΌααααααααααααααααααΌαααΆααααααΆαααααΆαααΆααααααααααααΆα ααΎααααΈααααΎααΌα
αααααΆαα·αααα’αααααααΌαααααααααα»ααααα»ααααααΆαααΆαααααααααα αΎααααααΆαααααααααΌαααΆαα
ααΆααααααααΆααααα½αααΆαα½αααααΈαααα»ααααααααΌαααααΆα
$osDiskUri = $vm.StorageProfile.OSDisk.Vhd.Uri
$osDiskContainerName = $osDiskUri.Split('/')[-2]
$osDiskStorageAcct = Get-AzStorageAccount | where { $_.StorageAccountName -eq $osDiskUri.Split('/')[2].Split('.')[0] }
$osDiskStorageAcct | Remove-AzStorageBlob -Container $osDiskContainerName -Blob $osDiskUri.Split('/')[-1]
ααΆααα»α Blob ααααΆαααΆαααΆααααααααα
ααΎααααΈααααΎααΌα
αααα ααΌα
αααα’ααααααα ααααΆααΆαααΆααα½α
α αΎα ααΎααααα»ααααα»ααααααΆααααααααΌαααΆααααααΆαα»α α αΎαααΆααααααΆ blob αα
α
α»ααααα
ααααΆα status
ααααααΆαααααΆαααΆαααααααααααααΌαααααΆαα
ααΆααααααααΆαα»α Remove-AzStorageBlob
:
$osDiskStorageAcct | Get-AzStorageBlob -Container $osDiskContainerName -Blob "$($vm.Name)*.status" | Remove-AzStorageBlob
α αΎαα α»ααααααααΎααααα·ααααααααΈαα αα
VM ααααααΎαα’αΆα
αα
ααααΆαααΆααααααΆααα·αααααααααααααΌαααΆαααααΆαααα
ααΆα ααααα·αααΎαααα·αααααΌαααΆααα ααΎαααΉααα»αααΆα
αααααααα α
αΌαααΎααααααΆααΆαα»ααα·α StorageProfile
VM ααααααΎααα·αααααααααααααααααααααα· Uri
. ααααα·αααΎααΆαααΆαααΆα
αααΎαααΎααααα
ααααααα½αααααα
ααΆα URI
. αααααΆαα URI ααΈαα½αα ααΎαααΉαααααΎαααααΈαααα»ααααααααΌαααααΆαααααααΎ Get-AzStorageAccount
. αααααΆααααααα URI αααα»αααΎααααΈαααααααααααααα»ααααα
ααααΆα α αΎααααααΌαααΆαα
ααΆααααααααΆαα»α Remove-AzStorageBlob
αα½αααΆαα½αααααΈαααα»αα αααααΆα’αααΈαααααΆααΉαααΎααα
ααΌα
αα
αααα»αααΌαα
if ($vm.DataDiskNames.Count -gt 0) {
foreach ($uri in $vm.StorageProfile.DataDisks.Vhd.Uri) {
$dataDiskStorageAcct = Get-AzStorageAccount -Name $uri.Split('/')[2].Split('.')[0]
$dataDiskStorageAcct | Remove-AzStorageBlob -Container $uri.Split('/')[-2] -Blob $uri.Split('/')[-1]
}
}
α αΎαα₯α‘αΌαααα "ααΎαααΆαααΆααααααΈαααα ααααααΈαααΆα!" α₯α‘αΌααααααΎαααααΌααααααΌααααα»ααααα½αααΆααααΌαααΈαααααααΆααα’αααααα α’ααααα·ααααααααααα»αα Adam Bertram ααΆααα½αα’αααααααΎααααΆααααΆαααααααΆαααααΌα α αΎαααααΎααΆααααααα½αα―αα αααααΊααΆαααααααΆαααα ααΆααααααααΈαα α»ααααααααα α ααΆ αα»α-AzrVirtualMachine.ps1:
β
αααα»ααααααΉαααΆα’αααααααΎααααααΉαααΆαααααααααΆαααααααΆααααααααααααα»αααΆααααααααΆααα·αααααααΉαααααα αααααααΆ αα·αααααΆααααααα’ααααα
αααααααΎααΆαααΆαα½α Azure VMs α
ααααα: www.habr.com