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