Π‘ ΠΏΠΎΠΌΠΎΡΡΡ PowerShell ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΡ ΠΈ IT-Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Ρ on-premises, Π½ΠΎ ΠΈ Ρ ΠΎΠ±Π»Π°ΡΠ½ΡΠΌΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°ΠΌΠΈ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Ρ Azure. Π Π°Π±ΠΎΡΠ°ΡΡ ΡΠ΅ΡΠ΅Π· PowerShell Π² ΡΡΠ΄Π΅ ΡΠ»ΡΡΠ°Π΅Π² Π³ΠΎΡΠ°Π·Π΄ΠΎ ΡΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ ΡΠ΅ΡΠ΅Π· Azure portal. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΊΡΠΎΡΡ-ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΡΡΠΈ 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
Π½Π°ΡΠ΅ΠΉ ΠΠ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²ΠΎΡ ΡΠ°ΠΊΠΎΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅:$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
Π½Π°ΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° 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
}
}
}
Π£Π΄Π°Π»ΡΠ΅ΠΌ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π΄ΠΈΡΠΊ
ΠΠΈΡΠΊ ΠΠ‘ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ 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 Π½Π°ΠΉΠ΄Π΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΡΠΎΡΠ°Π΄ΠΆ-Π°ΠΊΠΊΠ°ΡΠ½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Get-AzStorageAccount
. ΠΠ°ΡΠ΅ΠΌ ΡΠ°ΡΠΏΠ°ΡΡΠΈΠΌ storage URI, ΡΡΠΎΠ±Ρ Π²ΡΡΠ°ΡΠΈΡΡ Π½ΡΠΆΠ½ΠΎΠ΅ ΠΈΠΌΡ blob-a ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ 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.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com