Bi karanîna PowerShell, endezyar û rêveberên IT-ê dema ku ne tenê bi hundurê hundur, lê di heman demê de bi binesaziyên ewr re, nemaze bi Azure re dixebitin, karên cihêreng bi serfirazî otomatîk dikin. Di hin rewşan de, xebitandina bi PowerShell ji xebata bi portalê Azure re pir hêsantir û zûtir e. Bi saya cewhera xwe ya cross-platform, PowerShell dikare li ser her pergala xebitandinê were bikar anîn.
Ma hûn Ubuntu, Red Hat, an Windows-ê dimeşînin, PowerShell dikare ji we re bibe alîkar ku hûn çavkaniyên cloudê xwe kontrol bikin. Modulê bikar tînin
Di vê gotarê de, em ê binihêrin ka hûn çawa dikarin PowerShell-ê bikar bînin da ku mezinahiya VM-ê di ewrê Azure de biguhezîne, û her weha VM-ek û tiştên pê ve girêdayî jêbirin.
Girîng! Ji bîr nekin ku hûn destên xwe bi paqijkerê paqij bikin da ku ji bo xebatê amade bibin:
- Hûn ê hewceyê modulek bikin Modula Azure PowerShell - ew dikare bi fermanê ji Galeriya PowerShell were dakêşandin
Install-Module Az
. - Pêdivî ye ku hûn di ewrê Azure de ku makîneya virtual bi xebitandina fermanê dimeşe rast rast bikin
Connect-AzAccount
.
Pêşîn, em skrîptek biafirînin ku dê mezinahiya Azure VM-ê biguhezîne. Werin em VS Code vekin û skrîptek nû ya PowerShell ku jê re tê gotin hilînin Biguherîne-AzVirtualMachine.ps1 - Her ku mînak pêş dikeve em ê perçeyên kodê lê zêde bikin.
Em pîvanên VM yên berdest daxwaz dikin
Berî ku hûn mezinahiya VM-ê biguhezînin, hûn hewce ne ku fêr bibin ka pîvanên pejirandî ji bo makîneyên virtual di ewrê Azure de çi ne. Ji bo vê yekê hûn hewce ne ku fermanê bimeşînin Get-AzVMSize
.
Ji ber vê yekê ji bo makîneya virtual devvm01 ji koma çavkaniyê dev Em hemî pîvanên pejirandî yên gengaz daxwaz dikin:
Get-AzVMSize -ResourceGroupName dev -VMName devvm01
(Di pirsgirêkên rastîn de, bê guman, li şûna ResourceGroupName=dev и VMName=devvm01 hûn ê ji bo van pîvanan nirxên xwe diyar bikin.)
Ferman dê tiştek mîna vê vegerîne:
Vana hemî vebijarkên mezinahiyê yên gengaz in ku dikarin ji bo makîneyek virtual ya diyarkirî werin danîn.
Werin em mezinahiya otomobîlê biguherînin
Mînakî, em ê mezinahiyek nû veguherînin Standard_B1ls - ew di lîsteya jorîn de di rêza yekem de ye. (Di serîlêdanên jiyana rast de, bê guman, hûn çi pîvana ku hûn hewce ne hilbijêrin.)
- Pêşî fermanê bikar tîne
Get-AzVM
em bi hilanîna wê di guherbarekê de li ser tişta xwe (makîna virtual) agahiyê distînin$virtualMachine
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
- Dûv re em milkê ji vê tiştê digirin
.HardwareProfile.VmSize
û nirxa nû ya xwestî destnîşan bikin:$virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
- Û naha em tenê fermana nûvekirina VM-ê bicîh dikin -
Update-AzVm
:Update-AzVM -VM devvm01 -ResourceGroupName dev
- Em pê ewle ne ku her tişt baş derbas bû - ji bo vê yekê, em dîsa li ser tiştê xwe agahdariya daxwaz dikin û li milkê dinêrin
$virtualMachine.HardwareProfile
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01 $virtualMachine.HardwareProfile
Ger em li wir bibînin Standard_B1ls - ev tê wê wateyê ku her tişt bi rêkûpêk e, mezinahiya otomobîlê hatiye guhertin. Hûn dikarin pêşdetir biçin û serkeftina xwe bi nûkirina pîvana çend VM-an bi yekcarî bi karanîna arrayek ava bikin.
Di derbarê jêbirina VM-ê de li Azure çi ye?
Bi jêbirinê re, ne her tişt ew qas hêsan û hêsan e ku ew xuya dike. Beriya her tiştî, pêdivî ye ku hejmarek çavkaniyên ku bi vê makîneyê ve girêdayî ne werin rakirin, di nav de:
- Konteynerên hilanînê yên tespîtkirina boot
- Têkiliyên torê
- Navnîşanên IP-ya gelemperî
- Dîska pergalê û bloba ku rewşa wê tê hilanîn
- Dîskên daneyê
Ji ber vê yekê, em ê fonksiyonek çêbikin û jê re bang bikin Remove-AzrVirtualMachine
- û ew ê ne tenê Azure VM, lê her weha hemî jorîn jî jê bibe.
Em bi awayê standard diçin û pêşî mebesta xwe (VM) bi kar tînin Get-AzVm
. Bo nimûne, bila ew otomobîlek be WINSRV19 ji koma çavkaniyê MyTestVMs.
Werin em vê nesnê digel hemî taybetmendiyên wê di nav guhêrbarekê de hilînin $vm
:
$vm = Get-AzVm -Name WINSRV19 -ResourceGroupName MyTestVMs
Rakirina konteynerê bi pelên tespîtkirina bootê
Dema ku di Azure de VM-yek diafirîne, ji bikarhêner jî tê xwestin ku konteynirek ji bo hilanîna tespîtkirina bootê (konteynera tespîtkirina bootê) biafirîne, da ku heke di bootkirinê de pirsgirêk hebin, tiştek heye ku meriv ji bo çareserkirina pirsgirêkê serî lê bide. Lêbelê, dema ku VM were jêbirin, ev konteynir tê hiştin ku hebûna xwe ya nuha bê armanc bidomîne. Werin em vê rewşê sererast bikin.
- Pêşîn, em fêr bibin ka ev konteynir ji kîjan hesabê hilanînê ye - ji bo vê yekê em hewce ne ku milkê bibînin
storageUri
di nav gewriya tiştan deDiagnosticsProfile
VM me. Ji bo vê ez vê îfadeya birêkûpêk bikar tînim:$diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
- Naha hûn hewce ne ku navê konteynerê fêr bibin, û ji bo vê yekê hûn hewce ne ku bi karanîna fermanê nasnameya VM bistînin
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)
- Dûv re, em navê koma çavkaniyê ya ku konteynir tê de ye digirin:
$diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
- Û naha her tiştê me heye ku em bi fermanê konteynerê jêbirin
Remove-AzStorageContainer
:$saParams = @{ 'ResourceGroupName' = $diagSaRg 'Name' = $diagSa } Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force
Rakirina VM
Naha em makîneya virtual bixwe jêbirin, ji ber ku me berê guhêrbarek çêkiriye $vm
ji bo tiştê têkildar. Baş e, em fermanê bimeşînin Remove-AzVm
:
$null = $vm | Remove-AzVM -Force
Rakirina pêwendiya torê û navnîşana IP-ya gelemperî
VM-ya me hîn jî yek (an tewra çend) navgînên torê (NIC) heye - ji bo ku wan wekî nepêwist derxînin, werin em li milkê biçin NetworkInterfaces
object VM me û jêbirin NIC bi fermana Remove-AzNetworkInterface
. Di rewşê de ku ji yek pêwendiya torê zêdetir hebe, em pêlekek bikar tînin. Di heman demê de, ji bo her NIC-ê em ê xanî kontrol bikin IpConfiguration
ji bo destnîşankirina ka navber navnîşek IP-ya gelemperî heye yan na. Ger yek hat dîtin, em ê bi fermanê jêbirin Remove-AzPublicIpAddress
.
Li vir mînakek kodek wusa ye, ku em li hemî NIC-ê di dorpêkek de digerin, wan jêbirin, û kontrol bikin ka IP-ya gelemperî heye. Ger hebe, wê hingê milkê parsek bikin PublicIpAddress
, navê çavkaniya têkildar bi ID-ê bibînin û jêbirin:
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
}
}
}
Rakirina dîska pergalê
Dîska OS blobek e, ji bo ku emrê jêbirinê heye Remove-AzStorageBlob
- lê berî ku hûn wê bicîh bikin, hûn ê hewce bikin ku ji bo pîvanên wê nirxên pêwîst destnîşan bikin. Ji bo kirina vê yekê, bi taybetî, hûn hewce ne ku navê konteynera hilanînê ya ku dîska pergalê vedihewîne bistînin, û dûv re wê bi hesabê hilanînê ya têkildar re vê fermanê derbas bikin.
$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]
Rakirina Blob Status Disk System
Ji bo vê yekê, wekî ku we berê jî texmîn kir, em konteynira hilanînê ya ku ev dîsk tê de hatî hilanîn digirin, û tê vê wateyê ku blobeya li dawiyê dihewîne status
, Parametreyên têkildar bi fermana jêbirinê re derbas bikin Remove-AzStorageBlob
:
$osDiskStorageAcct | Get-AzStorageBlob -Container $osDiskContainerName -Blob "$($vm.Name)*.status" | Remove-AzStorageBlob
Û di dawiyê de, em dîskên daneyê jê dikin
VM-ya me hîn jî dikare dîskên bi daneyên ku pê ve hatine girêdan hebin. Ger hewce nebe, em ê wan jî jêbirin. Ka em pêşî wê parsek bikin StorageProfile
VM me û milkê bibînin Uri
. Ger çend dîsk hebin, em li gorî çerxekê organîze dikin URI
. Ji bo her URI, em ê hesabê hilanînê ya têkildar bikar bînin bibînin Get-AzStorageAccount
. Dûv re URI-ya hilanînê parsek bikin da ku navê blobê ya xwestî derxînin û wê bidin fermana jêbirinê Remove-AzStorageBlob
li gel hesabek hilanînê. Ya ku ew ê di kodê de xuya bike ev e:
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]
}
}
Û naha "em gihîştin dawiya xweş!" Naha pêdivî ye ku em ji van hemî perçeyan yekaneyek bicivînin. Nivîskarê dilovan Adam Bertram di nîvê rê de bi bikarhêneran re hevdîtin kir û ew bixwe kir. Li vir lînka skrîpta dawî ya ku jê re tê gotin heye Rake-AzrVirtualMachine.ps1:
→
Ez hêvî dikim ku hûn van serişteyên pratîkî ji bo ku hûn bi Azure VM-yan re bixebitin ji we re hewildan, dem û dravê xilas bikin alîkar bibînin.
Source: www.habr.com