ืืืืฆืขืืช PowerShell, ืืื ืืกืื ืืื ืืื IT ืืฆืืืืื ืืืคืื ืืฉืืืืช ืฉืื ืืช ืืืืืืืืืืช ืืืฉืจ ืขืืืืื ืื ืจืง ืขื ืืงืืืืื, ืืื ืื ืขื ืชืฉืชืืืช ืขื ื, ืืคืจื ืขื Azure. ืืืงืจืื ืืกืืืืื, ืืขืืืื ืืจื PowerShell ืืื ืืจืื ืืืชืจ ื ืืื ืืืืืจื ืืืฉืจ ืขืืืื ืืจื ืคืืจืื Azure. ืืืืืช ืืืืคื ืืคืืืคืืจืื ืฉืื, PowerShell ืืืื ืืฉืืฉ ืืื ืืขืจืืช ืืคืขืื.
ืืื ืื ืืชื ืืคืขืื ืืืืื ืื, Red Hat ืื Windows, PowerShell ืืืืื ืืขืืืจ ืื ืืฉืืื ืืืฉืืื ืืขื ื ืฉืื. ืฉืืืืฉ ืืืืืื
ืืืืืจ ืื, ื ืืื ืืืฆื ื ืืชื ืืืฉืชืืฉ ื-PowerShell ืืื ืืฉื ืืช ืืช ืืืื ื-VM ืืขื ื ื-Azure, ืืื ืื ืืืืืง VM ืืืืืืืืงืืื ืืืฉืืืืื ืื.
ืืฉืื! ืื ืชืฉืืื ืื ืื ืืช ืืืืืื ืขื ืืืืจ ืืืืื ืืื ืืืชืืื ื ืืขืืืื:
- ืชืฆืืจื ืืืืื ืืืืื Azure PowerShell - ื ืืชื ืืืืจืื ืืืชื ืืืืจืืืช PowerShell ืขื ืืคืงืืื
Install-Module Az
. - ืขืืื ืืืฆืข ืืืืืช ืืขื ื ื-Azure ืฉืื ืคืืขื ืืืืื ื ืืืืจืืืืืืช ืขื ืืื ืืคืขืืช ืืคืงืืื
Connect-AzAccount
.
ืจืืฉืืช, ืืืื ื ืืฆืืจ ืกืงืจืืคื ืฉืืฉื ื ืืช ืืืืื ืฉื Azure VM. ืืืื ื ืคืชื VS Code ืื ืฉืืืจ ืกืงืจืืคื PowerShell ืืืฉ ืืฉื Resize-AzVirtualMachine.ps1 - ื ืืกืืฃ ืื ืคืืกืืช ืงืื ืืื ืฉืืืืืื ืชืชืงืื.
ืื ื ืืืงืฉืื ืืช ืืืื ื-VM ืืืืื ืื
ืืคื ื ืฉืชืฉื ื ืืช ืืืื ื-VM, ืขืืื ืืืจืจ ืืื ืืืืืื ืืืงืืืืื ืขืืืจ ืืืื ืืช ืืืจืืืืืืืช ืืขื ื Azure. ืืฉื ืื ืขืืื ืืืคืขืื ืืช ืืคืงืืื 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 - ืื ืืืืจ ืฉืืื ืชืงืื, ืืืื ืืืืื ืืช ืืฉืชื ื. ืืชื ืืืื ืืืืช ืจืืืง ืืืชืจ ืืืืชืืกืก ืขื ืืืฆืืื ืฉืื ืขื ืืื ืฉืื ืื ืืืื ืฉื ืืกืคืจ VM ืื-ืืื ืืช ืืืืฆืขืืช ืืขืจื.
ืื ืืืื ืืืืงืช 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 ืฉืื ื ืขืืืื ืืฉ ืืืฉืง ืจืฉืช ืืื (ืื ืืคืืื ืืื) - ืืื ืืืกืืจ ืืืชื ืืืืืชืจืื, ืืืื ื ืขืืืจ ืขื ืื ืืก NetworkInterfaces
ืืืืืืงื ื-VM ืฉืื ื ืืืืง ืืช ื-NIC ืขื ืืคืงืืื Remove-AzNetworkInterface
. ืืืงืจื ืฉืืฉ ืืืชืจ ืืืืฉืง ืจืฉืช ืืื, ืื ื ืืฉืชืืฉืื ืืืืืื. ืืืงืืื, ืขืืืจ ืื NIC ื ืืืืง ืืช ืื ืืก IpConfiguration
ืืื ืืงืืืข ืื ืืืืฉืง ืืฉ ืืชืืืช IP ืฆืืืืจืืช. ืื ื ืืฆื ืืื, ื ืกืืจ ืืืชื ืขื ืืคืงืืื Remove-AzPublicIpAddress
.
ืื ื ืืืืื ืืงืื ืืื ืืืืืง, ืฉืื ืื ืื ื ืืกืชืืืื ืขื ืื ื-NICs ืืืืืื, ืืืืงืื ืืืชื ืืืืืงืื ืื ืืฉ IP ืฆืืืืจื. ืื ืืฉ, ืื ื ืชื ืืช ืืืืคืืื PublicIpAddress
, ืืฆื ืืช ืฉื ืืืฉืื ืืืชืืื ืืคื ืืืื ืืืืง ืืืชื:
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
}
}
}
ืืกืจืช ืืืกืง ืืืขืจืืช
ืืืกืง ืืขืจืืช ืืืคืขืื ืืื ืืชื, ืฉืขืืืจื ืืฉ ืคืงืืื ืืืืืง ืืืชื 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]
ืืกืจืช ื-Bob Status Disk System
ืืฉื ืื, ืืคื ืฉืืื ืืืจ ื ืืืฉืชื, ืื ืื ื ืืืงืืื ืืช ืืืื ืืืืกืื ืฉืื ืืืืืกื ืืืืกืง ืืื, ืืืจืืืื ืฉืืืืื ืฉืืงืฆื ืืืื 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]
}
}
ืืขืืฉืื "ืืืขื ื ืืกืืฃ ืืืื!" ืขืืฉืื ืื ืื ื ืฆืจืืืื ืืืจืืื ืฉืื ืืื ืืื ืืฉืืจืื ืืืื. ืืกืืคืจ ืืืืื ืืื ืืจืืจื ืคืืฉ ืืช ืืืฉืชืืฉืื ืืืืฆืข ืืืจื ืืขืฉื ืืืช ืืขืฆืื. ืื ื ืงืืฉืืจ ืืชืกืจืื ืืกืืคื ืฉื ืงืจื Remove-AzrVirtualMachine.ps1:
โ
ืื ื ืืงืืื ืฉืชืืฆื ืืช ืืขืฆืืช ืืืขืฉืืืช ืืืื ืืืขืืืืช ืืืกืื ืื ืืืืฅ, ืืื ืืืกืฃ ืืขืืืื ืขื Azure VMs.
ืืงืืจ: www.habr.com