แแแ แ แแฃ แแแแแ, แแแแแกแแแแ แ VMware แกแแกแขแแแแก แแแแแแแกแขแ แแขแแ แ แแแแแก แ แฃแขแแแฃแแ แแแแชแแแแแแก แแแขแแแแขแแแแชแแแกแแแแก. แแก แงแแแแแคแแ แ แแฌแงแแแ แแ แซแแแแแแก แฎแแแแ, แจแแแแแ แแแแแก PowerShell แแ VMware PowerCLI.
แแแฅแแแ, แแฅแแแ แแแแฃแคแแแ PowerShell-แก แชแแขแ แฃแคแ แ แจแแ แก, แแแแ แ ISE-แแก แแแจแแแแ แแ แกแขแแแแแ แขแฃแแ cmdlet-แแแแก แแแแแงแแแแแ แแแแฃแแแแแแแ, แ แแแแแแแช แแฃแจแแแแแ โแ แแฆแแช แแแแแแกโ แแแแ. แ แแแแกแแช แแแ แขแฃแแแฃแ แ แแแแฅแแแแแแก แแกแแแแ แแแแแแแก แแแแฌแงแแแ, แแฆแแแแฉแแแ, แ แแ แกแแ แแแขแแแ, แ แแแแแแแช แฎแแแก แฃแฌแงแแแแ แแชแแ แ แแแกแจแขแแแแแก, แจแแกแแแฉแแแแแ แแแแ แแฃแจแแแแก แแแแ แแแกแจแขแแแแ.
แแ แกแแขแฃแแชแแแจแ 2 แแแกแขแ แฃแแแแขแ แแแแแฎแแแ แแแแ:
- PowerShell Runspaces โ แแแแแแแ, แ แแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แแแ แแแแแฃแ แแ แแแแฎแแแแแ แแ แแชแแกแแแแก แจแแกแ แฃแแแแ แชแแแแแฃแ แซแแคแแแจแ;
- Get-View โ แซแแ แแแแแ PowerCLI แคแฃแแฅแชแแ, Get-WMIObject-แแก แแแแแแแ Windows-แจแ. แแก cmdlet แแ แแแแแแแก แแแแแฎแแแ แแแแแฅแขแแแก, แแแแ แแ แแฆแแแก แแแคแแ แแแชแแแก แแแ แขแแแ แแแแแฅแขแแก แกแแฎแแ แแแแแชแแแแ แแแ แขแแแ แขแแแแแแ. แฎแจแแ แจแแแแฎแแแแแจแ แฃแคแ แ แกแฌแ แแคแแ แแแแแแแก.
แจแแแแแ, แแแแแแ แแแกแแฃแแ แแ แแแแแแฃแ แฎแแแกแแฌแงแแแ แแ แแแฉแแแแแ แแแแแงแแแแแแก แแแแแแแแแแก. แแแแแ แแแแแแแแแแแแ แแแแแ แแขแฃแแ แกแแ แแแขแแแ แแ แแแแฎแแ, แ แแแแก แแฃแจแแแแก แแ แแ แแแแ แแแ แฃแแแแแกแ. แฌแแแ!
แแแ แแแแ แแขแแแ: Runspace
แแกแ แ แแ, Runspace แแแแแฃแแแแแแแ แซแแ แแแแแ แแแแฃแแแก แแแ แแ แแแแชแแแแแแก แแแ แแแแแฃแ แ แแแแฃแจแแแแแแกแแแแก. แ แ แแฅแแ แฃแแแ, แจแแแแซแแแแ แแแแฌแงแแ แกแฎแแ แแ แแชแแกแ, แ แแแแแแช แจแแญแแแก แแแ แแแแฃแ แแแฎแกแแแ แแแแก, แแ แแชแแกแแ แก แแ แ.แจ. แแฃ แแฅแแแแ แกแแ แแแขแ แ แแแแแแแแ แฌแฃแแจแ แแแฃแจแแแแแก แแ แแแแฎแแแ แก แแแฎแกแแแ แแแแก แแ แ แแแแแแแแขแก, แกแแแแ แแฃแแแ Runspace แแ แแแแญแแ แแแแแ. แแแแ แแ แแแแแแแกแแแแ แแแแแฅแขแแก แกแแ แแแขแแแแกแแแแก แแก แกแแญแแ แแ.
แจแแแแซแแแแ แแแแฌแงแแ แกแฌแแแแ แแฅ:
PowerShell Runspaces-แแก แแแแแงแแแแแแก แแแกแแฌแงแแกแ: แแแฌแแแ 1
แ แแก แแซแแแแ Runspace-แแก แแแแแงแแแแแ:
- แกแแฉแฅแแ แ แจแแกแ แฃแแแแฃแแ แแ แซแแแแแแแแก แกแแแก แจแแแฆแฃแแแแ,
- แแแแแแแแแแแก แแแ แแแแแฃแ แแ แจแแกแ แฃแแแแ,
- แฃแกแแคแ แแฎแแแแ.
แแฅ แแ แแก แแแแแแแแ แแแขแแ แแแขแแแแ, แ แแแแกแแช Runspace แแฎแแแ แแแ:
โแกแแชแแแแก แฌแแแแแฆแแแแแแแ แแ แแก vSphere-แจแ แแแแแงแฃแ แแก แแแแแแแ แแ แ-แแ แแ แงแแแแแแ แ แแฃแแ แแแขแ แแแ. vCenter-แแก แจแแแแแ, แแฅแแแ แแ แจแแแแซแแแแ แฃแแ แแแแ แจแแฎแแแแแ แแ แแแฎแแ แ แแแแแ VM แแแแฎแแแ แก แแแข แจแแแแฎแแแก แ แแกแฃแ แกแก. แกแแแแแแแแ แแ, แแฅแแแ แจแแแแซแแแแ แจแแแแ แแแแ แแก แแแแแชแแแแแ แฌแฃแแแแจแ PowerShell-แแก แฌแงแแแแแแ.
แแ แแแแแแแแ แแ แกแแ แแแขแก, แ แแแแแแช VMware แกแแกแขแแแแก แแแแแแแกแขแ แแขแแ แแแก แกแแจแฃแแแแแแก แแแกแชแแแก แกแฌแ แแคแแ แแแซแแแแแ vCenter-แจแ แแ แแแแฆแแ VM-แแแแก แกแแ แแแแ แกแแจแฃแแแ แแแฎแแแ แแแแก แแแแแชแแแแแแ.
แกแแ แแแขแ แแงแแแแแก PowerShell-แแก แแแ แกแแแฅแขแแแแแก, แ แแแ แแแแแแฃแ ESXi แฐแแกแขแก แจแแแแ แแแแก แแแฎแแแ แแแแก แแแคแแ แแแชแแ แกแแแฃแแแ แ VM-แแแแแแ แชแแแแ Runspace-แจแ แแ แแแฃแงแแแแแแแแ แจแแแขแงแแแแแแก แแแกแ แฃแแแแแก แจแแกแแฎแแ. แแก แกแแจแฃแแแแแแก แแซแแแแก PowerShell-แก แแแฃแงแแแแแแแ แแแฎแฃแ แแก แกแแแฃแจแแแแแ, แแแชแแแแ แแแแกแ, แ แแ แแแแแแแ แแก แฐแแกแขแแแแก แแแจแแแแแแ แแ แแแแแแแแก แแแแแแฃแแ แแแแแแแแก แแแแฎแแแแแก.โแฌแงแแ แ:
แ แแแแ แแแฉแแแแแ แแแ แขแฃแแแฃแ แ แแแแฅแแแ I/O ESXi Dashboard-แแ
แฅแแแแแ แแแชแแแฃแ แจแแแแฎแแแแแจแ, Runspace แแฆแแ แแ แแก แกแแกแแ แแแแแ:
โแแชแแแแแ แแแแฌแแ แ แกแแ แแแขแ, แ แแแแแแช แแแ แแแแแก แฃแแแ แแ แแแแแชแแแก VM-แแแ แแ แกแแญแแ แแแแแก แจแแแแฎแแแแแจแ แแฎแแ แแแแแชแแแแแก แฌแแ แก. แแ แแแแแแ แแก แแ แแก, แ แแ VM-แแแ แกแแแแแแ แแแแ แแ แแ 5-8 แฌแแแ แแฎแแ แฏแแแ แแ แ แแแแฅแแแแแโ.
แฌแงแแ แ:
Multithreading PowerCLI RunspacePool-แแ
แแฅ แแแแญแแ แแแแแ Get-View, แแแแแ แแแแแแแแแ แแแกแแ.
แแแแ แ แแขแแแ: Get-View
แแแแก แแแกแแแแแแ, แแฃ แ แแขแแ แแ แแก Get-View แกแแกแแ แแแแแ, แฃแแแ แแแแฎแกแแแแแก, แแฃ แ แแแแ แแฃแจแแแแก cmdlets แแแแแแแ.
Cmdlet-แแแ แกแแญแแ แแ แแแคแแ แแแชแแแก แแแกแแฎแแ แฎแแแแแ แแแกแแแแแแแแแ API แกแแชแแแแแ แ แฌแแแแแแแก แจแแกแฌแแแแแกแ แแ แจแแแแแแ แแแ แแแแก แฎแแแแฎแแ แแแแแแแแแแแก แแแ แแจแ. แ แแช แซแแแ แแ แแจแ แกแญแแ แแแแแแ แแแแแก แแก แแ แแ แกแขแ แแฅแแแก, PowerShell แกแแจแฃแแแแแแก แแแซแแแแ แแแแแแแแ แแ แแ แแ แซแแแแแ. แฉแแแ แแแฎแแแ แแ แแแแคแแ แขแก แกแแฉแฅแแ แแ. แแแแแ แกแแแแแขแแแแก แจแแแแแ แแ แแ แแก แแแแแ: แแแแแ แกแแ แแแขแ, แแแแ แแ แฃแคแ แ แแแแแ แแแแแแ, แแแฌแแ แแแ แแแแแแ แแแแแแแแก แแกแขแแขแแก แแแแแชแแแแ แฎแแแแแแ.
แแฎแแ, Get-View-แแแ แจแแกแแแแ แแแแแ, แแแแฆแแ Get-VM cmdlet: แแก แฌแแแแแ แแแ แขแฃแแแฃแ แแแแฅแแแแก แแ แแแ แฃแแแแก แแแแแแแแขแฃแ แแแแแฅแขแก, แแแฃ แแแแญแแแก แแแก แกแฎแแ แแแแแแจแแ แแแฃแ แแแแแฅแขแแแก: VMHost, Datastore แแ แ.แจ.
Get-View แแแแแก แแแแแแแ แแ แแแแขแแแก แ แแแแ แแแแแแขแก แแแแ แฃแแแแฃแ แแแแแฅแขแก. แฃแคแ แ แแแขแแช, แแก แกแแจแฃแแแแแแก แแแแซแแแแก แแแแชแ แแ แแแแแกแแแฆแแ แแ แ แ แแแคแแ แแแชแแ แแแญแแ แแแแ, แ แแช แแแแแแแแแแก แแแแแแแแแ แแแแแฅแขแก. แแแแแแแ Windows Server-แจแ แแ แแแ แซแแ Hyper-V-แจแ Get-WMIObject cmdlet แแแ แแแแแ แ แแแแแแแแ - แแแแ แแฃแกแขแแ แแแแแแ.
Get-View แแแฃแฎแแ แฎแแแแแแ แฌแแ แขแแแแแแ แแแแแฅแขแแแแ แ แฃแขแแแฃแแ แแแแ แแชแแแแแกแแแแก. แแแแ แแ แ แแแแกแแช แกแแฅแแ แแฎแแแ แแแแกแแแแ แแ แแแ แแแแกแแแแ แแแแแฅแขแก, แแแก แคแแกแ แแ แแฅแแก.
แแแขแ แจแแแแซแแแแ แฌแแแแแแฎแแ VMware แแแแแแ:
Get-View-แแก แจแแกแแแแแ
แแฎแแ แแ แแแฉแแแแแแ แงแแแแแคแแ แก แ แแแแฃแ แ แฅแแแกแแก แแแแแงแแแแแแ.
แกแแ แแแขแแก แแแฌแแ แ VM-แแก แแแแขแแแ แแแแกแแแแก
แแ แ แแฆแแก แฉแแแแ แแแแแแแ แแแฎแแแ แแแกแ แกแชแแแแ แแก แแแขแแแแแแชแแ. แแแแแแแแ แฉแแแฃแแแแ แแแ แ แฃแขแแแแ: แแแแแแ แงแแแแ VM แแฃแแแแแแขแ cloud.uuid แแแ แแแแขแ แแ (แแแแฎ, แแก แจแแกแแซแแแแแแแ VM-แแก แแแแแแ แแแแกแแก vCloud Director-แจแ).
แแจแแแ แ แแแแแกแแแแแ, แ แแแแแแช แแแฎแกแแแแแแ แแ แแก:
- แแแแฆแแ แงแแแแ VM-แแก แกแแ.
- แ แแแแ แแ แแแแแแแแแแ แกแแ.
แแ แแแแแแแฃแ แ แแแ แกแแ แแงแ แแก แแแ แขแแแ แกแแ แแแขแ:
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 แฌแแแ แแแแฅแแแก 10k VM-แแก แแแแฃแจแแแแแแกแแก. แแแแฃแกแ แแ แแก แคแแแขแ แแแแก แแ แแ แกแแแแแ แแ แจแแแแแแแแก แฎแแแแ แแแฎแแ แแกแฎแแแแก แแฃแชแแแแแแแแ. แชแฎแแแแ, แกแแ แแแขแ แแแแแฎแแแก แแแขแแแแแแชแแแก.
Runspaces แแแ แแแแแ, แแแแช แกแแแแจแแแแแจแ แแแแแก, แ แแแแกแแช แแฅแแแ แแญแแ แแแแแ แแ แแแ แแฃแแแ แฐแแกแขแแก แแแขแ แแแแก แแแฆแแแ 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 แแแกแแฆแแแแ):
$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-แแก แแแจแแแแแแ.
แแแแแ แแแแ แจแแแแแแแ:
- แฉแแแ แแแฆแแแ แงแแแแ VM-แแก แฉแแแแแแแแแแก.
- แแแ แแแแแฃแ แแแแแแแแจแ แแแฆแแแ แฆแ แฃแแแแก.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-แแก แแ แแ แแแ แแแแขแ แแแแก แฉแแแแชแแแแแแ, แ แแแแแแแช แแแแแแชแแแ แกแขแ แแแแแแก. แแแแแแงแแแ แแก!
แฉแแแ แแแแแแแ แแ แแก:
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, แแแแ แแ แแก แแแแ แฏแแ แฃแคแ แ แกแฌแ แแคแแ แแฃแจแแแแก.
แแฎแแ แแแแฆแแ-VM. แแก แแ แแ แแก แกแฌแ แแคแ, แ แแแแแ แกแแฅแแ แแฅแแก แ แแฃแ แแแแแฅแขแแแก. แฉแแแแแ แแแแแแฃแ แ แแแแฎแแ: แ แแขแแ แแแญแแ แแแแ แแ แจแแแแฎแแแแแจแ แแแแแขแแแแแ แแแคแแ แแแชแแ แแ แแแแแ แแแแ PSOแแแแแฅแขแ, แ แแชแ แฃแแ แแแแ แแแญแแ แแแแ VM-แแก แกแแฎแแแ, แแแกแ แแแแแแแ แแแแ แแ แกแแฎแแคแแแ แแขแ แแแฃแขแแก แแแแจแแแแแแแ?
แแแ แแ แแแแกแ, แกแแ แแแขแแแแ แแแแฆแแแฃแแแ แแแแ แแแแแแ Get-AdvancedOptions-แแก แกแแฎแแ. Runspace Pools-แแก แแแแแงแแแแแ แแฎแแ แแแแแแขแแ แแแแแแงแฃแ แแแ, แ แแแแแ แกแแกแแแก แแแแแชแแแแกแแก แแฆแแ แแ แแก แกแแญแแ แ แแแแ แแแแชแแแแก แแแ แแแแแแแแแ squat แซแแคแแแจแ. แแแกแขแ แฃแแแแขแ แแแ แแแ, แแแแ แแ แแ แ แแ แจแแแแฎแแแแแกแแแแก.
แแแแแ แจแแแฎแแแแ 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 แฌแแแ แแแแฅแแแก 10 แแแแกแ แแแแแฅแขแแกแแแแก แกแแกแฃแ แแแแ แแแ แแแแ แแแคแแแขแแ แแ. แแแแ!
แแแแก แแแชแแแแ, แ แแ แแแกแแแแ
แแแกแแฆแแแ แจแแแแแ แแแ แแแแแ แแแแแแแแแแฃแแแ แฎแแแกแแฌแงแแก แแ แฉแแแแแแ. แฎแจแแ แแ แซแแแแแ แแฃแกแขแแ แแแแก แแฅแแ, แแฃ แ แ แฃแแแ แแแ แฉแแแก แแแก แแแกแแฆแฌแแแแ. แกแแ แแแขแแแแก แแแฉแฅแแ แแแแก แแแแแแฃแแ แฉแแแแแแแแแ แแแแแแ แแแ แแแ แแแกแ แแแแแงแแแแแแก แกแแแฆแแ แแแจแ. แแแแแแแแแแ, แ แแ แแก แกแขแแขแแ แแแแแฎแแแ แแแ แ แแฃแ แแแแชแแแแจแ แแฅแแแแ แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แแ แแชแแกแแก แแแขแแแแขแแแแชแแแกแ แแ แแแขแแแแแแชแแแก แกแแคแฃแซแแแแแแก แแแแแแแจแ.
PS: แแแขแแ แ แแแแแแแแก แฃแฎแแแก แกแแแแแแแแแแแก แงแแแแ แฌแแแ แก แกแขแแขแแแก แแแแแแแแแแจแ แแแฌแแฃแแ แแแฎแแแ แแแแกแ แแ แแฎแแ แแแญแแ แแกแแแแก. แแฃแแแแช แแแแแแแ. แแ แแแแแช แแ, แแแกแแช แคแแฎแแแ แแ แแฅแแก, แ แแแแ แช แแแ แแแแกแขแ แแฅแขแแ แ.
แฌแงแแ แ: www.habr.com