αα·αααΌααα·αααΆαα α’αααααααααααααααααααα VMware ααΆαα½αααααααΎαα·α αα ααΆαααααααΆαααααααααααααααα·α ααΆααΆααα’ααα αΆααααααΎαααααααααΆααααΆααααααααΆ αααααΆαααααα PowerShell α¬ VMware PowerCLI α
α αΌααα·ααΆαααΆα’αααααΆαααααΆααααααΆα PowerShell ααααα·α ααΆαααΆαααΎαααααΎαααΆα ISE αα·αααααΎ cmdlets αααααααΆαααΈαααΌαα»ααααααααΎαααΆααααααΆααα "ααααααααααααααα" α αα αααα’αααα αΆααααααΎαααΆαααααΆαααΈααα·αααα·ααααα»αα ααα½αααΆαααα α’αααααΉαααΎαααΆααααααΈαααααα½ααααα»αααααα·αααΌα αα½αααααΎαααΆαααΊααα½αα±ααααααααααΆαααα ααΎααααΆαααα
αααα»αααααΆαααΆαααα α§αααααα ααα½α α’ ααΉααα½αα
- PowerShell Runspaces - αα·ααΈααΆααααααααα’αα»ααααΆαα±ααα’αααααααΎααααααααΆααααΆαααααα·ααααα·ααααααΎαααΆααα αααα»ααααααααα‘αΆαααΆα ααααα‘αα;
- ααα½αααΆα-ααΎα - αα»αααΆα PowerCLI ααΌαααααΆααααααΆ analogue αα Get-WMIObject αα αααα»α Windows α cmdlet αααβαα·αβααΆαβααααα»βαααβα’αβααΆαα½αβα’αααααΆαβαα ααα»ααααβααα½αβααααααΆαβαααα»αβααααααβααΆβααααα»βααΆααααβαααβααΆαβααααααβαα·ααααααβααΆααααα αααα»αααααΈααΆα αααΎαααΆα ααααααΏαααΆαα
αααααΆαα αααα»αααΉααα·ααΆααααααααααα’αααΈα§αααααααΈαα½αα αα·ααααα αΆαα§ααΆα αααααααΆαααααΎααααΆααα α αΌαααΎααα·ααΆαααααααΈαααΆααααΆαα α αΎαααΎαααΆααΎαααααΆαα½αααααΎαααΆαααα’ααΆααα½ααααα αα !
ααααΆααααΆαααααΌαα ααααααααα
ααΌα αααα Runspace ααααΌαααΆααα ααΆα‘αΎααααααΆααααααΎαααΆααααΆαααΆα‘ααααααΆααα·α αα αα ααΆααααα αααΌαα»αααα ααΆααΆααα·αααΆαα α’αααα’αΆα α αΆααααααΎαααααΎαααΆααα½ααααααααααααααΉααααΈα’αααα αα αΆααα½αα ααα½α αα½αααααΆαααΆααΎαα ααααα·αααΎααααααΈαααααα’αααααααΎαααΆααααα»αααααααααΈαααΈααΆααΈ α αΎαααααΎααααΆααα’αααα αα αΆααα½αααΈα αααΆαα ααΆαα αααΎαααααααΆα’αααααΉααα·αααααΌαααΆα Runspace ααα ααα»αααααααααΆααααααααΈααααααΆααααααα»ααΆαααααΊαααΊααααΌαααΆαα
α’αααα’αΆα α αΆααααααΎαααααα ααΈαααα
ααΆαα αΆααααααΎαααααΎααααΆαα PowerShell Runspacesα αααααααΈ 1
ααΎααΆαααααΎααααΆαα Runspace αααααα’αααΈααααα
- ααααΏααααααααααααααΈααΆααααααααΆαααααΆαααααα·ααααα·,
- ααΆαα’αα»ααααααΆααα·α αα ααααααααΆ,
- αα»ααααα·ααΆαα
αααααΊααΆα§ααΆα αααααΈα’ααΈαααΊαα·ααα αααααα Runspace αα½αα
"ααΆααααααααααααααααΆααααα ααααα»αααΊααΆαααααΆααααααααΆααααα»ααα½ααααα»αααΆαααΆαααΆααα αααα»α vSphere α αα ααΆααααα»α vCenter α’ααααα·αααααΉαααα’αΆα α αΌααα ααΎαααΆ VM αα½αααΆαααα»αααααΎααααΆααααααΆααααα»ααααααααααααα ααΆααααΆαααα’ α’αααα’αΆα αααααΌααα·ααααααααααααα»αααααααααα»ααααΆαααΆααΈ αααααΆα PowerShell α
αααα»αααΉαα αααααααααααααΈααααααΉαα’αα»ααααΆαα±ααα’αααααααααααααααααααα VMware ααααααααααΆαααΏαααΌααΆαα vCenter αα·αααα½αααΆααααααΈ VM ααΆαα½αααΉααα·ααααααααΎααΆαααααΎααααΆααααΆααααααααααα½αααα
ααααααΈαααααΎ PowerShell runspaces ααΎααααΈα’αα»ααααΆαα±αααααΆαααΈα ESXi ααΈαα½αααααααΌαααααααΆαα’αααΈααΆαααααΎααααΆααααΈ VMs ααααΆααααααααΆαα αααα»α Runspace ααΆα ααααα‘αα α αΎαααΆαααΆαααααΈααΆααααα ααααααΆααα αααα’αα»ααααΆαα±αα PowerShell αα·αααΆαααΆαααααΆαα ααΆααΆαααααΎαααααααααΆαααααααΆαααΈα αα·ααααα αΆαα±αααα½ααααααααααααΎαααααααα½αα"ααααα:
αααααααα αΆααααΆαααΈααα·αααα·α I/O αα ααΎααααΆααααααααααα ESXi
αααα»αααααΈααΆαααααα Runspace αααααΆααααααααααααα αΎαα
βαααα»ααααα»αααααΆααΆααααααααααααΈαααααααααΌααα·ααααααααΆα αααΎαααΈ VM α αΎαααααααα·ααααααααααΈαα αααα αΆαααΆα αα αααα αΆααΊααΆααΆα VM α αααΎαααΆαα α αΎα 5-8 αα·ααΆααΈααααΌαα αααΆαααΎαααΆαααΈααααα½αα
ααααα:
Multithreading PowerCLI ααΆαα½α RunspacePool
αα ααΈαααα’αααααΉαααααΌαααΆα Get-View ααααααααα ααΆα
ααααΆααααΆαααΈααΈαα ααα½αααΆααα·αααααΆα
ααΎααααΈαααααΈααΌαα ααα»ααα Get-View ααΆααααααααα ααΆααααΌαα αα αΆαααΈααααααα cmdlets ααααΎαααΆαααΆααΌαα α
Cmdlets ααααΌαααΆαααΆα αΆαααΆα α ααΎααααΈααα½αααΆαααααααΆααααΆαααΆααααα½α ααααα·αα αΆαααΆα ααα·ααααΆααααα ααα API αα·ααααααΎαααααααααΆααα‘αΎααα·αα α’αααΈβαααβαα βααααβααΎαβααβααΌαβαα½αβαα α¬βααΈαβαααααΆαα PowerShell α’αα»ααααΆαβα±ααβα’αααβααααΎβαααβααΆαααβαααααΆβαα½αα ααΎααααααααΆαααααααΆααααΆαααΆααααα½ααααααΆαα½αααΉαααααΏαα αα·αααΆαααααααααα ααΆααααα»α cmdlets αααα½αα―ααα: α’ααααααΌα ααααΆααα»αααααα ααααα·αααΆααααααααααααααααααα·αααααααααααααααααΈααααααα₯ααααΆαααααΆααααααΊααααα
α₯α‘αΌαααα αααααΆααααΆαααααααααααΆαα½α Get-View ααΌααα Get-VM cmdletα ααΆα αΌαααααΎαααΆαααΈααα·αααα·α α αΎααααα‘ααααααα»αααα αααααΊααΆααααΆααααααα»αααααΆααααααααααααααααα ααΆα VMHost, Datastore ααΆααΎαα
Get-View αα αααα»αααααααααααααΆαα·αααααααα’αααΈααααα·αα αΆαααΆα ααα ααααα»αααααΆααααα‘αααααα·ααααααα ααΎαααΈααααα ααα ααΆα’αα»ααααΆαα±ααααΎααααααΆαααααΆαααΉααααΉαααΌαααααααΆααααααΎαααααΌαααΆα αααααΉαααααΎα±ααααααα»αα·αααααααΆαααΆαααΆααααα½αα αα αααα»α Windows Server ααΆααΌαα αα·ααα αααα»α Hyper-V ααΆαα·ααα Get-WMIObject cmdlet ααΊααΆ analogue ααααΆαα - αααα·αααΊααΌα ααααΆααααα·αα
Get-View ααΆαααΆααα’αΆαααα’α½ααααααΆααααααα·ααααα·ααΆαααΆαααα αΆαααΎααααα»α ααα»α α ααα»ααααβααΎβαα·ααΆαβαααβααααα»βααΆααβααΆααβααΆααβαααΊαβαααβαα·αβααΆαβαααααβααα
α’αααα’αΆα α’αΆααααααααα ααΎααααα VMwareα
ααΆαααααΆαα’αααΈ Get-View
α₯α‘αΌαααααααα»αααΉααααα αΆαα’αααααΌαα’αααΈααααααααΆααααααααΎααααΈαα·αα
αααααααααααΈαααΎααααΈαα VM
αααααα½α αα·ααααα½αααΆαααΆααααααααα»αααΆααα»αα±αααααα»ααααααΎαααααα·αααααΆαααααααΈαααααααΆααα ααΆααα·α αα ααΊααΆαααααΆααααΌαα α ααααααα VM ααΆααα’αααααααΆααααΆαααΆαααααα cloud.uuid αααα½α (ααΆα ααΆα’αΆα αα αα½α αα αααααααΌα VM αα αααα»α vCloud Director)α
αααααααααΆαααΆααααααααααααααΌααα·αααΊα
- ααα½αααΆααααααΈαα VMs ααΆααα’ααα
- ααααααααΈααΆαααααααΆαα½αα
ααααααΎαααΊααΆααααααΈαααααΆαααααααα
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
}
# ΠΠ°Π»Π΅Π΅ Π Π£ΠΠΠΠ ΠΏΠ°ΡΡΠΈΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ
α’αααΈααααααααΆαααΊααΆαααααααα»ααα·αα αααΆααααΆααα ααΆα’αΆα ααααΌαααΆαααααααααα»αααααααααΈαααΈααΆααΈααΆαα½αααΉαααΆααααααΆαααΆα αααα ααΈαααΎααΆαα ααααα αΎαααΆαα½α ααΆααα
ααα»ααααααΎαααΆαααααααααΆα
α€ ααΆααΈ α£α αα·ααΆααΈ αα
αααααααΎαααΆαααααΎααα 10k VMs α ααααΆαααααααΆααααΊα’ααααααΆαααααααα αα·ααααααΌαααΆαααΎααααΈαααααααααααααααααα ααΆααααααα ααααααΈαααΆαααΆαα±ααααΆαααΆααααααΎαααααα·αααααΆαα
Runspaces ααΊααΆαααααα·ααΈααααΌαααααααααα½ααααααααα αα ααααααα’αααααααΌαααΆαααα½αααΆα host metrics ααΈ vCenter αααα»ααααααααΆαααααΆ α¬ααααΌαααΆαααααΎαααΆαααααα»ααΆαααααΊαα αααααΎαα’αααΈααααα·ααΈααΆααααααααααΆαααα
ααΎαααααΏαααααΌαα PowerShell Runspaces
ααΏαααααΌαααααα·ααααααααααΈααααααΊααΆαααααα·ααααα·ααααα·ααα»ααα·ααααααΆαααααΆααααααααα ααα»αααααα αααα»ααααααααα‘αΆααααΆαααΆα‘αα αααααΌααα·ααααααααΆααα’αααα αααα»αααααα»αααα½α α αΎαααααααΆα
ααα»ααααααΆααααα αΆαα½αα PowerCLI ααΉααα·αα’αα»ααααΆαα±ααααΎαααΎαααααα―αααΆαααααΆα αααΎααα ααΆαα 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.
ααΎααααΈβαααααααΆαβαααα αΆβααα ααααΌαβα’αααβααααΌαααβααααβααααααΆαβααααβαα αααα»αβααΆαααααΆαα α’αα»ααααΆαα±ααααΎαα αα αΆαααΆ PowerShell ααααΎαααΆαααΆαα½αααααα»αααα’αΆα ααααΌαααΆααααααΌαααΆαααΆαααΆααααααααΆαααα αα»αααΆααα½αα¬αα ScriptBlock α αααααααααΆαααααααααα»αααααααααααααα»αααααα αααααααααΆαα $global:DefaultVIServers (Connect-VIServer ααΆαα½α-NotDefault key)α
$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 $_
}
}
}
α₯α‘αΌαααα α αΌαααΎαα’αα»αααα multithreading ααΆαααα Runspace Poolsα
αααα½ααααααααΆαααΆαααΌα ααΆααααααα
- ααΎαααα½αααΆααααααΈ VMs ααΆααα’ααα
- αα αααα»αααααααΈαααααααααΆααΎαααα½αααΆα cloud.uuid α
- ααΎααααααΌααα·ααααααααΈααααααΈααα αααα»αααααα»αα½αα
- ααΎαααααααααα»αααααΆααααΆαααα»αααααααααααααΆα 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
}
ααΆααααααααα’αΆαααααααααΈααααααΊααΆααΆα’αΆα ααααΌαααΆαααααΎαα αααα»αααααΈααααααααααΆαααααααααααααααΆαααααααα½α ScriptBlock αα·ααααΆαααΆαααααααααααΉαααααΌαααΆααααααΌααα ααααααΈαα αααα αααα!
ααΎαααΆαααααααααΆα
α§α’α α α αα·ααΆααΈα ααΆαααααΎαααΆα ααα»ααααααΆαα
ααα’αΆα
ααΏαααΆααα»αα
α αΌαααααΆααααΈαα ααααΏαααΈααΈα: 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 α ααΆαα·αααΏααααααααααΆαααααααΆαααΆαα½αααααα»αααα»αααααΆαα αααα½αα‘αΌααΈααααΎαα‘αΎαα α ααα»α’αααΈααΆαααΆααΎαααααΌαααΆαααααααΆααααααα αα·α PSObject αααα α·ααΆαα½ααα αααα»αααααΈααα αα ααααααααΎαααααΆααααααααΌαααΆαααααα VM ααααΆαααΆαααααααΆ αα·αααααααααα»ααααααααααα·α ?
ααΎαααΈααα α§ααααααααα»ααααααα Get-AdvancedOptions ααααΌαααΆαααα ααααΈααααααΈαα ααΆαααααΎααααΆαα Runspace Pools α₯α‘αΌαααα α αΆααααΈααΌα ααΆαααα»αα α½αα ααα» αααααααΆαααααΆαααααΌαααΆααααα»αααΆααααααααααα·α αα ααΆαααΊα α ααααααΆαααααααααααΆααα ααααααααααααααα½αα α§αααααααΊααα’ααα»αααααα·αααααααααΆααααααΈαααααα
ααΌααααα‘ααααΎααααααααα ExtensionDataα ααΆααααΆαα’αααΈαααα ααΈ Get-View object αααααα
α αΌαβα α βαα αα αααααβαα»ααΆαβααααβα α α αααΆαααΆα PowerShellα αα½αβαααααΆααβαααβααααΎβααααα ααΆαβαααααα αα·αβααΆαβααΆααβααΆβαααα»αα ααΆααααααααααααΈαα»αααΆααα’ααααααΌαααΆαααααα½ααααΆααααααααα’αΆααα ααΆαααααΆαααα½α α αΎαααααΌαααΆαααααα·ααααα·αααα»ααααααα½αα
$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
ααΎαααΆαααααααααΆα
9 αα·ααΆααΈ αααααΆααααααα»αα·α 10k ααΆαα½αααΉαααΆαααααααΆααααααααααααα
ααααΆαα α’ααα
αΆααα!
αααα½αα±ααααΆαααααα·ααααΆααα½α
αααααααααα’αΆα ααα½αααααΆααααααααΆααα’αΆαααααααΎαααααΎαααα§αααααα ααΆααΏααααΆαα·ααΆααααα»αααΆααα·ααΆαα±ααααααΆααααΆααΎα’αααΈααααα½αααααΌαααΆαααααΎαααΎαααΎααααΈαααααα ααΆααΆαα αα·ααΈααΆαααααααΈαα½αααααααΆαααΆααααααΈαααααΆααααΆααααααΎαααααΏαααααααΈαααΊααα’αααα»αααααααααααααΆαα’αα»ααααααααααΆα αααα»ααααααΉαααΆα’ααααααααααΉααα½αα’ααααααα»ααα·α αα ααΆαααααααΆααααα»αααΆααααααΉαα’αααΈααΌαααααΆαααααΉαααααααΎαααΆαααααααααααααα·αααα αα·αααΆααααααΎαααααα·αααααΆααα αααα»αα αααααΆαα ααΆααααααααααααα’αααα
PS: α’ααααα·ααααααΌαα’ααα»ααααΆαα·ααα ααααααΆααα’αααααααΆαααααα½α αα·αααΆαααΆαααααααααα½ααααααα»αααΆααααα
αα’αααααα ααΌααααΈααα’ααααααααΆααααααΆαα α αΎαααΌααααΈααα’αααααααα·αααΆαααΎαααΌα
ααΆ boa constrictor α
ααααα: www.habr.com