PowerCLI ஸ்கிரிப்ட்களுக்கான ராக்கெட் பூஸ்டரை எவ்வாறு உருவாக்குவது 

விரைவில் அல்லது பின்னர், எந்த VMware கணினி நிர்வாகியும் வழக்கமான பணிகளை தானியக்கமாக்குவார். இது அனைத்தும் கட்டளை வரியுடன் தொடங்குகிறது, பின்னர் PowerShell அல்லது VMware PowerCLI வருகிறது.

ISE ஐத் தொடங்குவதற்கும், "ஒருவித மாயவித்தை" காரணமாக வேலை செய்யும் தொகுதிகளிலிருந்து நிலையான cmdletகளைப் பயன்படுத்துவதற்கும் நீங்கள் பவர்ஷெல்லில் தேர்ச்சி பெற்றிருக்கிறீர்கள் என்று வைத்துக்கொள்வோம். நீங்கள் நூற்றுக்கணக்கான மெய்நிகர் இயந்திரங்களை எண்ணத் தொடங்கும் போது, ​​சிறிய அளவில் உதவும் ஸ்கிரிப்டுகள் பெரிய அளவில் மெதுவாக இயங்குவதைக் காணலாம். 

இந்த சூழ்நிலையில், 2 கருவிகள் உதவும்:

  • பவர்ஷெல் ரன்ஸ்பேஸ்கள் - தனித்தனி நூல்களில் செயல்முறைகளின் செயல்பாட்டை இணையாக அனுமதிக்கும் அணுகுமுறை; 
  • பெறு-பார்வை - ஒரு அடிப்படை PowerCLI செயல்பாடு, Windows இல் Get-WMIObject இன் அனலாக். இந்த cmdlet ஆனது பொருள்களுடன் வரும் பொருட்களை இழுக்காது, ஆனால் எளிமையான தரவு வகைகளைக் கொண்ட எளிய பொருளின் வடிவத்தில் தகவலைப் பெறுகிறது. பல சந்தர்ப்பங்களில், அது வேகமாக வெளியேறும்.

அடுத்து, ஒவ்வொரு கருவியைப் பற்றியும் சுருக்கமாகப் பேசுவேன் மற்றும் பயன்பாட்டின் உதாரணங்களைக் காண்பிப்பேன். குறிப்பிட்ட ஸ்கிரிப்ட்களை பகுப்பாய்வு செய்து, மற்றொன்றை விட சிறப்பாக செயல்படும் போது பார்க்கலாம். போ!

PowerCLI ஸ்கிரிப்ட்களுக்கான ராக்கெட் பூஸ்டரை எவ்வாறு உருவாக்குவது

முதல் நிலை: ரன்ஸ்பேஸ்

எனவே, ரன்ஸ்பேஸ் பிரதான தொகுதிக்கு வெளியே பணிகளின் இணையான செயலாக்கத்திற்காக வடிவமைக்கப்பட்டுள்ளது. நிச்சயமாக, சில நினைவகம், செயலி போன்றவற்றைச் சாப்பிடும் மற்றொரு செயல்முறையை நீங்கள் தொடங்கலாம். உங்கள் ஸ்கிரிப்ட் ஓரிரு நிமிடங்களில் இயங்கி ஒரு ஜிகாபைட் நினைவகத்தைப் பயன்படுத்தினால், பெரும்பாலும் உங்களுக்கு ரன்ஸ்பேஸ் தேவைப்படாது. ஆனால் பல்லாயிரக்கணக்கான பொருட்களுக்கான ஸ்கிரிப்டுகளுக்கு இது தேவைப்படுகிறது.

நீங்கள் இங்கே கற்க ஆரம்பிக்கலாம்: 
பவர்ஷெல் ரன்ஸ்பேஸின் ஆரம்ப பயன்பாடு: பகுதி 1

ரன்ஸ்பேஸைப் பயன்படுத்துவது என்ன தருகிறது:

  • செயல்படுத்தப்பட்ட கட்டளைகளின் பட்டியலைக் கட்டுப்படுத்துவதன் மூலம் வேகம்,
  • பணிகளை இணையாக நிறைவேற்றுதல்,
  • பாதுகாப்பு.

Runspace உதவும் போது இணையத்திலிருந்து ஒரு எடுத்துக்காட்டு இங்கே:

"சேமிப்பக சர்ச்சை என்பது vSphere இல் கண்காணிக்க கடினமான அளவீடுகளில் ஒன்றாகும். vCenter இன் உள்ளே, எந்த VM அதிக சேமிப்பக ஆதாரங்களைப் பயன்படுத்துகிறது என்பதை நீங்கள் சென்று பார்க்க முடியாது. அதிர்ஷ்டவசமாக, பவர்ஷெல் மூலம் இந்தத் தரவை நிமிடங்களில் சேகரிக்கலாம்.
VMware சிஸ்டம் நிர்வாகிகள் vCenter முழுவதும் விரைவாகத் தேடவும், அவர்களின் சராசரி நுகர்வு குறித்த தரவுகளுடன் VMகளின் பட்டியலைப் பெறவும் அனுமதிக்கும் ஸ்கிரிப்டைப் பகிர்கிறேன்.  
ஸ்கிரிப்ட் பவர்ஷெல் ரன்ஸ்பேஸ்களைப் பயன்படுத்தி ஒவ்வொரு ESXi ஹோஸ்டையும் அதன் சொந்த VM களில் இருந்து நுகர்வுத் தகவலை ஒரு தனி Runspace இல் சேகரித்து உடனடியாக முடித்ததாக அறிவிக்கிறது. இது பவர்ஷெல்லை உடனடியாக வேலைகளை மூட அனுமதிக்கிறது, மாறாக ஹோஸ்ட்கள் மூலம் திரும்பத் திரும்பச் செய்து, ஒவ்வொன்றும் அதன் கோரிக்கையை நிறைவு செய்யும் வரை காத்திருக்கிறது."

ஆதாரம்: ESXi டாஷ்போர்டில் மெய்நிகர் இயந்திரம் I/O ஐ எவ்வாறு காண்பிப்பது

கீழே உள்ள வழக்கில், Runspace இனி பயனுள்ளதாக இருக்காது:

“நான் VM இலிருந்து நிறைய தரவைச் சேகரித்து தேவைப்படும்போது புதிய தரவை எழுதும் ஸ்கிரிப்டை எழுத முயற்சிக்கிறேன். பிரச்சனை என்னவென்றால், நிறைய விஎம்கள் உள்ளன, மேலும் ஒரு இயந்திரத்தில் 5-8 வினாடிகள் செலவிடப்படுகின்றன. 

ஆதாரம்: RunspacePool உடன் மல்டித்ரெடிங் PowerCLI

இங்கே உங்களுக்கு Get-View தேவைப்படும், அதற்கு செல்லலாம். 

இரண்டாவது நிலை: கெட்-வியூ

Get-View ஏன் பயனுள்ளதாக இருக்கிறது என்பதைப் புரிந்து கொள்ள, cmdlets பொதுவாக எவ்வாறு செயல்படுகின்றன என்பதை நினைவில் கொள்வது மதிப்பு. 

API குறிப்புப் புத்தகங்களைப் படிக்காமல், அடுத்த சக்கரத்தை மீண்டும் கண்டுபிடிக்க வேண்டிய அவசியமின்றி, வசதியாகத் தகவலைப் பெற, Cmdletகள் தேவை. பழைய நாட்களில் நூறு அல்லது இரண்டு கோடுகளின் குறியீட்டை எடுத்தது, பவர்ஷெல் உங்களை ஒரு கட்டளையுடன் செய்ய அனுமதிக்கிறது. இந்த வசதிக்காக நாங்கள் வேகத்துடன் பணம் செலுத்துகிறோம். cmdlets க்குள் எந்த மந்திரமும் இல்லை: அதே ஸ்கிரிப்ட், ஆனால் குறைந்த மட்டத்தில், சன்னி இந்தியாவைச் சேர்ந்த ஒரு மாஸ்டரின் திறமையான கைகளால் எழுதப்பட்டது.

இப்போது, ​​Get-View உடன் ஒப்பிடுவதற்கு, Get-VM cmdlet ஐ எடுத்துக்கொள்வோம்: இது மெய்நிகர் இயந்திரத்தை அணுகி ஒரு கூட்டுப் பொருளைத் தருகிறது, அதாவது, அதனுடன் தொடர்புடைய பிற பொருட்களை இணைக்கிறது: VMHost, Datastore, முதலியன.  

அதன் இடத்தில் Get-View திரும்பிய பொருளில் தேவையற்ற எதையும் சேர்க்காது. மேலும், நமக்குத் தேவையான தகவல்களைக் கண்டிப்பாகக் குறிப்பிட இது அனுமதிக்கிறது, இது வெளியீட்டு பொருளை எளிதாக்கும். பொதுவாக Windows Server இல் மற்றும் குறிப்பாக Hyper-V இல், Get-WMIObject cmdlet ஒரு நேரடி அனலாக் ஆகும் - யோசனை சரியாகவே உள்ளது.

புள்ளிப் பொருட்களில் வழக்கமான செயல்பாடுகளுக்கு Get-View சிரமமாக உள்ளது. ஆனால் ஆயிரக்கணக்கில், பல்லாயிரக்கணக்கான பொருள்கள் என்று வரும்போது அதற்கு விலை இல்லை.

VMware வலைப்பதிவில் நீங்கள் மேலும் படிக்கலாம்: கெட்-வியூ அறிமுகம்

இப்போது நான் எல்லாவற்றையும் உண்மையான வழக்கைப் பயன்படுத்தி உங்களுக்குக் காட்டுகிறேன். 

VM ஐ இறக்குவதற்கு ஸ்கிரிப்டை எழுதுதல்

ஒரு நாள் என் சக ஊழியர் என்னிடம் அவருடைய ஸ்கிரிப்டை மேம்படுத்தும்படி கேட்டார். பணியானது ஒரு பொதுவான வழக்கம்: அனைத்து VMகளையும் டூப்ளிகேட் cloud.uuid அளவுருவுடன் கண்டறியவும் (ஆம், vCloud இயக்குனரில் VM ஐ குளோனிங் செய்யும் போது இது சாத்தியமாகும்). 

மனதில் தோன்றும் தெளிவான தீர்வு:

  1. அனைத்து VMகளின் பட்டியலைப் பெறவும்.
  2. எப்படியாவது பட்டியலை அலசவும்.

அசல் பதிப்பு இந்த எளிய ஸ்கிரிப்ட்:

function Get-CloudUUID1 {
   # Получаем список всех ВМ
   $vms = Get-VM
   $report = @()

   # Обрабатываем каждый объект, получая из него только 2 свойства: Имя ВМ и Cloud UUID.
   # Заносим данные в новый PS-объект с полями VM и UUID
   foreach ($vm in $vms)
   {
       $table = "" | select VM,UUID

       $table.VM = $vm.name
       $table.UUID = ($vm | Get-AdvancedSetting -Name cloud.uuid).Value
          
       $report += $table
   }
# Возвращаем все объекты
   $report
}
# Далее РУКАМИ парсим полученный результат

எல்லாம் மிகவும் எளிமையானது மற்றும் தெளிவானது. ஒரு காபி ப்ரேக்குடன் ஓரிரு நிமிடங்களில் எழுதிவிடலாம். வடிகட்டுதல் மீது திருகு மற்றும் அது முடிந்தது.

ஆனால் நேரத்தை அளவிடுவோம்:

PowerCLI ஸ்கிரிப்ட்களுக்கான ராக்கெட் பூஸ்டரை எவ்வாறு உருவாக்குவது

PowerCLI ஸ்கிரிப்ட்களுக்கான ராக்கெட் பூஸ்டரை எவ்வாறு உருவாக்குவது

2 நிமிடங்கள் 47 வினாடிகள் கிட்டத்தட்ட 10k VM களை செயலாக்கும் போது. போனஸ் என்பது வடிப்பான்கள் இல்லாதது மற்றும் முடிவுகளை கைமுறையாக வரிசைப்படுத்த வேண்டிய அவசியம். வெளிப்படையாக, ஸ்கிரிப்ட் தேர்வுமுறை தேவைப்படுகிறது.

நீங்கள் ஒரே நேரத்தில் vCenter இலிருந்து ஹோஸ்ட் அளவீடுகளைப் பெற வேண்டியிருக்கும் போது அல்லது பல்லாயிரக்கணக்கான பொருட்களைச் செயலாக்க வேண்டியிருக்கும் போது ரன்ஸ்பேஸ்கள் முதலில் மீட்புக்கு வரும். இந்த அணுகுமுறை என்ன கொண்டு வருகிறது என்று பார்ப்போம்.

முதல் வேகத்தை இயக்கவும்: பவர்ஷெல் ரன்ஸ்பேஸ்கள்

இந்த ஸ்கிரிப்டுக்கு முதலில் நினைவுக்கு வருவது, லூப்பை தொடர்ச்சியாக இயக்காமல், இணையான இழைகளில் இயக்குவது, எல்லா தரவையும் ஒரு பொருளில் சேகரித்து அதை வடிகட்ட வேண்டும். 

ஆனால் ஒரு சிக்கல் உள்ளது: பவர்சிஎல்ஐ பல சுயாதீன அமர்வுகளை vCenter க்கு திறக்க அனுமதிக்காது மற்றும் ஒரு வேடிக்கையான பிழையை ஏற்படுத்தும்:

You have modified the global:DefaultVIServer and global:DefaultVIServers system variables. This is not allowed. Please reset them to $null and reconnect to the vSphere server.

இதைத் தீர்க்க, நீங்கள் முதலில் அமர்வு தகவலை ஸ்ட்ரீமிற்குள் அனுப்ப வேண்டும். பவர்ஷெல் ஒரு செயல்பாட்டிற்கு அல்லது ஸ்கிரிப்ட் பிளாக்கிற்கு ஒரு அளவுருவாக அனுப்பக்கூடிய பொருள்களுடன் செயல்படுகிறது என்பதை நினைவில் கொள்வோம். $global:DefaultVIServers (-NotDefault விசையுடன் இணைக்க-VIServer) ஐத் தவிர்த்து, அத்தகைய ஒரு பொருளின் வடிவத்தில் அமர்வை அனுப்புவோம்:

$ConnectionString = @()
foreach ($vCenter in $vCenters)
   {
       try {
           $ConnectionString += Connect-VIServer -Server $vCenter -Credential $Credential -NotDefault -AllLinked -Force -ErrorAction stop -WarningAction SilentlyContinue -ErrorVariable er
       }
       catch {
           if ($er.Message -like "*not part of a linked mode*")
           {
               try {
                   $ConnectionString += Connect-VIServer -Server $vCenter -Credential $Credential -NotDefault -Force -ErrorAction stop -WarningAction SilentlyContinue -ErrorVariable er
               }
               catch {
                   throw $_
               }
              
           }
           else {
               throw $_
           }
       }
   }

இப்போது Runspace Pools மூலம் மல்டித்ரெடிங்கை செயல்படுத்துவோம்.  

வழிமுறை பின்வருமாறு:

  1. அனைத்து VMகளின் பட்டியலைப் பெறுகிறோம்.
  2. இணையான நீரோடைகளில் நாம் cloud.uuid ஐப் பெறுகிறோம்.
  3. ஸ்ட்ரீம்களிலிருந்து தரவை ஒரு பொருளில் சேகரிக்கிறோம்.
  4. CloudUUID புலத்தின் மதிப்பின் மூலம் பொருளைக் குழுவாக்குவதன் மூலம் அதை வடிகட்டுகிறோம்: தனிப்பட்ட மதிப்புகளின் எண்ணிக்கை 1 ஐ விட அதிகமாக உள்ளவை நாம் தேடும் VMகள்.

இதன் விளைவாக, ஸ்கிரிப்டைப் பெறுகிறோம்:


function Get-VMCloudUUID {
   param (
       [string[]]
       [ValidateNotNullOrEmpty()]
       $vCenters = @(),
       [int]$MaxThreads,
       [System.Management.Automation.PSCredential]
       [System.Management.Automation.Credential()]
       $Credential
   )

   $ConnectionString = @()

   # Создаем объект с сессионным ключом
   foreach ($vCenter in $vCenters)
   {
       try {
           $ConnectionString += Connect-VIServer -Server $vCenter -Credential $Credential -NotDefault -AllLinked -Force -ErrorAction stop -WarningAction SilentlyContinue -ErrorVariable er
       }
       catch {
           if ($er.Message -like "*not part of a linked mode*")
           {
               try {
                   $ConnectionString += Connect-VIServer -Server $vCenter -Credential $Credential -NotDefault -Force -ErrorAction stop -WarningAction SilentlyContinue -ErrorVariable er
               }
               catch {
                   throw $_
               }
              
           }
           else {
               throw $_
           }
       }
   }

   # Получаем список всех ВМ
   $Global:AllVMs = Get-VM -Server $ConnectionString

   # Поехали!
   $ISS = [system.management.automation.runspaces.initialsessionstate]::CreateDefault()
   $RunspacePool = [runspacefactory]::CreateRunspacePool(1, $MaxThreads, $ISS, $Host)
   $RunspacePool.ApartmentState = "MTA"
   $RunspacePool.Open()
   $Jobs = @()

# ScriptBlock с магией!)))
# Именно он будет выполняться в потоке
   $scriptblock = {
       Param (
       $ConnectionString,
       $VM
       )

       $Data = $VM | Get-AdvancedSetting -Name Cloud.uuid -Server $ConnectionString | Select-Object @{N="VMName";E={$_.Entity.Name}},@{N="CloudUUID";E={$_.Value}},@{N="PowerState";E={$_.Entity.PowerState}}

       return $Data
   }
# Генерируем потоки

   foreach($VM in $AllVMs)
   {
       $PowershellThread = [PowerShell]::Create()
# Добавляем скрипт
       $null = $PowershellThread.AddScript($scriptblock)
# И объекты, которые передадим в качестве параметров скрипту
       $null = $PowershellThread.AddArgument($ConnectionString)
       $null = $PowershellThread.AddArgument($VM)
       $PowershellThread.RunspacePool = $RunspacePool
       $Handle = $PowershellThread.BeginInvoke()
       $Job = "" | Select-Object Handle, Thread, object
       $Job.Handle = $Handle
       $Job.Thread = $PowershellThread
       $Job.Object = $VM.ToString()
       $Jobs += $Job
   }

# Ставим градусник, чтобы наглядно отслеживать выполнение заданий
# И здесь же прибиваем отработавшие задания
   While (@($Jobs | Where-Object {$_.Handle -ne $Null}).count -gt 0)
   {
       $Remaining = "$($($Jobs | Where-Object {$_.Handle.IsCompleted -eq $False}).object)"

       If ($Remaining.Length -gt 60) {
           $Remaining = $Remaining.Substring(0,60) + "..."
       }

       Write-Progress -Activity "Waiting for Jobs - $($MaxThreads - $($RunspacePool.GetAvailableRunspaces())) of $MaxThreads threads running" -PercentComplete (($Jobs.count - $($($Jobs | Where-Object {$_.Handle.IsCompleted -eq $False}).count)) / $Jobs.Count * 100) -Status "$(@($($Jobs | Where-Object {$_.Handle.IsCompleted -eq $False})).count) remaining - $remaining"

       ForEach ($Job in $($Jobs | Where-Object {$_.Handle.IsCompleted -eq $True})){
           $Job.Thread.EndInvoke($Job.Handle)     
           $Job.Thread.Dispose()
           $Job.Thread = $Null
           $Job.Handle = $Null
       }
   }

   $RunspacePool.Close() | Out-Null
   $RunspacePool.Dispose() | Out-Null
}


function Get-CloudUUID2
{
   [CmdletBinding()]
   param(
   [string[]]
   [ValidateNotNullOrEmpty()]
   $vCenters = @(),
   [int]$MaxThreads = 50,
   [System.Management.Automation.PSCredential]
   [System.Management.Automation.Credential()]
   $Credential)

   if(!$Credential)
   {
       $Credential = Get-Credential -Message "Please enter vCenter credentials."
   }

   # Вызов функции Get-VMCloudUUID, где мы распараллеливаем операцию
   $AllCloudVMs = Get-VMCloudUUID -vCenters $vCenters -MaxThreads $MaxThreads -Credential $Credential
   $Result = $AllCloudVMs | Sort-Object Value | Group-Object -Property CloudUUID | Where-Object -FilterScript {$_.Count -gt 1} | Select-Object -ExpandProperty Group
   $Result
}

இந்த ஸ்கிரிப்ட்டின் அழகு என்னவென்றால், ஸ்கிரிப்ட் பிளாக் மற்றும் ஸ்ட்ரீமிற்கு அனுப்பப்படும் அளவுருக்களை மாற்றுவதன் மூலம் இது போன்ற பிற நிகழ்வுகளில் இதைப் பயன்படுத்தலாம். சுரண்டவும்!

நாங்கள் நேரத்தை அளவிடுகிறோம்:

PowerCLI ஸ்கிரிப்ட்களுக்கான ராக்கெட் பூஸ்டரை எவ்வாறு உருவாக்குவது

55 வினாடிகள். இது சிறந்தது, ஆனால் அது இன்னும் வேகமாக இருக்கும். 

இரண்டாவது வேகத்திற்கு செல்லலாம்: GetView

என்ன தவறு என்று கண்டுபிடிப்போம்.
முதல் மற்றும் முக்கியமாக, Get-VM cmdlet இயக்க நீண்ட நேரம் எடுக்கும்.
இரண்டாவதாக, Get-AdvancedOptions cmdlet முடிக்க இன்னும் அதிக நேரம் எடுக்கும்.
முதலில் இரண்டாவதாகக் கையாள்வோம். 

Get-AdvancedOptions தனிப்பட்ட VM பொருள்களுக்கு வசதியானது, ஆனால் பல பொருள்களுடன் பணிபுரியும் போது மிகவும் விகாரமானது. மெய்நிகர் இயந்திர பொருளிலிருந்தே (Get-VM) அதே தகவலை நாம் பெறலாம். இது ExtensionData பொருளில் நன்றாகப் புதைக்கப்பட்டுள்ளது. வடிகட்டுதலுடன் ஆயுதம் ஏந்தியதால், தேவையான தரவைப் பெறுவதற்கான செயல்முறையை விரைவுபடுத்துகிறோம்.

கையின் சிறிய அசைவுடன் இது:


VM | Get-AdvancedSetting -Name Cloud.uuid -Server $ConnectionString | Select-Object @{N="VMName";E={$_.Entity.Name}},@{N="CloudUUID";E={$_.Value}},@{N="PowerState";E={$_.Entity.PowerState}}

இவ்வாறு மாறும்:


$VM | Where-Object {($_.ExtensionData.Config.ExtraConfig | Where-Object {$_.key -eq "cloud.uuid"}).Value -ne $null} | Select-Object @{N="VMName";E={$_.Name}},@{N="CloudUUID";E={($_.ExtensionData.Config.ExtraConfig | Where-Object {$_.key -eq "cloud.uuid"}).Value}},@{N="PowerState";E={$_.summary.runtime.powerstate}}

வெளியீடு Get-AdvancedOptions போலவே உள்ளது, ஆனால் இது பல மடங்கு வேகமாக வேலை செய்கிறது. 

இப்போது Get-VM. இது சிக்கலான பொருட்களைக் கையாள்வதால் வேகமானது அல்ல. ஒரு தர்க்கரீதியான கேள்வி எழுகிறது: VM இன் பெயர், அதன் நிலை மற்றும் ஒரு தந்திரமான பண்புக்கூறின் மதிப்பு நமக்குத் தேவைப்படும்போது, ​​​​இந்த விஷயத்தில் நமக்கு ஏன் கூடுதல் தகவல் மற்றும் ஒரு பயங்கரமான PSObject தேவை?  

கூடுதலாக, Get-AdvancedOptions வடிவில் உள்ள தடை ஸ்கிரிப்டில் இருந்து நீக்கப்பட்டது. ரன்ஸ்பேஸ் பூல்களைப் பயன்படுத்துவது இப்போது ஓவர்கில் போல் தெரிகிறது, ஏனெனில் ஒரு அமர்வை ஒப்படைக்கும் போது குந்து நூல்கள் முழுவதும் மெதுவான பணியை இணையாகச் செய்ய வேண்டிய அவசியம் இல்லை. கருவி நல்லது, ஆனால் இந்த வழக்கில் இல்லை. 

ExtensionData இன் வெளியீட்டைப் பார்ப்போம்: இது Get-View ஆப்ஜெக்ட்டைத் தவிர வேறில்லை. 

பவர்ஷெல் மாஸ்டர்களின் பண்டைய நுட்பத்தை அழைப்போம்: வடிப்பான்களைப் பயன்படுத்தி ஒரு வரி, வரிசைப்படுத்துதல் மற்றும் குழுவாக்கம். முந்தைய திகில் அனைத்தும் நேர்த்தியாக ஒரு வரியில் சுருக்கப்பட்டு ஒரே அமர்வில் செயல்படுத்தப்படுகிறது:


$AllVMs = Get-View -viewtype VirtualMachine -Property Name,Config.ExtraConfig,summary.runtime.powerstate | Where-Object {($_.Config.ExtraConfig | Where-Object {$_.key -eq "cloud.uuid"}).Value -ne $null} | Select-Object @{N="VMName";E={$_.Name}},@{N="CloudUUID";E={($_.Config.ExtraConfig | Where-Object {$_.key -eq "cloud.uuid"}).Value}},@{N="PowerState";E={$_.summary.runtime.powerstate}} | Sort-Object CloudUUID | Group-Object -Property CloudUUID | Where-Object -FilterScript {$_.Count -gt 1} | Select-Object -ExpandProperty Group

நாங்கள் நேரத்தை அளவிடுகிறோம்:

PowerCLI ஸ்கிரிப்ட்களுக்கான ராக்கெட் பூஸ்டரை எவ்வாறு உருவாக்குவது

9 வினாடிகள் விரும்பிய நிலையில் வடிகட்டுதலுடன் கிட்டத்தட்ட 10k பொருட்களுக்கு. நன்று!

அதற்கு பதிலாக, ஒரு முடிவுக்கும்

ஏற்றுக்கொள்ளக்கூடிய முடிவு நேரடியாக கருவியின் தேர்வைப் பொறுத்தது. அதை அடைய சரியாக எதை தேர்வு செய்ய வேண்டும் என்பதை உறுதியாக சொல்வது பெரும்பாலும் கடினம். ஸ்கிரிப்ட்களை விரைவுபடுத்த பட்டியலிடப்பட்ட முறைகள் ஒவ்வொன்றும் அதன் பொருந்தக்கூடிய வரம்புகளுக்குள் நல்லது. உங்கள் உள்கட்டமைப்பில் செயல்முறை ஆட்டோமேஷன் மற்றும் உகப்பாக்கம் ஆகியவற்றின் அடிப்படைகளைப் புரிந்துகொள்வதற்கான கடினமான பணியில் இந்தக் கட்டுரை உங்களுக்கு உதவும் என்று நம்புகிறேன்.

பி.எஸ்: கட்டுரையைத் தயாரிப்பதில் உதவிய மற்றும் ஆதரவளித்த அனைத்து சமூக உறுப்பினர்களுக்கும் ஆசிரியர் நன்றி. பாதங்கள் உள்ளவர்களும் கூட. மற்றும் கால்கள் இல்லாதவர்கள் கூட, ஒரு போவா கன்ஸ்டிரிக்டர் போல.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்