Π‘ PowerShell ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈΡΠ΅ ΠΈ IT Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΈΡΠ΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Ρ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·Π½ΠΈ Π·Π°Π΄Π°ΡΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Π½Π΅ ΡΠ°ΠΌΠΎ Ρ on-premises, Π½ΠΎ ΠΈ Ρ ΠΎΠ±Π»Π°ΡΠ½ΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠΈ, ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ Ρ Azure. Π Π°Π±ΠΎΡΠ°ΡΠ° ΡΡΠ΅Π· PowerShell Π² ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°ΠΈ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΡΠ΄ΠΎΠ±Π½Π° ΠΈ Π±ΡΡΠ·Π° ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΡΡΠ΅Π· Azure ΠΏΠΎΡΡΠ°Π»Π°. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΡΠΎΡ-ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½ΠΎΡΡΡΠ° PowerShell ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ.
ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄Π°Π»ΠΈ ΡΠ°Π±ΠΎΡΠΈΡΠ΅ Ρ Ubuntu, Red Hat ΠΈΠ»ΠΈ Windows β PowerShell ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°ΡΠ΅ ΠΎΠ±Π»Π°ΡΠ½ΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΌΠΎΠ΄ΡΠ»Π° , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°Π΄Π°Π²Π°ΡΠ΅ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½ΠΈΡΠ΅ ΠΌΠ°ΡΠΈΠ½ΠΈ.
Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ PowerShell, Π·Π° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΠ Π² ΠΎΠ±Π»Π°ΠΊΠ° Azure, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π΄Π° ΠΈΠ·ΡΡΠΈΠ΅ΡΠ΅ ΠΠ ΠΈ ΡΠ²ΡΡΠ·Π°Π½ΠΈΡΠ΅ Ρ Π½Π΅Ρ ΠΎΠ±Π΅ΠΊΡΠΈ.

ΠΠ°ΠΆΠ½ΠΎ! ΠΠ΅ Π·Π°Π±ΡΠ°Π²ΡΠΉΡΠ΅ Π΄Π° Π΄Π΅Π·ΠΈΠ½ΡΠ΅ΠΊΡΠΈΡΠ°ΡΠ΅ ΡΡΡΠ΅ΡΠ΅ ΡΠΈ ΠΈ Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΠΈΡΠ΅ Π·Π° ΡΠ°Π±ΠΎΡΠ°:
- Π©Π΅ Π²ΠΈ Π΅ Π½ΡΠΆΠ΅Π½ ΠΌΠΎΠ΄ΡΠ» Azure PowerShell Module β ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΈΠ·ΡΠ΅Π³Π»ΠΈΡΠ΅ ΠΎΡ PowerShell Gallery Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°
Install-Module Az. - Π’ΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°ΡΠ΅ Π² ΠΎΠ±Π»Π°ΠΊΠ° Azure, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ°Π±ΠΎΡΠΈ Π²ΠΈΡΡΡΠ°Π»Π½Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π°, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΉΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°
Connect-AzAccount.
ΠΡΡΠ²ΠΎ ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠΎΠΌΠ΅Π½Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° Azure VM. Π©Π΅ ΠΎΡΠ²ΠΎΡΠΈΠΌ VS Code ΠΈ ΡΠ΅ Π·Π°ΠΏΠ°Π·ΠΈΠΌ Π½ΠΎΠ²ΠΈΡ PowerShell ΡΠΊΡΠΈΠΏΡ Ρ ΠΈΠΌΠ΅ΡΠΎ Resize-AzVirtualMachine.ps1 β Π² Π½Π΅Π³ΠΎ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈ ΠΎΡ ΠΊΠΎΠ΄Π°.
ΠΠ°ΠΏΠΈΡΠ²Π°ΠΌΠ΅ Π½Π°Π»ΠΈΡΠ½ΠΈΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠΈ Π½Π° ΠΠ
ΠΡΠ΅Π΄ΠΈ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΠ, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΈ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΈ Π·Π° Π²ΠΈΡΡΡΠ°Π»Π½ΠΈΡΠ΅ ΠΌΠ°ΡΠΈΠ½ΠΈ ΡΠ° Π½Π°Π»ΠΈΡΠ½ΠΈ Π² ΠΎΠ±Π»Π°ΠΊΠ° 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" - Π ΡΠ΅Π³Π° ΠΏΡΠΎΡΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΠ β
Update-AzVm:Update-AzVM -VM devvm01 -ResourceGroupName dev - Π£Π±Π΅ΠΆΠ΄Π°Π²Π°ΠΌΠ΅ ΡΠ΅, ΡΠ΅ Π²ΡΠΈΡΠΊΠΎ Π΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π»ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ β Π·Π° ΡΠ΅Π»ΡΠ° ΠΎΡΠ½ΠΎΠ²ΠΎ Π·Π°ΠΏΠΈΡΠ²Π°ΠΌΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π½Π°ΡΠΈΡ ΠΎΠ±Π΅ΠΊΡ ΠΈ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΡΠΎ
$virtualMachine.HardwareProfile:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01 $virtualMachine.HardwareProfile
ΠΠΊΠΎ ΡΠ°ΠΌ Π²ΠΈΠ΄ΠΈΠΌ Standard_B1ls β Π·Π½Π°ΡΠΈ Π²ΡΠΈΡΠΊΠΎ Π΅ Π½Π°ΡΠ΅Π΄, ΡΠ°Π·ΠΌΠ΅ΡΡΡ Π½Π° ΠΌΠ°ΡΠΈΠ½Π°ΡΠ° Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΠΌ Π½Π°ΠΏΡΠ΅Π΄ ΠΈ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΠΌ ΡΡΠΏΠ΅Ρ , ΠΊΠ°ΡΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΠ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΌΠ°ΡΠΈΠ².
Π ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ Π·Π° ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΠ Π² Azure?
Π‘ ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ΡΠΎ Π½Π΅ Π΅ Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΡΠΎΡΡΠΎ ΠΈ ΠΏΡΡΠΊΠΎ, ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°. ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ΡΠΎΠ²Π°, ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΡΡΠΈΠ΅ΠΌ ΠΈ ΡΠ΅Π΄ΠΈΡΠ° ΡΠ΅ΡΡΡΡΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΠ°Π·ΠΈ ΠΌΠ°ΡΠΈΠ½Π°, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ:
- ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Π·Π° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° Π½Π° Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ (Boot diagnostics storage containers)
- ΠΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ
- ΠΡΠ±Π»ΠΈΡΠ½ΠΈ IP Π°Π΄ΡΠ΅ΡΠΈ
- Π‘ΠΈΡΡΠ΅ΠΌΠ΅Π½ Π΄ΠΈΡΠΊ ΠΈ blob, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π° ΡΡΠ°ΡΡΡΡΡ ΠΌΡ
- ΠΠΈΡΠΊΠΎΠ²Π΅ Ρ Π΄Π°Π½Π½ΠΈ (data disks)
ΠΠ°ΡΠΎΠ²Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ ΡΠ΅ Ρ Π½Π°ΡΠ΅ΡΠ΅ΠΌ Remove-AzrVirtualMachine β ΠΈ ΡΡ ΡΠ΅ ΠΈΠ·ΡΡΠΈΠ²Π° Π½Π΅ ΡΠ°ΠΌΠΎ Azure VM, Π½ΠΎ ΠΈ Π²ΡΠΈΡΠΊΠΎ ΠΈΠ·Π±ΡΠΎΠ΅Π½ΠΎ ΠΏΠΎ-Π³ΠΎΡΠ΅.
Π‘Π»Π΅Π΄Π²Π°ΠΌΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡ ΠΏΡΡ ΠΈ ΠΏΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π½Π°ΡΠΈΡ ΠΎΠ±Π΅ΠΊΡ (ΠΠ) Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Get-AzVm. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π° ΠΏΡΠΈΠ΅ΠΌΠ΅ΠΌ, ΡΠ΅ ΡΠΎΠ²Π° ΡΠ΅ Π΅ ΠΌΠ°ΡΠΈΠ½Π°ΡΠ° WINSRV19 ΠΎΡ ΡΠ΅ΡΡΡΡΠ½Π°ΡΠ° Π³ΡΡΠΏΠ° MyTestVMs.
Π©Π΅ Π·Π°ΠΏΠ°Π·ΠΈΠΌ ΡΠΎΠ·ΠΈ ΠΎΠ±Π΅ΠΊΡ Π·Π°Π΅Π΄Π½ΠΎ Ρ Π²ΡΠΈΡΠΊΠΈ Π½Π΅Π³ΠΎΠ²ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π² ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° $vm:
$vm = Get-AzVm -Name WINSRV19 -ResourceGroupName MyTestVMsΠΠ·ΡΡΠΈΠ²Π°ΠΌΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° Π½Π° Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ
ΠΡΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΠ Π² Azure Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΡΡΠΎ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° Π½Π° Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ (boot diagnostics container), Π·Π° Π΄Π° ΠΈΠΌΠ° ΠΊΡΠΌ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΡΠ΅ ΠΎΠ±ΡΡΠ½Π΅ ΠΏΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΠΏΡΠΈ ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΠ, ΡΠΎΠ·ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΎΡΡΠ°Π²Π° Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π° ΡΠ²ΠΎΠ΅ΡΠΎ ΡΠ΅Π³Π° Π±Π΅Π·ΡΠ΅Π»ΡΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Π½Π΅. ΠΠ΅ΠΊΠ° ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°ΠΌΠ΅ ΡΠ°Π·ΠΈ ΡΠΈΡΡΠ°ΡΠΈΡ.
- ΠΡΡΠ²ΠΎ ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ Π½Π° ΠΊΠΎΠΉ ΡΡΠΎΡΠ°Π΄ΠΆ-Π°ΠΊΠ°ΡΠ½Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ ΡΠΎΠ·ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ β Π·Π° ΡΠ΅Π»ΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΡΠΊΡΠΈΠ΅ΠΌ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΡΠΎ
storageUriΠ² Π½Π΅Π΄ΡΠ°ΡΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡΠ°DiagnosticsProfileΠ½Π° Π½Π°ΡΠ°ΡΠ° ΠΠ. ΠΠ° ΡΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ ΡΠ΅Π³ΡΠ»ΡΡΠ½o ΠΈΠ·ΡΠ°Π·Π΅Π½ΠΈΠ΅:$diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?:\/\/(.+?)\.').groups[1].value - Π‘Π΅Π³Π° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, Π° Π·Π° ΡΠ΅Π»ΡΠ° Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ VM ID Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°
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 Π·Π° ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ ΠΎΠ±Π΅ΠΊΡ. Π’Π°ΠΊΠ° ΡΠ΅, Π½Π΅ΠΊΠ° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Remove-AzVm:
$null = $vm | Remove-AzVM -ForceΠΠ·ΡΡΠΈΠ²Π°ΠΌΠ΅ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΈΡ IP Π°Π΄ΡΠ΅Ρ
ΠΠ°ΡΠ°ΡΠ° ΠΠ ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ (ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅) ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ (NICs) β Π·Π° Π΄Π° Π³ΠΈ ΠΈΠ·ΡΡΠΈΠ΅ΠΌ, ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ ΠΏΡΠ΅Π· ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΡΠΎ NetworkInterfaces Π½Π° Π½Π°ΡΠΈΡ ΠΎΠ±Π΅ΠΊΡ ΠΠ ΠΈ ΡΠ΅ ΠΈΠ·ΡΡΠΈΠ΅ΠΌ 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
}
}
}
ΠΠ·ΡΡΠΈΠ²Π°ΠΌΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡ Π΄ΠΈΡΠΊ
ΠΠΈΡΠΊΡΡ Π½Π° ΠΠ‘ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° blob, Π·Π° Π΄Π° Π³ΠΎ ΠΈΠ·ΡΡΠΈΠ΅ΠΌ, ΠΈΠΌΠ°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° 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Π Π½Π°ΠΊΡΠ°Ρ, ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°ΠΌΠ΅ Π΄ΠΈΡΠΊΠΎΠ²Π΅ΡΠ΅ Ρ Π΄Π°Π½Π½ΠΈ
ΠΠ°ΡΠ°ΡΠ° ΠΠ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΠΈΠΌΠ°Π»Π° Π΄ΠΈΡΠΊΠΎΠ²Π΅ Ρ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π±ΠΈΠ»ΠΈ ΠΏΡΠΈΠΊΠ°ΡΠ΅Π½ΠΈ ΠΊΡΠΌ Π½Π΅Ρ. ΠΠΊΠΎ Π½Π΅ ΡΠ° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ, ΡΠ΅ Π³ΠΈ ΠΈΠ·ΡΡΠΈΠ΅ΠΌ ΠΈ ΡΡΡ
. ΠΡΡΠ²ΠΎ, ΡΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ StorageProfile Π½Π° Π½Π°ΡΠ°ΡΠ° ΠΠ ΠΈ ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠΈΠΌ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΡΠΎ Uri. ΠΠΊΠΎ ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΄ΠΈΡΠΊΠ°, ΡΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΠΈΠΊΡΠ» ΠΏΠΎ URI. ΠΠ° Π²ΡΠ΅ΠΊΠΈ URI ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠΈΠΌ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π°ΡΠΈΡ storage Π°ΠΊΠ°ΡΠ½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Get-AzStorageAccount. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ storage URI, Π·Π° Π΄Π° ΠΈΠ·Π²Π»Π΅ΡΠ΅ΠΌ Π½ΡΠΆΠ΄Π½ΠΎΡΠΎ ΠΈΠΌΠ΅ Π½Π° blob ΠΈ Π΄Π° Π³ΠΎ ΠΏΡΠ΅Π΄Π°Π΄Π΅ΠΌ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Remove-AzStorageBlob Π·Π°Π΅Π΄Π½ΠΎ ΡΡΡ storage Π°ΠΊΠ°ΡΠ½ΡΠ°. ΠΡΠΎ ΠΊΠ°ΠΊ ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π² ΠΊΠΎΠ΄Π°:
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.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
