เบเปเปเบเบปเบ เบซเบผเบทเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบนเปเปเบเบดเปเบเปเบเบเบฅเบฐเบเบปเบ VMware เปเบเบเปเปเบกเบฒเปเบเบทเปเบญเปเบฎเบฑเบเปเปเบฒเบเบตเปเบเบฐเบเบณเบงเบฑเบเปเบเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบ. เบกเบฑเบเบเบฑเบเปเบปเบเปเบฅเบตเปเบกเบเบปเปเบเบเปเบงเบเปเบชเบฑเปเบเบเบณเบชเบฑเปเบ, เบเบฒเบเบเบฑเปเบเบกเบฒ PowerShell เบซเบผเบท VMware PowerCLI.
เปเบซเปเปเบงเบปเปเบฒเบงเปเบฒเบเปเบฒเบเปเบเปเบเปเบฒเบเบดเบเปเบฒเบเบฒเบ PowerShell เปเบฅเบฑเบเบเปเบญเบเบเบงเปเบฒเบเบฒเบเปเบเบตเบเบเบปเบง ISE เปเบฅเบฐเปเบเป cmdlets เบกเบฒเบเบเบฐเบเบฒเบเบเบฒเบเปเบกเบเบนเบเบเบตเปเปเบฎเบฑเบเบงเบฝเบเปเบเบทเปเบญเบเบเบฒเบ "เบเบฒเบเบเบฐเปเบเบเบเบญเบ magic". เปเบกเบทเปเบญเบเปเบฒเบเปเบฅเบตเปเบกเบเบฑเบเปเบเบทเปเบญเบ virtual เปเบเบซเบผเบฒเบเบฎเปเบญเบ, เบเปเบฒเบเบเบฐเบเบปเบเปเบซเบฑเบเบงเปเบฒ scripts เบเบตเปเบเปเบงเบเบญเบญเบเปเบเบเบฐเบซเบเบฒเบเบเปเบญเบเปเบฅเปเบเบเปเบฒเบฅเบปเบเบขเปเบฒเบเปเบซเบฑเบเปเบเปเบเบฑเบเปเบเบเบฐเบซเบเบฒเบเปเบซเบเป.
เปเบเบเปเบฅเบฐเบเบตเบเบฑเปเบเบเปเบฒเบงเบเบตเป, 2 เปเบเบทเปเบญเบเบกเบทเบเบฐเบเปเบงเบเบญเบญเบ:
- PowerShell Runspaces - เบงเบดเบเบตเบเบฒเบเบเบตเปเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฐเบซเบเบฒเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฐเบเบงเบเบเบฒเบเปเบเบเบฐเบเบนเปเปเบเบเบเปเบฒเบเบซเบฒเบ;
- Get-View โ เบเบฑเบเบเบฑเบ PowerCLI เบเบทเปเบเบเบฒเบ, เบเบฒเบเบเบฝเบเบเบฝเบเบเบญเบ Get-WMIObject เปเบ Windows. cmdlet เบเบตเปเบเปเปเปเบเปเบเบถเบเบงเบฑเบเบเบธเบเบตเปเบกเบฒเบเปเบญเบกเบเบฑเบเบซเบเปเบงเบเบเบฒเบ, เปเบเปเปเบเปเบฎเบฑเบเบเปเปเบกเบนเบเปเบเบฎเบนเบเปเบเบเบเบญเบเบงเบฑเบเบเบธเบเปเบฒเบเบเบฒเบเบเบตเปเบกเบตเบเบฐเปเบเบเบเปเปเบกเบนเบเบเปเบฒเบเบเบฒเบ. เปเบเบซเบผเบฒเบเปเบเปเบฅเบฐเบเบตเบกเบฑเบเบญเบญเบเบกเบฒเปเบง.
เบเปเปเปเบ, เบเปเบญเบเบเบฐเปเบงเบปเปเบฒเบชเบฑเปเบเปเบเปเบฝเบงเบเบฑเบเปเบเปเบฅเบฐเปเบเบทเปเบญเบเบกเบทเปเบฅเบฐเบชเบฐเปเบเบเบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเป. เบเปเปเบซเปเบงเบดเปเบเบฒเบฐเบชเบฐเบเบดเบเบชเบฐเปเบเบฒเบฐเปเบฅเบฐเปเบเบดเปเบเปเบงเบฅเบฒเบเบตเปเบญเบฑเบเบซเบเบถเปเบเปเบฎเบฑเบเบงเบฝเบเบเบตเบเปเบงเบฒเบเบปเบงเบญเบทเปเบ. เปเบ!
เบเบฑเปเบเบเบญเบเบเปเบฒเบญเบดเบ: Runspace
เบเบฑเปเบเบเบฑเปเบ, Runspace เบเบทเบเบญเบญเบเปเบเบเบกเบฒเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบธเบเปเบเปเบเบเบฐเบซเบเบฒเบเบเบญเบเบงเบฝเบเบเบฒเบเบเบญเบเปเบกเบเบนเบเบเบปเปเบเบเป. เปเบเปเบเบญเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบตเบเบเบปเบงเบเบฐเบเบงเบเบเบฒเบเบญเบทเปเบเบเบตเปเบเบฐเบเบดเบเปเบเบดเบเบเบฒเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ, เปเบเปเบเบเปเบเบต, เปเบฅเบฐเบญเบทเปเบเป. เบเปเบฒเบชเบฐเบเบดเบเบเบญเบเบเปเบฒเบเปเบฅเปเบเปเบเบชเบญเบเบชเบฒเบกเบเบฒเบเบตเปเบฅเบฐเบเบดเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒ gigabyte, เบชเปเบงเบเบซเบผเบฒเบเบญเบฒเบเบเบฐเบเปเปเบเปเบญเบเบเบฒเบ Runspace. เปเบเปเบชเปเบฒเบฅเบฑเบ scripts เบชเปเบฒเบฅเบฑเบเบชเบดเบเบเบฑเบเบเบญเบเบงเบฑเบเบเบธเปเบกเปเบเบกเบตเบเบงเบฒเบกเบเปเบฒเปเบเบฑเบ.
เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบเบฎเบฝเบเบฎเบนเปเบเบตเปเบเบตเป:
เบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบเบณเปเบเป PowerShell Runspaces: เบเบฒเบเบเบต 1
เบเบฒเบเปเบเป Runspace เปเบซเปเบซเบเบฑเบ:
- เบเบงเบฒเบกเปเบงเปเบเบเบเบฒเบเบเปเบฒเบเบฑเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบเบเปเบฒเบชเบฑเปเบเบเบฐเบเบดเบเบฑเบ,
- เบเบฒเบโเบเบฐโเบเบดโเบเบฑเบโเบงเบฝเบโเบเบฒเบโเบเบฐโเบซเบเบฒเบโ,
- เบเบงเบฒเบกเบเบญเบเปเบ.
เบเบตเปเปเบกเปเบเบเบปเบงเบขเปเบฒเบเบเบฒเบเบญเบดเบเปเบเบตเปเบเบฑเบเปเบกเบทเปเบญ Runspace เบเปเบงเบ:
"เบเบฒเบเบเบฑเบเปเบเปเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเปเบเบฑเบเบฎเบฑเบเบชเบฒเปเบกเปเบเบซเบเบถเปเบเปเบเบเบปเบงเบเบตเปเบเบญเบเบเบตเปเบเบฒเบเบเบตเปเบชเบธเบเบเบตเปเบเบฐเบเบดเบเบเบฒเบกเปเบ vSphere. เบเบฒเบเปเบ vCenter, เบเปเบฒเบเบเปเปเบชเบฒเบกเบฒเบเบเบฝเบเปเบเปเปเบเบปเปเบฒเปเบเปเบเบดเปเบเบงเปเบฒ VM เปเบเบเปเบฒเบฅเบฑเบเปเบเปเบเบฑเบเบเบฐเบเบฒเบเบญเบเบเปเบญเบเปเบเบฑเบเบกเปเบฝเบเปเบเบตเปเบกเปเบเบตเบก. เปเบเบเบเบตเบเบตเปเปเบเบปเปเบฒเบชเบฒเบกเบฒเบเปเบเบฑเบเบเบณเบเปเปเบกเบนเบเบเบตเปเปเบเปเบเบฒเบเปเบเบเบฒเบเบต เบเบญเบเปเบ PowerShell.
เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเปเบเปเบเบเบฑเบเบชเบฐเบเบดเบเบเบตเปเบเบฐเบเปเบงเบเปเบซเปเบเบนเปเปเบเบดเปเบเปเบเบเบฅเบฐเบเบปเบ VMware เบชเบฒเบกเบฒเบเบเบปเปเบเบซเบฒเปเบเปเปเบงเปเบเบเบปเปเบง vCenter เปเบฅเบฐเปเบเปเบฎเบฑเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบ VM เบเบตเปเบกเบตเบเปเปเบกเบนเบเบเบฒเบเบเปเบฅเบดเปเบเบเปเบเบเบชเบฐเปเบฅเปเบเบเบญเบเบเบงเบเปเบเบปเบฒ.
เบชเบฐเบเบฃเบดเบเปเบเป PowerShell runspaces เปเบเบทเปเบญเปเบซเปเปเบเปเบฅเบฐเปเบเบปเปเบฒเบเบฒเบ ESXi เปเบเบฑเบเบเปเปเบกเบนเบเบเบฒเบเบเปเบฅเบดเปเบเบเบเบฒเบ VMs เบเบญเบเบเบปเบเปเบญเบเปเบ Runspace เปเบเบเบเปเบฒเบเบซเบฒเบเปเบฅเบฐเบฅเบฒเบเบเบฒเบเบเบฒเบเบชเปเบฒเปเบฅเบฑเบเปเบเบเบฑเบเบเบต. เบเบตเปเบญเบฐเบเบธเบเบฒเบเปเบซเป PowerShell เบเบดเบเบงเบฝเบเบเบฑเบเบเบต, เปเบเบเบเบตเปเบเบฐเปเบฎเบฑเบเบเปเปเบฒเบเปเบฒเบเปเบเบปเปเบฒเบเบฒเบเปเบฅเบฐเบฅเปเบเปเบฒเปเบซเปเปเบเปเบฅเบฐเบเบปเบเปเบฎเบฑเบเบชเปเบฒเปเบฅเบฑเบเบเปเบฒเบฎเปเบญเบเบเปเบเบญเบเบกเบฑเบ."เปเบซเบผเปเบเบเปเปเบกเบนเบ:
เบงเบดเบเบตเบเบฒเบเบชเบฐเปเบเบ Virtual Machine I/O เปเบ Dashboard ESXi
เปเบเบเปเบฅเบฐเบเบตเบเปเบฒเบเบฅเบธเปเบกเบเบตเป, Runspace เบเปเปเบกเบตเบเบฐเปเบซเบเบเบญเบตเบเบเปเปเปเบ:
"เบเปเบญเบเบเบฐเบเบฒเบเบฒเบกเบเบฝเบเบชเบฐเบเบดเบเบเบตเปเปเบเบฑเบเบเปเบฒเบเปเปเบกเบนเบเบเปเบฒเบเบงเบเบซเบฅเบฒเบเบเบฒเบ VM เปเบฅเบฐเบเบฝเบเบเปเปเบกเบนเบเปเบซเบกเปเปเบกเบทเปเบญเบเปเบฒเปเบเบฑเบ. เบเบฑเบเบซเบฒเปเบกเปเบเบงเปเบฒเบกเบต VM เบซเบผเบฒเบ, เปเบฅเบฐ 5-8 เบงเบดเบเบฒเบเบตเปเบกเปเบเปเบเปเปเบเปเบเบทเปเบญเบเบเบฝเบง."
เปเบซเบผเปเบเบเปเปเบกเบนเบ:
Multithreading PowerCLI เบเบฑเบ RunspacePool
เปเบเบเบตเปเบเบตเปเบเปเบฒเบเบเปเบญเบเบเบฒเบ Get-View, เปเบซเปเปเบฎเบปเบฒเบเปเบฒเบงเบเปเปเปเบ.
เบเบฑเปเบเบเบญเบเบเบตเบชเบญเบ: Get-View
เปเบเบทเปเบญเปเบเบปเปเบฒเปเบเบงเปเบฒเปเบเบฑเบเบซเบเบฑเบ Get-View เบเบถเปเบเปเบเบฑเบเบเบฐเปเบซเบเบ, เบกเบฑเบเบเบงเบเบเบฐเบเบทเปเบเปเบฒเบงเปเบฒ cmdlets เปเบฎเบฑเบเบงเบฝเบเปเบเบเบเบปเปเบงเปเบเปเบเบงเปเบ.
Cmdlets เปเบกเปเบเบเปเบฒเปเบเบฑเบเปเบเบทเปเบญเปเบซเปเปเบเปเบเปเปเบกเบนเบเบขเปเบฒเบเบชเบฐเบเบงเบเบชเบฐเบเบฒเบเปเบเบเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเบชเบถเบเบชเบฒเบเบทเปเบกเบญเปเบฒเบเบญเบตเบ API เปเบฅเบฐเบเบฑเบเบเบธเบเบฅเปเปเบเปเปเปเบ. เบชเบดเปเบโเบเบตเปโเปเบโเบชเบฐโเปเบซเบกโเบเปเบญเบโเบเบตเปโเปเบเปโเปเบเบฑเบโเบฎเปเบญเบโเบซเบผเบทโเบชเบญเบโเปเบเบงโเบเบญเบโเบฅเบฐโเบซเบฑเบโ, PowerShell เบญเบฐโเบเบธโเบเบฒเบโเปเบซเปโเบเปเบฒเบโเปเบฎเบฑเบโเปเบเปโเบเปเบงเบโเบซเบเบถเปเบโเบเปเบฒโเบชเบฑเปเบโ. เบเบงเบเปเบฎเบปเบฒเบเปเบฒเบเบเปเบฒเบเบงเบฒเบกเบชเบฐเบเบงเบเบชเบฐเบเบฒเบเบเบตเปเบเปเบงเบเบเบงเบฒเบกเปเบง. เบเปเปเบกเบต magic เบเบฒเบเปเบ cmdlets เบเบปเบเปเบญเบ: script เบเบฝเบงเบเบฑเบ, เปเบเปเปเบเบฅเบฐเบเบฑเบเบเปเปเบฒ, เบเบฝเบเปเบเบเบกเบทเบเปเบฒเบเบดเบเปเบฒเบเบฒเบเบเบญเบเปเบกเปเบเบปเบเบเบฒเบเบเปเบญเบเบกเบตเปเบเบเบญเบดเบเปเบเบ.
เบเบฝเบงเบเบตเป, เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฝเบเบเบฝเบเบเบฑเบ Get-View, เปเบซเปเปเบญเบปเบฒ Get-VM cmdlet: เบกเบฑเบเปเบเบปเปเบฒเปเบเบดเบเปเบเบทเปเบญเบ virtual เปเบฅเบฐเบชเบปเปเบเบเบทเบเบงเบฑเบเบเบธเบเบฐเบชเบปเบก, เบเบฑเปเบเปเบกเปเบ, เบกเบฑเบเปเบเบเบงเบฑเบเบเบธเบเบตเปเบเปเบฝเบงเบเปเบญเบเบญเบทเปเบเปเบเบฑเบเบกเบฑเบ: VMHost, Datastore, เปเบฅเบฐเบญเบทเปเบเป.
Get-View เปเบเบชเบฐเบเบฒเบเบเบตเปเบเบญเบเบกเบฑเบเบเปเปเปเบเปเปเบเบตเปเบกเบชเบดเปเบเบเบตเปเบเปเปเบเปเบฒเปเบเบฑเบเบเบฑเบเบงเบฑเบเบเบธเบเบตเปเบชเบปเปเบเบเบทเบ. เบเบดเปเบเปเบเบเบงเปเบฒเบเบฑเปเบ, เบกเบฑเบเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบเบปเบเบขเปเบฒเบเปเบเบฑเปเบกเบเบงเบเบเปเบฝเบงเบเบฑเบเบเปเปเบกเบนเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบ, เปเบเบดเปเบเบเบฐเปเบฎเบฑเบเปเบซเปเบงเบฑเบเบเบธเบเบปเบเบเบฐเบฅเบดเบเบเปเบฒเบเบเบถเปเบ. เปเบ Windows Server เปเบเบเบเบปเปเบงเปเบเปเบฅเบฐเปเบ Hyper-V เปเบเบเบชเบฐเปเบเบฒเบฐ, Get-WMIObject cmdlet เปเบกเปเบเบเบฒเบเบเบฝเบเบเบฝเบเปเบเบเบเบปเบ - เบเบงเบฒเบกเบเบดเบเปเบกเปเบเบเบทเบเบฑเบ.
Get-View เปเบกเปเบเบเปเปเบชเบฐเบเบงเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบปเบเบเบฐเบเบดเบเปเบฝเบงเบเบฑเบเบงเบฑเบเบเบธเบเบธเบ. โเปเบเปโเปเบกเบทเปเบญโเปเบงเบปเปเบฒโเปเบเบดเบโเบงเบฑเบเบเบธโเบเบฑเบโเปเบเบฑเบโเบเบฑเบโเปเบทเปเบโเบญเบฑเบโเบเปโเบเปเปโเบกเบตโเบฅเบฒเบเบฒ.
เบเปเบฒเบเบชเบฒเบกเบฒเบเบญเปเบฒเบเปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบ blog VMware:
เปเบเบฐเบเบณเบเปเบฝเบงเบเบฑเบ Get-View
เบเบญเบเบเบตเปเบเปเบญเบเบเบฐเบชเบฐเปเบเบเปเบซเปเปเบเบปเปเบฒเปเบซเบฑเบเบเบธเบเบขเปเบฒเบเปเบเบเปเบเปเบเปเบฅเบฐเบเบตเบเบตเปเปเบเปเบเบดเบ.
เบเบฒเบเบเบฝเบเบชเบฐเบเบฃเบดเบเปเบเบทเปเบญเบเบปเบเปเบฅเบตเบเบเบฒเบเปเบซเบผเบ VM
เบกเบทเปเบซเบเบถเปเบเปเบเบทเปเบญเบเบฎเปเบงเบกเบเบฒเบเบเบญเบเบเปเบญเบเปเบเปเบเปเปเบซเปเบเปเบญเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเบชเบฐเบเบดเบเบเบญเบเบฅเบฒเบง. เบงเบฝเบเบเบฒเบเปเบกเปเบเปเบเบฑเบเบเบปเบเบเบฐเบเบดเบเบปเปเบงเปเบ: เบเบญเบเบซเบฒ VMs เบเบฑเบเบซเบกเบปเบเบเบตเปเบกเบตเบเบฒเบฅเบฒเบกเบดเปเบเบต cloud.uuid เบเปเปเบฒเบเบฑเบ (เปเบกเปเบ, เบเบตเปเปเบเบฑเบเปเบเปเบเปเปเบเปเบงเบฅเบฒเบเบตเป cloning VM เปเบ vCloud Director).
เบเบฒเบเปเบเปเปเบเบเบตเปเบเบฑเบเปเบเบเบขเบนเปเปเบเปเบเปเบกเปเบ:
- เปเบญเบปเบฒเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบ VMs เบเบฑเบเบซเบกเบปเบ.
- เบงเบดเปเบเบฒเบฐเบฅเบฒเบเบเบทเปเบเบฒเบเบงเบดเบเบต.
เบชเบฐเบเบฑเบเบเบปเปเบเบชเบฐเบเบฑเบเปเบกเปเบ script เบเปเบฒเบเบเบฒเบเบเบตเป:
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
}
# ะะฐะปะตะต ะ ะฃะะะะ ะฟะฐััะธะผ ะฟะพะปััะตะฝะฝัะน ัะตะทัะปััะฐั
เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบเบเปเบฒเบเบเบฒเบเบเบตเปเบชเบธเบเปเบฅเบฐเบเบฐเปเบเปเบ. เบกเบฑเบเบชเบฒเบกเบฒเบเบเบฝเบเปเบเปเปเบเบชเบญเบเบชเบฒเบกเบเบฒเบเบตเบเปเบงเบเบเบฒเบเบเบฑเบเบเปเบญเบเบเบฒเปเบ. screw เบชเบธเบเบเบฒเบเบเบฑเปเบเบเบญเบเปเบฅเบฐเบกเบฑเบเบชเปเบฒเปเบฅเบฑเบ.
เปเบเปเปเบซเปเบงเบฑเบเปเบเบเปเบงเบฅเบฒ:
2 เบเบฒเบเบต 47 เบงเบดเบเบฒเบเบต เปเบกเบทเปเบญเบเบฐเบกเบงเบเบเบปเบเปเบเบทเบญเบ 10k VMs. เปเบเบเบฑเบเปเบกเปเบเบเปเปเบกเบตเบเบปเบงเบเบญเบ เปเบฅเบฐเบเบงเบฒเบกเบเปเบญเบเบเบฒเบเบเบฑเบเบฎเบฝเบเบเบปเบเปเบเปเบฎเบฑเบเบเปเบงเบเบเบปเบเปเบญเบ. เปเบเปเบเบญเบ, script เบฎเบฝเบเบฎเปเบญเบเปเบซเปเบกเบตเบเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบ.
Runspaces เปเบเบฑเบเบเบนเปเบเบณเบญเบดเบเบเบตเปเปเบเบปเปเบฒเบกเบฒเบเปเบงเบเบเบตเบงเบดเบ เปเบกเบทเปเบญเบเปเบฒเบเบเปเบญเบเบเบฒเบเบฎเบฑเบเปเบญเบปเบฒ host metrics เบเบฒเบ vCenter เบเปเบญเบกเปเบเบฑเบ เบซเบผเบทเบเปเบญเบเบเบฒเบเบเบฐเบกเบงเบเบเบปเบเบงเบฑเบเบเบธเบซเบผเบฒเบเบชเบดเบเบเบฑเบเบญเบฑเบ. เปเบซเปเปเบฎเบปเบฒเปเบเบดเปเบเบงเปเบฒเบงเบดเบเบตเบเบฒเบเบเบตเปเปเบญเบปเบฒเบกเบฒเปเบซเปเบซเบเบฑเบ.
เปเบเบตเบเบเบงเบฒเบกเปเบงเบเบณเบญเบดเบ: PowerShell Runspaces
เบชเบดเปเบเบเปเบฒเบญเบดเบเบเบตเปเบขเบนเปเปเบเปเบเบชเปเบฒเบฅเบฑเบเบชเบฐเบเบดเบเบเบตเปเปเบกเปเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบ loop เบเปเปเปเบเปเบเบฒเบกเบฅเปเบฒเบเบฑเบ, เปเบเปเปเบเบเบฐเบเบนเปเบเบฐเบซเบเบฒเบ, เปเบเบฑเบเบเปเบฒเบเปเปเบกเบนเบเบเบฑเบเบซเบกเบปเบเปเบเบปเปเบฒเปเบเปเบเบงเบฑเบเบเบธเบซเบเบถเปเบเปเบฅเบฐเบเบฒเบเบเบฑเปเบเบเบญเบเบกเบฑเบ.
เปเบเปเบกเบตเบเบฑเบเบซเบฒ: 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.
เบชเบนเบเบเบฒเบเบเบดเบเปเบฅเปเบกเบตเบเบฑเปเบเบเบตเป:
- เบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบ VMs เบเบฑเบเบซเบกเบปเบ.
- เปเบเบเบฐเปเบชเบเบฐเบซเบเบฒเบเบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบ cloud.uuid.
- เบเบงเบเปเบฎเบปเบฒเปเบเบฑเบเบเปเบฒเบเปเปเบกเบนเบเบเบฒเบเบชเบฒเบเบเปเปเบฒเปเบเบปเปเบฒเปเบเปเบเบงเบฑเบเบเบธเบเบฝเบง.
- เบเบงเบเปเบฎเบปเบฒเบเบฑเปเบเบเบญเบเบงเบฑเบเบเบธเปเบเบเบเบฒเบเบเบฑเบเบเบธเปเบกเปเบเบเบเปเบฒเบเบญเบเบเบฒเบเบชเบฐเบซเบเบฒเบก CloudUUID: เบเบนเปเบเบตเปเบเปเบฒเบเบงเบเบเปเบฒเบเบตเปเปเบเบฑเบเปเบญเบเบฐเบฅเบฑเบเบซเบผเบฒเบเบเปเบงเบฒ 1 เปเบกเปเบ VM เบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบฅเบฑเบเบเบญเบเบซเบฒ.
เบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบ script:
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 เปเบเปเปเบงเบฅเบฒเบเบปเบเปเบเบทเปเบญเบเบฐเบเบดเบเบฑเบ.
เบญเบฑเบเบเบตเบชเบญเบ, cmdlet Get-AdvancedOptions เปเบเปเปเบงเบฅเบฒเบเบปเบเบเบงเปเบฒเบเบตเปเบเบฐเบชเปเบฒเปเบฅเบฑเบ.
เปเบซเปเบเบฑเบเบเบฒเบเบเบฑเบเบญเบฑเบเบเบตเบชเบญเบเบเปเบญเบ.
Get-AdvancedOptions เปเบกเปเบเบชเบฐเบเบงเบเบชเปเบฒเบฅเบฑเบเบงเบฑเบเบเบธ VM เบชเปเบงเบเบเบธเบเบเบปเบ, เปเบเป clumsy เบซเบผเบฒเบเปเบเปเบงเบฅเบฒเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบงเบฑเบเบเบธเบเปเบฒเบเบงเบเบซเบผเบฒเบ. เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบเปเบฎเบฑเบเบเปเปเบกเบนเบเบเบฝเบงเบเบฑเบเบเบฒเบเบงเบฑเบเบเบธ virtual machine เบเบปเบงเบเบญเบเบกเบฑเบเปเบญเบ (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 เบเบฝเบงเบเบตเปเปเบเบดเปเบเบเบทเบงเปเบฒเบเบฐเบเบฒเบเปเบเบตเบเบเปเบญเบเบงเปเบฒเบเปเปเบกเบตเบเบงเบฒเบกเบเปเบญเบเบเบฒเบเบเบตเปเบเบฐเบเบฐเบซเบเบฒเบเบเบฑเบเบงเบฝเบเบเบฒเบเบเบตเปเบเปเบฒเปเปเบเบเบปเปเบงเบเบฐเบเบนเป 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 เบงเบดเบเบฒเบเบต เบชเปเบฒเบฅเบฑเบเปเบเบทเบญเบ 10k เบงเบฑเบเบเบธเบเบตเปเบกเบตเบเบฒเบเบเบฑเปเบเบเบญเบเปเบเบเปเบเบทเปเบญเบเปเบเบเบตเปเบเปเบญเบเบเบฒเบ. เบเบดเปเบเปเบซเบเป!
เปเบเบเบเบตเปเบเบฐเปเบเบฑเบเบเบฒเบเบชเบฐเบซเบฅเบธเบเปเบเป
เบเบปเบเปเบเปเบฎเบฑเบเบเบตเปเบเบญเบกเบฎเบฑเบเปเบเปเปเบเบเบเบปเบเปเบกเปเบเบเบถเปเบเบเบฑเบเบเบฒเบเปเบฅเบทเบญเบเบเบญเบเปเบเบทเปเบญเบเบกเบท. เบกเบฑเบเบกเบฑเบเบเบฐเปเบเบฑเบเบเบฒเบเบเบฒเบเบเบตเปเบเบฐเปเบงเบปเปเบฒเปเบซเปเปเบเปเบเบญเบเบงเปเบฒเบชเบดเปเบเบเบตเปเปเบเปเบเบญเบเบเบงเบเบเบฐเบเบทเบเปเบฅเบทเบญเบเปเบเบทเปเบญเบเบฑเบเบฅเบธเบกเบฑเบ. เปเบเปเบฅเบฐเบงเบดเบเบตเบเบฒเบเบเบตเปเบฅเบฐเบเบธเปเบงเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฅเบฑเปเบเบชเบฐเบเบดเบเปเบกเปเบเบเบตเบขเบนเปเปเบเบเบญเบเปเบเบเบเปเบฒเบเบฑเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเปเบเบญเบเบกเบฑเบ. เบเปเบฒเบเบฐเปเบเบปเปเบฒเบซเบงเบฑเบเบงเปเบฒเบเบปเบเบเบงเบฒเบกเบเบตเปเบเบฐเบเปเบงเบเปเบซเปเบเปเบฒเบเปเบเบงเบฝเบเบเบฒเบเบเบตเปเบกเบตเบเบงเบฒเบกเบซเบเบธเปเบเบเบฒเบเปเบเบเบฒเบเปเบเบปเปเบฒเปเบเบเบทเปเบเบเบฒเบเบเบญเบเบเบฐเบเบงเบเบเบฒเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเปเบฅเบฐเบเบฒเบเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเปเบเปเบเบเบชเปเบฒเบเบเบทเปเบเบเบฒเบเบเบญเบเบเปเบฒเบ.
PS: เบเบนเปเบเบฝเบเบเปเบเบญเบเปเบเบชเบฐเบกเบฒเบเบดเบเบเบธเบกเบเบปเบเบเบฑเบเบซเบกเบปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบงเบเปเบซเบผเบทเบญเปเบฅเบฐเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบเบญเบเบเบงเบเปเบเบปเบฒเปเบเบเบฒเบเบเบฐเบเบฝเบกเบเบปเบเบเบงเบฒเบก. เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบนเปเบเบตเปเบกเบต paws. เปเบฅเบฐโเปเบเบดเบโเปเบกเปเบโเบงเปเบฒโเบเบนเปโเบเบตเปโเบเปเปโเบกเบตโเบเบฒโ, เปเบเบฑเปเบโ: boa constrictorโ.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com