ืืืืงืื ืื ืืืืืืจ, ืื ืื ืื ืืขืจืืช ืฉื VMware ืื ืืืฆืข ืืืืืืฆืื ืฉื ืืฉืืืืช ืฉืืจืชืืืช. ืืื ืืชืืื ืืฉืืจืช ืืคืงืืื, ืืื ืืืืข PowerShell ืื VMware PowerCLI.
ื ื ืื ืฉืืืืช ื-PowerShell ืงืฆืช ืืืชืจ ืจืืืง ืืืฉืงืช ISE ืืฉืืืืฉ ื-cmdlets ืกืื ืืจืืืื ืืืืืืืื ืฉืขืืืืื ืืืื "ืกืื ืฉื ืงืกื". ืืืฉืจ ืชืชืืืื ืืกืคืืจ ืืืื ืืช ืืืจืืืืืืืช ืืืืืช, ืชืืื ืฉืกืงืจืืคืืื ืฉืขืืืจืื ืืงื ื ืืืื ืงืื ืคืืขืืื ืืื ืืืชืจ ืืงื ื ืืืื ืืืื.
ืืืฆื ืื, 2 ืืืื ืืขืืจื:
- PowerShell Runspaces - ืืืฉื ืืืืคืฉืจืช ืืืงืืื ืืช ืืืฆืืข ืชืืืืืื ืืฉืจืฉืืจืื ื ืคืจืืื;
- Get-View โ ืคืื ืงืฆืืืช PowerCLI ืืกืืกืืช, ืื ืืืื ืฉื Get-WMIObject ื-Windows. cmdlet ืื ืืื ื ืืืฉื ืืืืืืงืืื ืื ืืืืื ืืืฉืืืืช, ืืื ืืงืื ืืืืข ืืฆืืจื ืฉื ืืืืืืงื ืคืฉืื ืขื ืกืืื ื ืชืื ืื ืคืฉืืืื. ืืืงืจืื ืจืืื ืื ืืืฆื ืืืจ ืืืชืจ.
ืืืืจ ืืื, ืืืืจ ืืงืฆืจื ืขื ืื ืืื ืืืจืื ืืืืืืืช ืืฉืืืืฉ. ืืืื ื ื ืชื ืกืงืจืืคืืื ืกืคืฆืืคืืื ืื ืจืื ืืชื ืืื ืขืืื ืืื ืืืชืจ ืืืฉื ื. ืืืืช!
ืฉืื ืจืืฉืื: Runspace
ืื, Runspace ืืืืขื ืืขืืืื ืืงืืื ืฉื ืืฉืืืืช ืืืืฅ ืืืืืื ืืจืืฉื. ืืืืื, ืืชื ืืืื ืืืคืขืื ืชืืืื ืืืจ ืฉืืืื ืงืฆืช ืืืืจืื, ืืขืื ืืื'. ืื ืืกืงืจืืคื ืฉืื ืคืืขื ืชืื ืืกืคืจ ืืงืืช ืืฆืืจื ืืืื-ืืืื ืฉื ืืืืจืื, ืกืืืจ ืืื ืื ืฉืื ืชืืืงืง ื-Runspace. ืืื ืขืืืจ ืกืงืจืืคืืื ืืขืฉืจืืช ืืืคื ืืืืืืงืืื ืืฉ ืฆืืจื ืืื.
ืืชื ืืืื ืืืชืืื ืืืืื ืืื:
ืชืืืืช ืืฉืืืืฉ ื-PowerShell Runspaces: ืืืง 1
ืื ืืฉืืืืฉ ื-Runspace ื ืืชื:
- ืืืืจืืช ืขื ืืื ืืืืืช ืจืฉืืืช ืืคืงืืืืช ืืืืืฆืขืืช,
- ืืืฆืืข ืืงืืื ืฉื ืืฉืืืืช,
- ืึผึฐืึดืืืึผืช.
ืื ื ืืืืื ืืืืื ืืจื ื ืืืฉืจ Runspace ืขืืืจ:
"ืืืืืงืช ืืืกืื ืืื ืืื ืืืืืื ืืงืฉืื ืืืืชืจ ืืืขืงื ื-vSphere. ืืชืื vCenter, ืืชื ืื ืืืื ืคืฉืื ืืืืช ืืืจืืืช ืืืื VM ืฆืืจื ืืืชืจ ืืฉืืื ืืืกืื. ืืืจืื ืืืื, ืืชื ืืืื ืืืกืืฃ ืืช ืื ืชืื ืื ืืืื ืชืื ืืงืืช ืืืืืช ื- PowerShell.
ืื ื ืืืืืง ืกืงืจืืคื ืฉืืืคืฉืจ ืืื ืืื ืืขืจืืช VMware ืืืคืฉ ืืืืืจืืช ืืจืืื vCenter ืืืงืื ืจืฉืืื ืฉื VMs ืขื ื ืชืื ืื ืขื ืืฆืจืืื ืืืืืฆืขืช ืฉืืื.
ืืกืงืจืืคื ืืฉืชืืฉ ืืืจืืื ืจืืฆื ืฉื PowerShell ืืื ืืืคืฉืจ ืืื ืืืจื ESXi ืืืกืืฃ ืืืืข ืฆืจืืื ืืืืฉืืจื ื-VM ืฉืื ื-Runspace ื ืคืจื ืืืืืื ืืืืคื ืืืืื ืขื ืกืืื. ืื ืืืคืฉืจ ื-PowerShell ืืกืืืจ ืขืืืืืช ืืืืคื ืืืืื, ืืืงืื ืืขืืืจ ืืจื ืืืจืืื ืืืืืืช ืฉืื ืืื ืืฉืืื ืืช ืืงืฉืชื."ืืงืืจ:
ืืืฆื ืืืฆืื I/O ืฉื ืืืฉื ืืืจืืืืื ืืืื ืืืืื ืื ืฉื ESXi
ืืืงืจื ืฉืืืื, Runspace ืืืจ ืื ืฉืืืืฉื:
"ืื ื ืื ืกื ืืืชืื ืกืงืจืืคื ืฉืืืกืฃ ืืจืื ื ืชืื ืื ื-VM ืืืืชื ื ืชืื ืื ืืืฉืื ืืฉืฆืจืื. ืืืขืื ืืื ืฉืืฉ ืื ืืจืื ืืืฉืืจื VM ื-5-8 ืฉื ืืืช ืืืฉืงืขืืช ืืืืื ื ืืืช".
ืืื ืชืฆืืจื Get-View, ืืืื ื ืขืืืจ ืืื.
ืฉืื ืฉื ื: Get-View
ืืื ืืืืื ืืืืข Get-View ืฉืืืืฉื, ืืืื ืืืืืจ ืืืฆื ืขืืืืืช cmdlets ืืืืคื ืืืื.
ืืฉ ืฆืืจื ื-Cmdlets ืืื ืืืฉืื ืืืืข ืืฆืืจื ื ืืื ืืื ืฆืืจื ืืืืืื ืกืคืจื ืขืืจ ืฉื API ืืืืืฆืื ืืืืฉ ืืช ืืืืื ืืื. ืื ืฉืืืืื ืขืืจื ืืงื ืืื ืื ืฉืชืืื ืฉืืจืืช ืงืื, PowerShell ืืืคืฉืจ ืื ืืขืฉืืช ืืคืงืืื ืืืช. ืื ืื ื ืืฉืืืื ืขื ืื ืืืืช ืืื ืืืืืจืืช. ืืื ืงืกื ืืชืื ื-cmdlets ืขืฆืื: ืืืชื ืชืกืจืื, ืืื ืืจืื ื ืืืื ืืืชืจ, ืฉื ืืชื ืืืืื ืืืืืื ืืช ืฉื ืืืกืืจ ืืืืื ืฉืืืคืช ืืฉืืฉ.
ืืขืช, ืืฉื ืืฉืืืื ื-Get-View, ื ืืงื ืืช ื-cmdlet Get-VM: ืืื ื ืืืฉ ืืืืื ื ืืืืืจืืืืืืช ืืืืืืจ ืืืืืืงื ืืืจืื, ืืืืืจ, ืืื ืืฆืจืฃ ืืืื ืืืืืืงืืื ืงืฉืืจืื ืืืจืื: VMHost, Datastore ืืื'.
Get-View ืืืงืืื ืืื ื ืืืกืืฃ ืฉืื ืืืจ ืืืืชืจ ืืืืืืืงื ืืืืืืจ. ืืชืจ ืขื ืื, ืื ืืืคืฉืจ ืื ื ืืฆืืื ืืงืคืื ืืช ืืืื ืืืืข ืื ืื ื ืฆืจืืืื, ืื ืฉืืงื ืขื ืืืืืืงื ืืคืื. ื-Windows Server ืืืื ืื-Hyper-V ืืคืจื, ื-cmdlet Get-WMIObject ืืื ืื ืืืื ืืฉืืจ - ืืจืขืืื ืืื ืืืืืืื.
Get-View ืืื ื ื ืื ืขืืืจ ืคืขืืืืช ืฉืืจืชืืืช ืขื ืืืืืืงืืื ื ืงืืืชืืื. ืืื ืืฉืืืืืจ ืืืืคื ืืขืฉืจืืช ืืืคื ืืคืฆืื, ืืื ืืื ืืืืจ.
ืืชื ืืืื ืืงืจืื ืขืื ืืืืื VMware:
ืืืื ื-Get-View
ืขืืฉืื ืื ื ืืจืื ืื ืืื ืืืืฆืขืืช ืืงืจื ืืืืชื.
ืืชืืืช ืกืงืจืืคื ืืคืจืืงืช VM
ืืื ืืื ืขืืืช ืฉืื ืืืงืฉ ืืื ื ืืืฆืข ืืืคืืืืืืฆืื ืฉื ืืชืกืจืื ืฉืื. ืืืฉืืื ืืื ืฉืืจื ื ืคืืฆื: ืืฆื ืืช ืื ื-VMs ืขื ืคืจืืืจ 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
}
# ะะฐะปะตะต ะ ะฃะะะะ ะฟะฐััะธะผ ะฟะพะปััะตะฝะฝัะน ัะตะทัะปััะฐั
ืืื ืคืฉืื ืืืจืืจ ืืืืืื. ืืคืฉืจ ืืืชืื ืืช ืื ืชืื ืืื ืืงืืช ืขื ืืคืกืงืช ืงืคื. ืืืจื ืืช ืืกืื ืื ืืื ื ืืืจ.
ืืื ืืืื ื ืืืื ืืช ืืืื:
2 ืืงืืช 47 ืฉื ืืืช ืืืฉืจ ืืขืืืื ืืืขื 10 VMs. ืืื ืืก ืืื ืืืขืืจ ืืกื ื ืื ืืืฆืืจื ืืืืื ืืื ื ืฉื ืืชืืฆืืืช. ืืจืืจ ืฉืืชืกืจืื ืืืจืฉ ืืืคืืืืืืฆืื.
ืืจืืื ืจืืฆื ืื ืืจืืฉืื ืื ืืขืืจื ืืืฉืจ ืืชื ืฆืจืื ืืืฉืื ืื ืืื ืืช ืืืื ืืืจื ื-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 (ืืชืืืจ-VIServer ืขื ืืคืชื -NotDefault):
$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.
ืืืืืืจืืชื ืืื ืืืืงืื:
- ืื ื ืืงืืืื ืจืฉืืื ืฉื ืื ื-VMs.
- ืืืจืืื ืืงืืืืื ืื ืื ื ืืงืืืื cloud.uuid.
- ืื ื ืืืกืคืื ื ืชืื ืื ืืืจืืื ืืืืืืืงื ืืื.
- ืื ื ืืกื ื ืื ืืช ืืืืืืืงื ืขื ืืื ืงืืืืฅ ืืืชื ืืคื ืืขืจื ืฉื ืฉืื CloudUUID: ืืื ืฉืืื ืืกืคืจ ืืขืจืืื ืืืืืืืืื ืืืื ื-1 ืื ื-VMs ืฉืื ื ืืืคืฉืื.
ืืชืืฆืื ืืื, ืื ื ืืงืืืื ืืช ืืชืกืจืื:
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 ืืืคืจืืืจืื ืฉืืืขืืจื ืืืจื. ื ืฆื ืืช ืื!
ืื ื ืืืืืื ืืื:
55 ืฉื ืืืช. ืื ืืื ืืืชืจ, ืืื ืื ืขืืืื ืืืื ืืืืืช ืืืืจ ืืืชืจ.
ืืืื ื ืขืืืจ ืืืืืจืืช ืืฉื ืืื: GetView
ืืืื ืืืืืช ืื ืื ืืกืืจ.
ืืจืืฉ ืืืจืืฉืื ื, ื-cmdlet Get-VM ืืืงื ืืจืื ืืื ืืืืฆืืข.
ืฉื ืืช, ื-cmdlet Get-AdvancedOptions ืืืงื ืขืื ืืืชืจ ืืื.
ืืื ื ืชืืืื ืงืืื ืื ืขื ืืฉื ื.
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.
ืืืื ื ืชืงืฉืจ ืืืื ืืงื ืืขืชืืงื ืฉื ืืืกืืจื 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: ืืืืืจ ืืืื ืืื ืืืจื ืืงืืืื ืขื ืืขืืจื ืืืชืืืื ืืืื ืช ืืืืืจ. ืื ืืื ืขื ืืคืืช. ืืืคืืื ืื ืฉืืื ืื ืจืืืืื, ืืื ืืืืืฅ ืืืื.
ืืงืืจ: www.habr.com