เปเบเบปเปเบฒ
เบชเบฐโเบเบฒเบโเบเบตโเบเบญเบโเบชเบงเบฒเบ. เบชเปเบฒเบฅเบฑเบเปเบเบดเปเบเบซเบเบถเปเบเบเบตเปเบเบเบฑเบเบเบธเบเบฑเบเบเบงเบเปเบฎเบปเบฒเปเบเปเบเปเบฒเปเบเบตเบเบเบฒเบ script (เบซเบผเบทเปเบเบเบเบตเปเบเบฐเปเบเบฑเบเบเบธเบเบเบญเบ scripts) เบเบตเปเบชเปเบฒเบเบเบปเบเบฅเบฒเบเบเบฒเบเบเปเบฝเบงเบเบฑเบเบชเบฐเบเบฒเบเบฐเบเบฒเบเบเบญเบ virtual machines (เปเบฅเบฐเบเปเปเบเบฝเบเปเบเป). เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฑเบเบชเบดเบเปเบเบเบตเปเบเบฐเปเบเปเบเบเบฑเบเบเบฐเบชเบปเบเบเบฒเบเบเบฒเบเบชเปเบฒเบเบเบญเบเบเปเบญเบเปเบฅเบฐเบฅเบฐเบซเบฑเบเบเบปเบงเบกเบฑเบเปเบญเบ. เบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเบซเบงเบฑเบโเบงเปเบฒโเบชเปเบฒโเบฅเบฑเบโเบเบฒเบโเบงเบดโเบเบฒเบโเปเบฅเบฐโเบงเปเบฒโเบญเบธโเบเบฐโเบเบญเบโเบเบฒเบโเบเบตเปโเบญเบฒเบโเบเบฐโเปเบเบฑเบโเบเบฐโเปเบซเบเบโเบชเปเบฒโเบฅเบฑเบโเบเบฒเบโเบเบปเบโ.
เบเบฒเบเบชเปเบฒเบเบเบงเบฒเบกเบเปเบญเบเบเบฒเบ
เบเบงเบเปเบฎเบปเบฒเบกเบตเปเบเบทเปเบญเบ virtual เบซเบผเบฒเบ (เบเบฐเบกเบฒเบ 1500 VM เบเบตเปเปเบเบเบขเบฒเบเปเบเบเบปเปเบง 3 vCenters). เบญเบฑเบเปเปเปเบเบทเบเบชเปเบฒเบ เปเบฅเบฐเบญเบฑเบเปเบเบปเปเบฒเบเบทเบเบฅเบถเบเปเบฅเบทเปเบญเบเป. เปเบเบทเปเบญเบฎเบฑเบเบชเบฒเบเบงเบฒเบกเปเบเบฑเบเบฅเบฐเบเบฝเบเบฎเบฝเบเบฎเปเบญเบ, เบซเบผเบฒเบเบเปเบญเบเบเปเปเบกเบนเบเปเบเบเบเบณเบเบปเบเปเบญเบเปเบเปเบเบทเบเปเบเบตเปเบกเปเบชเป vCenter เปเบเบทเปเบญเปเบเปเบ VMs เปเบเบปเปเบฒเปเบเปเบเบฅเบฐเบเบปเบเบเปเบญเบ, เบเบตเปเบเบญเบเบงเปเบฒเบเบงเบเปเบเบปเบฒเปเบเบฑเบเบเบฒเบเบเบปเบเบชเบญเบ, เปเบฅเบฐเปเบเบเปเบ เปเบฅเบฐเปเบกเบทเปเบญเปเบเบเบตเปเบเบงเบเบกเบฑเบเบเบทเบเบชเปเบฒเบ. เบเบฑเบเปเบเบเบญเบเบกเบฐเบเบธเบเปเบฎเบฑเบเปเบซเปเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเบซเบผเบฒเบเบเบงเปเบฒเปเบเบดเปเบเบซเบเบถเปเบเบเบญเบเปเบเบทเปเบญเบเบเบฑเบเปเบเปเบเบทเบเบเบฐเปเบงเปเบเบฑเบเบเบปเปเบเบเบฒเปเบเบปเปเบฒ, เปเบเบดเปเบเปเบฎเบฑเบเปเบซเปเบงเบฝเบเบเบฒเบเบชเบฑเบเบชเบปเบ. เปเบกเบทเปเบญเบเบธเบเปเบซเบปเบเปเบเบทเบญเบ, เบกเบตเบเบปเบเปเบเบเบเบฐเบซเบผเบฒเบเปเบฅเบฐเปเบฅเบตเปเบกเปเบฎเบฑเบเบงเบฝเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเบญเบฑเบเปเบเบเบเปเปเบกเบนเบเบเบตเป, เปเบเปเบเบปเบเปเบเปเบฎเบฑเบเบเปเปเบขเบธเบเปเบเบปเบฒเบเบตเปเบเปเบฝเบงเบเปเบญเบเบซเบผเบฑเบเบเบฒเบเบซเบเบถเปเบเบญเบฒเบเบดเบเปเบฅเบฐเปเบเบดเปเบเบซเบเบถเปเบ.
เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเปเบเบตเปเปเบเบเบเบฑเบเบเบตเบงเปเบฒเบเบธเบเบเบปเบเปเบเบปเปเบฒเปเบเบงเปเบฒเบเปเบญเบเบกเบตเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเปเบฒเบเปเบเบทเปเบญเบเบเบฑเบ, เบเบฐเบเบงเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเปเบฒเบเบเบญเบเบเบงเบเปเบเบปเบฒ, เปเบฅเบฐเบญเบทเปเบเป. เปเบฅเบฐเบญเบทเปเบเป. เปเบฅเบฐเปเบเปเบงเบฅเบฒเบเบฝเบงเบเบฑเบ, เบเบธเบเบเบปเบเบเบฐเบเบดเบเบฑเบเบเบฒเบกเบเบฐเบเบงเบเบเบฒเบเบเบตเปเบขเปเบฒเบเปเบเบฑเปเบกเบเบงเบเปเบฅเบฐเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบเบขเบนเปเปเบเบเปเบฒเบชเบฑเปเบ. เปเบเปเบซเบเปเบฒเปเบชเบเบเบฒเบ, เบเบตเปเบเปเปเปเบกเปเบเบเปเบฅเบฐเบเบต, เปเบเปเบเบตเปเบเปเปเปเบกเปเบเบซเบปเบงเบเปเปเบเบญเบเบเบปเบเบเบงเบฒเบก :)
เปเบเบเบเบปเปเบงเปเบ, เบเบฒเบเบเบฑเบเบชเบดเบเปเบเปเบเปเบเบทเบเปเบฎเบฑเบเปเบซเปเบญเบฑเบเบเบฐเปเบเบกเบฑเบเบเบฒเบเบเบงเบเบชเบญเบเบเบงเบฒเบกเบเบทเบเบเปเบญเบเบเบญเบเบเบฒเบเบเบทเปเบกเบเปเปเบกเบนเบเปเบชเปเบเบปเปเบเบเบฒ.
เบเบงเบเปเบฎเบปเบฒเปเบเปเบเบฑเบเบชเบดเบเปเบเบงเปเบฒเบเบปเบเบซเบกเบฒเบเบเบฐเบเปเบฒเบงเบฑเบเบเบตเปเบกเบตเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบเปเบเบทเปเบญเบเบเบฑเบเบเบตเปเบเบทเปเบกเบเปเปเบเบทเบเบเปเบญเบเปเบเบซเบฒเบงเบดเบชเบฐเบงเบฐเบเบญเบเบเบตเปเบฎเบฑเบเบเบดเบเบเบญเบเบเบฑเบเบซเบกเบปเบเปเบฅเบฐเบเบฒเบเบเปเบฒเบเบเบญเบเบเบงเบเปเบเบปเบฒเบเบฐเปเบเบฑเบเบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบเบตเปเบเบต.
เปเบเบเบธเบเบเบตเป, เบซเบเบถเปเบเปเบเปเบเบทเปเบญเบเบฎเปเบงเบกเบเบฒเบเบเบญเบเบเปเบญเบเปเบเปเบเบฐเบเบดเบเบฑเบ script เปเบ PowerShell เปเบฅเปเบง, เปเบเบดเปเบเบเบธเบเปเบกเบทเป, เบเบฒเบกเบเบฒเบเบฐเบฅเบฒเบ, เปเบเปเบฅเบงเบเบฅเบงเบกเบเปเปเบกเบนเบเบเปเบฝเบงเบเบฑเบเปเบเบทเปเบญเบเบเบฑเบเบเบฑเบเบซเบกเบปเบเบเบญเบ vCenters เบเบฑเบเบซเบกเบปเบเปเบฅเบฐเบชเปเบฒเบเปเบญเบเบฐเบชเบฒเบ csv 3 (เปเบเปเบฅเบฐเบญเบฑเบเบชเปเบฒเบฅเบฑเบ vCenter เบเบญเบเบเบปเบเปเบญเบ), เปเบเบดเปเบเปเบเปเบเบทเบเบญเบฑเบเปเบซเบฅเบเปเบ. เปเบเปเบเบเบปเปเบงเปเบ. เบกเบฑเบเปเบเปเบเบทเบเบเบฑเบเบชเบดเบเปเบเปเบญเบปเบฒเบชเบฐเบเบดเบเบเบตเปเปเบเบฑเบเบเบทเปเบเบเบฒเบเปเบฅเบฐเปเบชเบตเบกเบกเบฑเบเบเบฑเบเบเบฒเบเบเบงเบเบชเบญเบเปเบเบเปเบเปเบเบฒเบชเบฒ R, เปเบเบดเปเบเบเบงเบเปเบฎเบปเบฒเบกเบตเบเบฐเบชเบปเบเบเบฒเบเบเบฒเบเบขเปเบฒเบ.
เปเบเบเบฐเบเบงเบเบเบฒเบเบชเบธเบเบเปเบฒเบ, เบเบฒเบเปเบเปเปเบเปเบเปเบฎเบฑเบเบเปเปเบกเบนเบเบเบฒเบเปเบเบชเบฐเบเบต, เบเบฒเบเบเปเปเบกเบนเบเบเบตเปเบกเบตเบเบฒเบเบฐเบฅเบฒเบเบเบปเปเบเบเปเปเบฅเบฐเบเบฐเบซเบงเบฑเบเบชเบฒเบ (เปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบเปเบฅเบทเปเบญเบเบเบตเปเบเปเปเบกเบฒ), เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบเบฑเบเบเบถเบ vSphere เปเบเบทเปเบญเบเบญเบเบซเบฒเบเบนเปเบชเปเบฒเบเบเบตเปเปเบเปเบเบดเบเบเบญเบ vm เปเบฅเบฐเปเบงเบฅเบฒเบเบญเบเบเบฒเบเบชเปเบฒเบเบเบญเบเบเบงเบเปเบเบปเบฒ.
IDE RStudio Desktop เปเบฅเบฐ PowerShell ISE เบเบทเบเปเบเปเปเบเบทเปเบญเบเบฒเบเบเบฑเบเบเบฐเบเบฒ.
เบชเบฐเบเบฃเบดเบเบเบทเบเปเบเบตเบเบเบปเบงเบเบฒเบเปเบเบทเปเบญเบ virtual Windows เบเบปเบเบเบฐเบเบด.
เบฅเบฒเบเบฅเบฐเบญเบฝเบเบเบญเบเปเบซเบเบเบปเบเบเบปเปเบงเปเบ.
เปเบซเบเบเบปเบเบเบปเปเบงเปเบเบเบญเบ scripts เบกเบตเบเบฑเปเบเบเบตเป.
- เบเบงเบโเปเบฎเบปเบฒโเปเบเบฑเบโเบเปเบฒโเบเปเปโเบกเบนเบโเบเปเบฝเบงโเบเบฑเบ virtual machines เปเบเบโเบเปเบฒโเปเบเปโเบชเบฐโเบเบดเบ PowerShellโ, เบเบตเปโเบเบงเบโเปเบฎเบปเบฒโเปเบโเบเปเบฒเบ Rโ, เปเบฅเบฐโเบฅเบงเบกโเปเบญเบปเบฒโเบเบปเบโเปเบเปโเบฎเบฑเบโเปเบเบฑเบโเบซเบเบถเปเบ csvโ. เบเบฐเบเบดเบชเปเบฒเบเบฑเบเบเบตเปเบเบเบฑเบเบเบฑเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบชเบฒเปเบกเปเบเปเบฎเบฑเบเปเบเบฑเปเบเบเบฝเบงเบเบฑเบ. (เบกเบฑเบเปเบเบฑเบเปเบเปเบเปเบเบตเปเบเบฐเบเบฑเบเบเปเปเบกเบนเบเปเบเบเบเบปเบเบเบฒเบ R เบเบฑเบ PowerShell เปเบเบฎเบนเบเปเบเบเบเบญเบเบเบปเบงเปเบ, เปเบเปเบเบตเปเปเบกเปเบเบกเบตเบเบงเบฒเบกเบซเบเบธเปเบเบเบฒเบ, เปเบฅเบฐเบกเบต csvs เบฅเบฐเบเบฑเบเบเบฒเบเบเบฒเบเปเบฎเบฑเบเปเบซเปเบกเบฑเบเบเปเบฒเบเบเปเปเบเบฒเบเปเบเปเปเบเปเบฅเบฐเปเบเปเบเบเบฑเบเบเบปเบเปเบเปเบฎเบฑเบเบฅเบฐเบเบฑเบเบเบฒเบเบเบฒเบเบเบฑเบเบเบนเปเบญเบทเปเบ).
- เบเบฒเบเบเปเบฒเปเบเป R, เบเบงเบเปเบฎเบปเบฒเบเบฐเบเบญเบเบเบฒเบฅเบฒเบกเบดเปเบเบตเบเบตเปเบเบทเบเบเปเบญเบเบชเปเบฒเบฅเบฑเบเบเปเบญเบเบเปเปเบกเบนเบเบเบตเปเบกเบตเบเปเบฒเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบฅเบฑเบเบเบงเบเบชเบญเบ. โ เบเบงเบเปเบฎเบปเบฒเบเบณเบฅเบฑเบเบชเปเบฒเบเปเบญเบเบฐเบชเบฒเบเบเบณเบชเบฑเบเบเบตเปเบเบฐเบเบฑเบเบเบธเบเบธเบเบเปเบฒเบเบญเบเบเปเบญเบเบเปเปเบกเบนเบเปเบซเบผเบปเปเบฒเบเบตเปเปเบเบทเปเบญเปเบชเปเปเบเบเบปเบเปเบฒเบเบเปเปเบกเบนเบ, เปเบเบดเปเบเบเบฐเปเบเบฑเบเบเบณเบเบญเบเบเบญเบเบเบณเบเบฒเบกเบเบญเบเปเบเบทเปเบญเบเบฎเปเบงเบกเบเบฒเบ โเบเปเป, เปเบเปเบเปเบญเบเบเบงเบเบเบทเปเบกเบเปเปเบกเบนเบเบเบตเปเปเบเบงเปเบ?โ
- เบเบงเบเปเบฎเบปเบฒเปเบซเบฅเบเบเปเปเบกเบนเบเบชเปเบฒเบฅเบฑเบ VM เบเบฑเบเบซเบกเบปเบเบเบฒเบ csv เปเบเบเปเบเป R, เบชเปเบฒเบเบเบญเบเบเปเปเบกเบนเบ, เปเบญเบปเบฒเบเปเบญเบเบเปเปเบกเบนเบเบเบตเปเบเปเปเบเปเบฒเปเบเบฑเบเบญเบญเบเปเบฅเบฐเบชเปเบฒเบเปเบญเบเบฐเบชเบฒเบ xlsx เบเปเปเบกเบนเบเบเบตเปเบเบฐเบเบฐเบเบญเบเบกเบตเบเปเปเบกเบนเบเบชเบฐเบซเบผเบธเบเบชเปเบฒเบฅเบฑเบ VM เบเบฑเบเบซเบกเบปเบ, เบเบตเปเบเบงเบเปเบฎเบปเบฒเบญเบฑเบเปเบซเบฅเบเปเบเบเบฑเบเบเบฑเบเบเบฐเบเบฒเบเบญเบเบเบตเปเปเบเปเบเบเบฑเบ.
- เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเปเบเบฒเบเบเบงเบเบชเบญเบเบเบงเบฒเบกเบเบทเบเบเปเบญเบเบเบญเบเบเบฒเบเบเบทเปเบกเบเปเปเบกเบนเบเปเบชเปเปเบเบเบญเบเบเปเปเบกเบนเบเบชเปเบฒเบฅเบฑเบ VM เบเบฑเบเบซเบกเบปเบเปเบฅเบฐเบชเปเบฒเบเบเบฒเบเบฐเบฅเบฒเบเบเบตเปเบกเบตเบเบฝเบเปเบเป VM เบเบตเปเบกเบตเบเปเบญเบเบเปเปเบกเบนเบเบเบตเปเบเปเปเบเบทเบเบเปเบญเบ (เปเบฅเบฐเบเบฝเบเปเบเปเบเปเบญเบเบเปเปเบกเบนเบเปเบซเบผเบปเปเบฒเบเบตเป).
- เบเบงเบเปเบฎเบปเบฒเบชเบปเปเบเบฅเบฒเบเบเบทเปเบเบปเบเปเบเปเบฎเบฑเบเบเบญเบ VM เปเบเบซเบฒเบชเบฐเบเบดเบ PowerShell เบญเบทเปเบ, เปเบเบดเปเบเบเบฐเปเบเบดเปเบเบเบฑเบเบเบถเบ vCenter เบชเปเบฒเบฅเบฑเบเปเบซเบเบเบฒเบเบเบฒเบเบชเปเบฒเบ VM, เปเบเบดเปเบเบเบฐเบเปเบงเบเปเบซเปเบเบงเบเปเบฎเบปเบฒเบเบตเปเบเบญเบเปเบงเบฅเบฒเบเบฒเบเบเบฐเปเบเบเบญเบเบเบฒเบเบชเปเบฒเบ VM เปเบฅเบฐเบเบนเปเบชเปเบฒเบเบเบตเปเบเบฑเปเบเปเบ. เบเบตเปเปเบกเปเบเบชเปเบฒเบฅเบฑเบเบเปเบฅเบฐเบเบตเปเบเปเบงเบฅเบฒเบเบตเปเบเปเปเบกเบตเปเบเบเบญเบกเบฎเบฑเบเบงเปเบฒเบกเบฑเบเปเบกเปเบเบฅเบปเบเบเบญเบเปเบ. เบชเบฐเบเบดเบเบเบตเปเบเปเปเปเบฎเบฑเบเบงเบฝเบเบขเปเบฒเบเปเบงเบงเบฒ, เปเบเบเบชเบฐเปเบเบฒเบฐเบเปเบฒเบกเบตเบเบฑเบเบเบถเบเบเปเบฒเบเบงเบเบซเบฅเบฒเบ, เบเบฑเปเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเปเบเบดเปเบเบเบฝเบเปเบเป 2 เบญเบฒเบเบดเบเบเบตเปเบเปเบฒเบเบกเบฒ, เปเบฅเบฐเบเบฑเบเปเบเปเบเบฐเบเบงเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบตเปเบเปเบงเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบปเปเบเบซเบฒเบเปเปเบกเบนเบเบเปเบฝเบงเบเบฑเบ VMs เบซเบผเบฒเบเปเบเบฑเปเบเบเปเบญเบกเบเบฑเบ. script เบเบปเบงเบขเปเบฒเบเบเบฐเบเบญเบเบกเบตเบเปเบฒเบเบดเบเบเปเบฒเปเบซเบฑเบเบขเปเบฒเบเบฅเบฐเบญเบฝเบเบเปเบฝเบงเบเบฑเบเบเบปเบเปเบเบเบตเป. เบเบงเบเปเบฎเบปเบฒเปเบเบตเปเบกเบเบปเบเปเบเปเบฎเบฑเบเปเบเบปเปเบฒเปเบเปเบ csv, เปเบเบดเปเบเบเบงเบเปเบฎเบปเบฒเปเบซเบฅเบเบญเบตเบเปเบเบทเปเบญเบซเบเบถเปเบเปเบเบปเปเบฒเปเบเปเบ R.
- เบเบงเบเปเบฎเบปเบฒเบชเปเบฒเบเปเบญเบเบฐเบชเบฒเบ xlsx เบเบตเปเบกเบตเบฎเบนเบเปเบเบเบเบตเปเบชเบงเบเบเบฒเบกเปเบเบดเปเบเบเปเบญเบเบเปเปเบกเบนเบเบเบตเปเบเบทเปเบกเบเปเปเบเบทเบเบเปเบญเบเบเบฐเบเบทเบเปเบเบฑเปเบเปเบชเปเปเบเบฑเบเบชเบตเปเบเบ, เบเบปเบงเบเบญเบเบเบฐเบเบทเบเบเปเบฒเปเบเปเบเปเบเบฑเบเบเบฒเบเบเปเบฅเปเบฒ, เปเบฅเบฐเบเปเบฅเปเบฒเปเบเบตเปเบกเปเบเบตเบกเบเบตเปเบกเบตเบเบนเปเบชเปเบฒเบเบเบตเปเบกเบตเบเบธเบเบเบฐเบชเบปเบเปเบฅเบฐเปเบงเบฅเบฒเบเบญเบเบเบฒเบเบชเปเบฒเบ VM เบเบฐเบเบทเบเบเบตเปเบเบญเบ.
- เบเบงเบเปเบฎเบปเบฒเบชเปเบฒเบเบญเบตเปเบกเบฅเป, เบเปเบญเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเบเปเบญเบเบฐเบชเบฒเบเบเบตเปเบญเบฐเบเบดเบเบฒเบเบเปเบฒเบเบญเบเบเปเบญเบเบเปเปเบกเบนเบเบเบตเปเบเบทเบเบเปเบญเบ, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบเบเบฒเบเบฐเบฅเบฒเบเบเบตเปเบกเบตเบเบฒเบเบเบทเปเบกเบเปเปเบกเบนเบเบเปเปเบเบทเบเบเปเบญเบเปเบเบเปเบญเบเบเปเปเบกเบนเบ. เปเบเบเปเปเบเบงเบฒเบกเบเบงเบเปเบฎเบปเบฒเบเบตเปเปเบซเปเปเบซเบฑเบเบเปเบฒเบเบงเบเบเบฑเบเบซเบกเบปเบเบเบญเบ VMs เบเบตเปเบเบทเบเบชเปเบฒเบเบเบตเปเบเปเปเบเบทเบเบเปเบญเบ, เบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเบเบฑเบเบเบฐเบเบฒเบเบญเบเบเบตเปเปเบเปเบเบเบฑเบเปเบฅเบฐเบฎเบนเบเบเบฒเบเบเบตเปเบเบฐเบเบธเปเบ. เบเปเบฒเบเปเปเบกเบต VM เบเบตเปเบเบทเบเบเบทเปเบกเบเปเปเบเบทเบเบเปเบญเบ, เบเบงเบเปเบฎเบปเบฒเบชเบปเปเบเบเบปเบเบซเบกเบฒเบเบชเบฐเบเบฑเบเบญเบทเปเบเบเบตเปเบกเบตเบฎเบนเบเบเบฒเบเปเบฎเบเบเบนเบเปเบเบเบตเปเบกเบตเบเบงเบฒเบกเบชเบธเบเบเบงเปเบฒ.
- เบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเบถเบเบเปเปเบกเบนเบเบชเปเบฒเบฅเบฑเบ VMs เบเบฑเบเบซเบกเบปเบเปเบเบเบฒเบเบเปเปเบกเบนเบ SQL Server, เปเบเบเบเปเบฒเบเบถเบเปเบเบดเบเบเบปเบเปเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบญเบเบเบฒเบเบฐเบฅเบฒเบเบเบฐเบซเบงเบฑเบเบชเบฒเบ (เบเบปเบเปเบเบเบตเปเบซเบเปเบฒเบชเบปเบเปเบเบซเบผเบฒเบ - เบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบตเปเบเปเปเบกเบฒ).
เบเบปเบงโเบเบดเบโเปเบฅเปเบง scripts
เปเบเบฅเปเบฅเบฐเบซเบฑเบ R เบซเบผเบฑเบ
# ะััั ะบ ัะฐะฑะพัะตะน ะดะธัะตะบัะพัะธะธ (ะฝัะถะฝะพ ะดะปั ะบะพััะตะบัะฝะพะน ัะฐะฑะพัั ัะตัะตะท ะฒะธะฝะดะพะฒัะน ะฟะปะฐะฝะธัะพะฒัะธะบ ะทะฐะดะฐะฝะธะน)
setwd("C:ScriptsgetVm")
#### ะะพะดะณััะถะฐะตะผ ะฝะตะพะฑั
ะพะดะธะผัะต ะฟะฐะบะตัั ####
library(tidyverse)
library(xlsx)
library(mailR)
library(rmarkdown)
##### ะะฟัะตะดะตะปัะตะผ ะฟััะธ ะบ ะธัั
ะพะดะฝัะผ ัะฐะนะปะฐะผ ะธ ะดััะณะธะต ะฟะตัะตะผะตะฝะฝัะต #####
source(file = "const.R", local = T, encoding = "utf-8")
# ะัะพะฒะตััะตะผ ัััะตััะฒะพะฒะฐะฝะธะต ัะฐะนะปะฐ ัะพ ะฒัะตะผะธ ะะ ะธ ัะดะฐะปัะตะผ, ะตัะปะธ ะตััั.
if (file.exists(filenameVmCreationRules)) {file.remove(filenameVmCreationRules)}
#### ะกะพะทะดะฐัะผ ะฒะพัะดะพะฒัะบะธะน ะดะพะบัะผะตะฝั ั ะดะพะฟัััะธะผัะผะธ ะฟะพะปัะผะธ
render("VM_name_rules.Rmd",
output_format = word_document(),
output_file = filenameVmCreationRules)
# ะัะพะฒะตััะตะผ ัััะตััะฒะพะฒะฐะฝะธะต ัะฐะนะปะฐ ัะพ ะฒัะตะผะธ ะะ ะธ ัะดะฐะปัะตะผ, ะตัะปะธ ะตััั
if (file.exists(allVmXlsxPath)) {file.remove(allVmXlsxPath)}
#### ะะฐะฑะธัะฐะตะผ ะดะฐะฝะฝัะต ะฟะพ ะฒัะตะผ ะผะฐัะธะฝะฐะผ ัะตัะตะท PowerShell ัะบัะธะฟั. ะะฐ ะฒัั
ะพะดะต ะฟะพะปััะธะผ csv.
system(paste0("powershell -File ", getVmPsPath))
# ะะพะปะฝัะน df
fullXslx_df <- allVmXlsxPath %>%
read.csv2(stringsAsFactors = FALSE)
# ะัะพะฒะตััะตะผ ะบะพััะตะบัะฝะพััั ะทะฐะฟะพะปะฝะตะฝะฝัั
ะฟะพะปะตะน
full_df <- fullXslx_df %>%
mutate(
# ะกะฝะฐัะฐะปะฐ ัะฑะธัะฐะตะผ ะฒัะต ะปะธัะฝะธะต ะฟัะพะฑะตะปั ะธ ัะฐะฑัะปััะธะธ, ะฟะพัะพะผ ััะธััะฒะฐะตะผ ัะฐะทะดะตะปะธัะตะปั ะทะฐะฟัััั, ะฟะพัะพะผ ะฟัะพะฒะตััะตะผ ะฒั
ะพะถะดะตะฝะธะต ะฒ ะดะพะฟัััะธะผัะต ะทะฝะฐัะตะฝะธั,
isSubsystemCorrect = Subsystem %>%
gsub("[[:space:]]", "", .) %>%
str_split(., ",") %>%
map(function(x) (all(x %in% AllowedValues$Subsystem))) %>%
as.logical(),
isOwnerCorrect = Owner %in% AllowedValues$Owner,
isCategoryCorrect = Category %in% AllowedValues$Category,
isCreatorCorrect = (!is.na(Creator) & Creator != ''),
isCreation.DateCorrect = map(Creation.Date, IsDate)
)
# ะัะพะฒะตััะตะผ ัััะตััะฒะพะฒะฐะฝะธะต ัะฐะนะปะฐ ัะพ ะฒัะตะผะธ ะะ ะธ ัะดะฐะปัะตะผ, ะตัะปะธ ะตััั.
if (file.exists(filenameAll)) {file.remove(filenameAll)}
#### ะคะพัะผะธััะตะผ xslx ัะฐะนะป ั ะพััััะพะผ ####
# ะะฑัะธะต ะดะฐะฝะฝัะต ะฝะฐ ะพัะดะตะปัะฝัะน ะปะธัั
full_df %>% write.xlsx(file=filenameAll,
sheetName=names[1],
col.names=TRUE,
row.names=FALSE,
append=FALSE)
#### ะคะพัะผะธััะตะผ xslx ัะฐะนะป ั ะฝะตะฟัะฐะฒะธะปัะฝะพ ะทะฐะฟะพะปะฝะตะฝะฝัะผะธ ะฟะพะปัะผะธ ####
# ะคะพัะผะธััะตะผ df
incorrect_df <- full_df %>%
select(VM.Name,
IP.s,
Owner,
Subsystem,
Creator,
Category,
Creation.Date,
isOwnerCorrect,
isSubsystemCorrect,
isCategoryCorrect,
isCreatorCorrect,
vCenter.Name) %>%
filter(isSubsystemCorrect == F |
isOwnerCorrect == F |
isCategoryCorrect == F |
isCreatorCorrect == F)
# ะัะพะฒะตััะตะผ ัััะตััะฒะพะฒะฐะฝะธะต ัะฐะนะปะฐ ัะพ ะฒัะตะผะธ ะะ ะธ ัะดะฐะปัะตะผ, ะตัะปะธ ะตััั.
if (file.exists(filenameIncVM)) {file.remove(filenameIncVM)}
# ะกะพั
ัะฐะฝัะตะผ ัะฟะธัะพะบ VM ั ะฝะตะทะฐะฟะพะปะฝะตะฝะฝัะผะธ ะฟะพะปัะผะธ ะฒ csv
incorrect_df %>%
select(VM.Name) %>%
write_csv2(path = filenameIncVM, append = FALSE)
# ะคะธะปััััะตะผ ะดะปั ะฒััะฐะฒะบะธ ะฒ ะฟะพััั
incorrect_df_filtered <- incorrect_df %>%
select(VM.Name,
IP.s,
Owner,
Subsystem,
Category,
Creator,
vCenter.Name,
Creation.Date
)
# ะกัะธัะฐะตะผ ะบะพะปะธัะตััะฒะพ ัััะพะบ
numberOfRows <- nrow(incorrect_df)
#### ะะฐัะฐะปะพ ััะปะพะฒะธั ####
# ะะฐะปััะต ะปะธะฑะพ ั ะฝะฐั ะตััั ะฝะตะฟัะฐะฒะธะปัะฝะพ ะทะฐะฟะพะปะฝะตะฝะฝัะต ะฟะพะปั, ะปะธะฑะพ ะฝะตั.
# ะัะปะธ ะตััั - ะทะฐะฟััะบะฐะตะผ ะตัั ะพะดะธะฝ ัะบัะธะฟั
if (numberOfRows > 0) {
# ะัะพะฒะตััะตะผ ัััะตััะฒะพะฒะฐะฝะธะต ัะฐะนะปะฐ ั ัะพะทะดะฐัะตะปัะผะธ ะธ ัะดะฐะปัะตะผ, ะตัะปะธ ะตััั.
if (file.exists(creatorsFilePath)) {file.remove(creatorsFilePath)}
# ะะฐะฟััะบะฐะตะผ PowerShell ัะบัะธะฟั, ะบะพัะพััะน ะฝะฐะนะดัั ัะพะทะดะฐัะตะปะตะน ะฝะฐะนะดะตะฝะฝัั
VM. ะะฐ ะฒัั
ะพะดะต ะฟะพะปััะธะผ csv.
system(paste0("powershell -File ", getCreatorsPath))
# ะงะธัะฐะตะผ ัะฐะนะป ั ัะพะทะดะฐัะตะปัะผะธ
creators_df <- creatorsFilePath %>%
read.csv2(stringsAsFactors = FALSE)
# ะคะธะปััััะตะผ ะดะปั ะฒััะฐะฒะบะธ ะฒ ะฟะพััั, ะดะพะฑะฐะฒะปัะตะผ ะดะฐะฝะฝัะต ะธะท ัะฐะฑะปะธัั ั ัะพะทะดะฐัะตะปัะผะธ
incorrect_df_filtered <- incorrect_df_filtered %>%
select(VM.Name,
IP.s,
Owner,
Subsystem,
Category,
Creator,
vCenter.Name,
Creation.Date
) %>%
left_join(creators_df, by = "VM.Name") %>%
rename(`ะัะตะดะฟะพะปะฐะณะฐะตะผัะน ัะพะทะดะฐัะตะปั` = CreatedBy,
`ะัะตะดะฟะพะปะฐะณะฐะตะผะฐั ะดะฐัะฐ ัะพะทะดะฐะฝะธั` = CreatedOn)
# ะคะพัะผะธััะตะผ ัะตะปะพ ะฟะธััะผะฐ
emailBody <- paste0(
'<html>
<h3>ะะพะฑััะน ะดะตะฝั, ัะฒะฐะถะฐะตะผัะต ะบะพะปะปะตะณะธ.</h3>
<p>ะะพะปะฝัั ะฐะบััะฐะปัะฝัั ะธะฝัะพัะผะฐัะธั ะฟะพ ะฒะธัััะฐะปัะฝัะผ ะผะฐัะธะฝะฐะผ ะฒั ะผะพะถะตัะต ะฟะพัะผะพััะตัั ะฝะฐ ะดะธัะบะต H: ะฒะพั ััั:<p>
<p>server.ruVM', sourceFileFormat, '</p>
<p>ะขะฐะบะถะต ะฒะพ ะฒะปะพะถะตะฝะธะธ ัะฟะธัะพะบ ะะ ั <strong>ะฝะตะบะพััะตะบัะฝะพ ะทะฐะฟะพะปะฝะตะฝะฝัะผะธ</strong> ะฟะพะปัะผะธ. ะัะตะณะพ ะธั
<strong>', numberOfRows,'</strong>.</p>
<p>ะ ัะฐะฑะปะธัะต ะฟะพัะฒะธะปะพัั 2 ะดะพะฟะพะปะฝะธัะตะปัะฝัะต ะบะพะปะพะฝะบะธ. <strong>ะัะตะดะฟะพะปะฐะณะฐะตะผัะน ัะพะทะดะฐัะตะปั</strong> ะธ <strong>ะัะตะดะฟะพะปะฐะณะฐะตะผะฐั ะดะฐัะฐ ัะพะทะดะฐะฝะธั</strong>, ะบะพัะพััะต ะดะพััะฐัััั ะธะท ะปะพะณะพะฒ vCenter ะทะฐ ะฟะพัะปะตะดะฝะธะต 2 ะฝะตะดะตะปะธ</p>
<p>ะัะพััะฑะฐ ัะพะทะดะฐัะตะปะตะน ะผะฐัะธะฝ ััะพัะฝะธัั ะดะฐะฝะฝัะต ะธ ะทะฐะฟะพะปะฝะธัั ะฟะพะปั ะบะพััะตะบัะฝะพ. ะัะฐะฒะธะปะฐ ะทะฐะฟะพะปะฝะตะฝะธั ะฟะพะปะตะน ัะฐะบะถะต ะฒะพ ะฒะปะพะถะตะฝะธะธ</p>
<p><img src="data/meme.jpg"></p>
</html>'
)
# ะัะพะฒะตััะตะผ ัััะตััะฒะพะฒะฐะฝะธะต ัะฐะนะปะฐ
if (file.exists(filenameIncorrect)) {file.remove(filenameIncorrect)}
# ะคะพัะผะธััะตะผ ะบัะฐัะธะฒัั ัะฐะฑะปะธัั ั ัะพัะผะฐัะฐะผะธ ะธ ั.ะด.
source(file = "email.R", local = T, encoding = "utf-8")
#### ะคะพัะผะธััะตะผ ะฟะธััะผะพ ั ะฟะปะพั
ะพ ะฟะพะดะฟะธัะฐะฝะฝัะผะธ ะผะฐัะธะฝะฐะผะธ ####
send.mail(from = emailParams$from,
to = emailParams$to,
subject = "ะะ ั ะฝะตะบะพััะตะบัะฝะพ ะทะฐะฟะพะปะฝะตะฝะฝัะผะธ ะฟะพะปัะผะธ",
body = emailBody,
encoding = "utf-8",
html = TRUE,
inline = TRUE,
smtp = emailParams$smtpParams,
authenticate = TRUE,
send = TRUE,
attach.files = c(filenameIncorrect, filenameVmCreationRules),
debug = FALSE)
#### ะะฐะปััะต ะฟะพะนะดัั ะฑะปะพะบ, ะตัะปะธ ะฝะตั ะฟัะพะฑะปะตะผ ั ะะ ####
} else {
# ะคะพัะผะธััะตะผ ัะตะปะพ ะฟะธััะผะฐ
emailBody <- paste0(
'<html>
<h3>ะะพะฑััะน ะดะตะฝั, ัะฒะฐะถะฐะตะผัะต ะบะพะปะปะตะณะธ</h3>
<p>ะะพะปะฝัั ะฐะบััะฐะปัะฝัั ะธะฝัะพัะผะฐัะธั ะฟะพ ะฒะธัััะฐะปัะฝัะผ ะผะฐัะธะฝะฐะผ ะฒั ะผะพะถะตัะต ะฟะพัะผะพััะตัั ะฝะฐ ะดะธัะบะต H: ะฒะพั ััั:<p>
<p>server.ruVM', sourceFileFormat, '</p>
<p>ะขะฐะบะถะต, ะฝะฐ ัะตะบััะธะน ะผะพะผะตะฝั, ะฒัะต ะฟะพะปั ะะ ะบะพััะตะบัะฝะพ ะทะฐะฟะพะปะฝะตะฝั</p>
<p><img src="data/meme_correct.jpg"></p>
</html>'
)
#### ะคะพัะผะธััะตะผ ะฟะธััะผะพ ะฑะตะท ะฟะปะพั
ะพ ะทะฐะฟะพะปะฝะตะฝะฝัั
VM ####
send.mail(from = emailParams$from,
to = emailParams$to,
subject = "ะกะฒะพะดะฝะฐั ะธะฝัะพัะผะฐัะธั",
body = emailBody,
encoding = "utf-8",
html = TRUE,
inline = TRUE,
smtp = emailParams$smtpParams,
authenticate = TRUE,
send = TRUE,
debug = FALSE)
}
####### ะะฐะฟะธััะฒะฐะตะผ ะดะฐะฝะฝัะต ะฒ ะะ #####
source(file = "DB.R", local = T, encoding = "utf-8")
เบชเบฐเบเบฃเบดเบเบชเบณเบฅเบฑเบเบเบฒเบเบฎเบฑเบเบฅเบฒเบเบเบทเป vm เปเบ PowerShell
# ะะฐะฝะฝัะต ะดะปั ะฟะพะดะบะปััะตะฝะธั ะธ ะดััะณะธะต ะฟะตัะตะผะตะฝะฝัะต
$vCenterNames = @(
"vcenter01",
"vcenter02",
"vcenter03"
)
$vCenterUsername = "myusername"
$vCenterPassword = "mypassword"
$filename = "C:ScriptsgetVmdataallvmall-vm-$(get-date -f yyyy-MM-dd).csv"
$destinationSMB = "server.rumyfolder$vm"
$IP0=""
$IP1=""
$IP2=""
$IP3=""
$IP4=""
$IP5=""
# ะะพะดะบะปััะตะฝะธะต ะบะพ ะฒัะตะผ vCenter, ััะพ ัะพะดะตัะถะฐััั ะฒ ะฟะตัะตะผะตะฝะฝะพะน. ะัะดะตั ัะฐะฑะพัะฐัั, ะตัะปะธ ะปะพะณะธะฝ ะธ ะฟะฐัะพะปั ะพะดะธะฝะฐะบะพะฒัะต (ะฝะฐะฟัะธะผะตั, ะดะพะผะตะฝะฝัะต)
Connect-VIServer -Server $vCenterNames -User $vCenterUsername -Password $vCenterPassword
write-host ""
# ะกะพะทะดะฐัะผ ััะฝะบัะธั ั ัะธะบะปะพะผ ะฟะพ ะฒัะตะผ vCenter-ะฐะผ
function Get-VMinventory {
# ะ ััะพะน ะฟะตัะตะผะตะฝะฝะพะน ะฑัะดะตั ัะฟะธัะบะพ ะฒัะตั
ะะ, ะบะฐะบ ะพะฑัะตะบัะพะฒ
$AllVM = Get-VM | Sort Name
$cnt = $AllVM.Count
$count = 1
# ะะฐัะธะฝะฐะตะผ ัะธะบะป ะฟะพ ะฒัะตะผ ะะ ะธ ัะพะฑะธัะฐะตะผ ะฝะตะพะฑั
ะพะดะธะผัะต ะฟะฐัะฐะผะตััั ะบะฐะถะดะพะณะพ ะพะฑัะตะบัะฐ
foreach ($vm in $AllVM) {
$StartTime = $(get-date)
$IP0 = $vm.Guest.IPAddress[0]
$IP1 = $vm.Guest.IPAddress[1]
$IP2 = $vm.Guest.IPAddress[2]
$IP3 = $vm.Guest.IPAddress[3]
$IP4 = $vm.Guest.IPAddress[4]
$IP5 = $vm.Guest.IPAddress[5]
If ($IP0 -ne $null) {If ($IP0.Contains(":") -ne 0) {$IP0=""}}
If ($IP1 -ne $null) {If ($IP1.Contains(":") -ne 0) {$IP1=""}}
If ($IP2 -ne $null) {If ($IP2.Contains(":") -ne 0) {$IP2=""}}
If ($IP3 -ne $null) {If ($IP3.Contains(":") -ne 0) {$IP3=""}}
If ($IP4 -ne $null) {If ($IP4.Contains(":") -ne 0) {$IP4=""}}
If ($IP5 -ne $null) {If ($IP5.Contains(":") -ne 0) {$IP5=""}}
$cluster = $vm | Get-Cluster | Select-Object -ExpandProperty name
$Bootime = $vm.ExtensionData.Runtime.BootTime
$TotalHDDs = $vm.ProvisionedSpaceGB -as [int]
$CreationDate = $vm.CustomFields.Item("CreationDate") -as [string]
$Creator = $vm.CustomFields.Item("Creator") -as [string]
$Category = $vm.CustomFields.Item("Category") -as [string]
$Owner = $vm.CustomFields.Item("Owner") -as [string]
$Subsystem = $vm.CustomFields.Item("Subsystem") -as [string]
$IPS = $vm.CustomFields.Item("IP") -as [string]
$vCPU = $vm.NumCpu
$CorePerSocket = $vm.ExtensionData.config.hardware.NumCoresPerSocket
$Sockets = $vCPU/$CorePerSocket
$Id = $vm.Id.Split('-')[2] -as [int]
# ะกะพะฑะธัะฐะตะผ ะฒัะต ะฟะฐัะฐะผะตััั ะฒ ะพะดะธะฝ ะพะฑัะตะบั
$Vmresult = New-Object PSObject
$Vmresult | add-member -MemberType NoteProperty -Name "Id" -Value $Id
$Vmresult | add-member -MemberType NoteProperty -Name "VM Name" -Value $vm.Name
$Vmresult | add-member -MemberType NoteProperty -Name "Cluster" -Value $cluster
$Vmresult | add-member -MemberType NoteProperty -Name "Esxi Host" -Value $VM.VMHost
$Vmresult | add-member -MemberType NoteProperty -Name "IP Address 1" -Value $IP0
$Vmresult | add-member -MemberType NoteProperty -Name "IP Address 2" -Value $IP1
$Vmresult | add-member -MemberType NoteProperty -Name "IP Address 3" -Value $IP2
$Vmresult | add-member -MemberType NoteProperty -Name "IP Address 4" -Value $IP3
$Vmresult | add-member -MemberType NoteProperty -Name "IP Address 5" -Value $IP4
$Vmresult | add-member -MemberType NoteProperty -Name "IP Address 6" -Value $IP5
$Vmresult | add-member -MemberType NoteProperty -Name "vCPU" -Value $vCPU
$Vmresult | Add-Member -MemberType NoteProperty -Name "CPU Sockets" -Value $Sockets
$Vmresult | Add-Member -MemberType NoteProperty -Name "Core per Socket" -Value $CorePerSocket
$Vmresult | add-member -MemberType NoteProperty -Name "RAM (GB)" -Value $vm.MemoryGB
$Vmresult | add-member -MemberType NoteProperty -Name "Total-HDD (GB)" -Value $TotalHDDs
$Vmresult | add-member -MemberType NoteProperty -Name "Power State" -Value $vm.PowerState
$Vmresult | add-member -MemberType NoteProperty -Name "OS" -Value $VM.ExtensionData.summary.config.guestfullname
$Vmresult | Add-Member -MemberType NoteProperty -Name "Boot Time" -Value $Bootime
$Vmresult | add-member -MemberType NoteProperty -Name "VMTools Status" -Value $vm.ExtensionData.Guest.ToolsStatus
$Vmresult | add-member -MemberType NoteProperty -Name "VMTools Version" -Value $vm.ExtensionData.Guest.ToolsVersion
$Vmresult | add-member -MemberType NoteProperty -Name "VMTools Version Status" -Value $vm.ExtensionData.Guest.ToolsVersionStatus
$Vmresult | add-member -MemberType NoteProperty -Name "VMTools Running Status" -Value $vm.ExtensionData.Guest.ToolsRunningStatus
$Vmresult | add-member -MemberType NoteProperty -Name "Creation Date" -Value $CreationDate
$Vmresult | add-member -MemberType NoteProperty -Name "Creator" -Value $Creator
$Vmresult | add-member -MemberType NoteProperty -Name "Category" -Value $Category
$Vmresult | add-member -MemberType NoteProperty -Name "Owner" -Value $Owner
$Vmresult | add-member -MemberType NoteProperty -Name "Subsystem" -Value $Subsystem
$Vmresult | add-member -MemberType NoteProperty -Name "IP's" -Value $IPS
$Vmresult | add-member -MemberType NoteProperty -Name "vCenter Name" -Value $vm.Uid.Split('@')[1].Split(':')[0]
# ะกัะธัะฐะตะผ ะพะฑัะตะต ะธ ะพััะฐะฒัะตะตัั ะฒัะตะผั ะฒัะฟะพะปะฝะตะฝะธั ะธ ะฒัะฒะพะดะธะผ ะฝะฐ ัะบัะฐะฝ ัะตะทัะปััะฐัั. ะัะฟะพะปัะทะพะฒะฐะปะพัั ะดะปั ัะตััะธัะพะฒะฐะฝะธั, ะฝะพ ะฟะพ ัะฐะบัั ะพะบะฐะทะฐะปะพัั ะพัะตะฝั ัะดะพะฑะฝะพ.
$elapsedTime = $(get-date) - $StartTime
$totalTime = "{0:HH:mm:ss}" -f ([datetime]($elapsedTime.Ticks*($cnt - $count)))
clear-host
Write-Host "Processing" $count "from" $cnt
Write-host "Progress:" ([math]::Round($count/$cnt*100, 2)) "%"
Write-host "You have about " $totalTime "for cofee"
Write-host ""
$count++
# ะัะฒะพะดะธะผ ัะตะทัะปััะฐั, ััะพะฑั ัะธะบะป "ะทะฝะฐะป" ััะพ ัะฒะปัะตััั ัะตะทัะปััะฐัะพะผ ะฒัะฟะพะปะฝะตะฝะธั ะพะดะฝะพะณะพ ะฟัะพั
ะพะดะฐ
$Vmresult
}
}
# ะัะทัะฒะฐะตะผ ะฟะพะปััะธะฒััััั ััะฝะบัะธั ะธ ััะฐะทั ะฒัะณััะถะฐะตะผ ัะตะทัะปััะฐั ะฒ csv
$allVm = Get-VMinventory | Export-CSV -Path $filename -NoTypeInformation -UseCulture -Force
# ะััะฐะตะผัั ะฒัะปะพะถะธัั ะฟะพะปััะตะฝะฝัะน ัะฐะนะป ะฒ ะฝัะถะฝะพะต ะฝะฐะผ ะผะตััะพ ะธ, ะฒ ัะปััะฐะต ะพัะธะฑะบะธ, ะฟะธัะตะผ ะปะพะณ.
try
{
Copy-Item $filename -Destination $destinationSMB -Force -ErrorAction SilentlyContinue
}
catch
{
$error | Export-CSV -Path $filename".error" -NoTypeInformation -UseCulture -Force
}
เบชเบฐเบเบฃเบดเบ PowerShell เบเบตเปเบชเบฐเบเบฑเบเบกเบฒเบเบฒเบเบเบฑเบเบเบถเบเบเบนเปเบชเปเบฒเบเบเบญเบ virtual machines เปเบฅเบฐเบงเบฑเบเบเบตเบเบญเบเบเบฒเบเบชเปเบฒเบเบเบญเบเบเบงเบเปเบเบปเบฒ
# ะััั ะบ ัะฐะนะปั, ะธะท ะบะพัะพัะพะณะพ ะฑัะดะตะผ ะดะพััะฐะฒะฐัั ัะฟะธัะพะบ VM
$VMfilePath = "C:ScriptsgetVmcreators_VMcreators_VM_$(get-date -f yyyy-MM-dd).csv"
# ะััั ะบ ัะฐะนะปั, ะฒ ะบะพัะพััะน ะฑัะดะตะผ ะทะฐะฟะธััะฒะฐัั ัะตะทัะปััะฐั
$filePath = "C:ScriptsgetVmdatacreatorscreators-$(get-date -f yyyy-MM-dd).csv"
# ะกะพะทะดะฐัะผ ะฒะพะบััะปะพั
Workflow GetCreators-Wf
{
# ะะฐัะฐะผะตััั, ะบะพัะพััะต ะผะพะถะฝะพ ะฑัะดะตั ะฟะตัะตะดะฐัั ะฟัะธ ะฒัะทะพะฒะต ัะบัะธะฟัะฐ
param([string[]]$VMfilePath)
# ะะฐัะฐะผะตััั, ะบะพัะพััะต ะดะพัััะฟะฝั ัะพะปัะบะพ ะฒะฝัััะธ workflow
$vCenterUsername = "myusername"
$vCenterPassword = "mypassword"
$daysToLook = 14
$start = (get-date).AddDays(-$daysToLook)
$finish = get-date
# ะะฝะฐัะตะฝะธั, ะบะพัะพััะต ะฑัะดัั ะฒะฟะธัะฐะฝั ะฒ csv ะดะปั ะผะฐัะธะฝ, ะฟะพ ะบะพัะพััะผ ะฝะต ะฑัะดะตั ะฝะธัะตะณะพ ะฝะฐะนะดะตะฝะพ
$UnknownUser = "UNKNOWN"
$UnknownCreatedTime = "0000-00-00"
# ะะฟัะตะดะตะปัะตะผ ะฟะฐัะฐะผะตััั ะฟะพะดะบะปััะตะฝะธั ะธ ะฒัะฒะพะดะฝะพะน ัะฐะนะป, ะบะพัะพััะต ะฑัะดัั ะดะพัััะฟะฝั ะฒะพ ะฒััะผ ัะบัะธะฟัะต.
$vCenterNames = @(
"vcenter01",
"vcenter02",
"vcenter03"
)
# ะะพะปััะฐะตะผ ัะฟะธัะพะบ VM ะธะท csv ะธ ะทะฐะณััะถะฐะตะผ ัะพะพัะฒะตัััะฒัััะธะต ะพะฑัะตะบัั
$list = Import-Csv $VMfilePath -UseCulture | select -ExpandProperty VM.Name
# ะฆะธะบะป, ะบะพัะพััะน ะฑัะดะตั ะฒัะฟะพะปะฝััััั ะฟะฐัะฐะปะปะตะปัะฝะพ (ะฟะพ 5 ะผะฐัะธะฝ ะทะฐ ัะฐะท)
foreach -parallel ($row in $list)
{
# ะญัะพ ัะบัะธะฟั, ะบะพัะพััะน ะฒะธะดะธั ัะพะปัะบะพ ัะฒะพะธ ะฟะตัะตะผะตะฝะฝัะต ะธ ัะต, ะบะพัะพััะต ะตะผั ะฟะตัะตะดะฐะฝั ัะตัะตะท $Using
InlineScript {
# ะัะตะผั ะฝะฐัะฐะปะฐ ะฒัะฟะพะปะฝะตะฝะธั ะพัะดะตะปัะฝะพะณะพ ะฑะปะพะบะฐ
$StartTime = $(get-date)
Write-Host ""
Write-Host "Processing $Using:row started at $StartTime"
Write-Host ""
# ะะพะดะบะปััะตะฝะธะต ะพะฑะพัะฐัะธะฒะฐะตะผ ะฒ ะฟะตัะตะผะตะฝะฝัั, ััะพะฑั ะธะฝัะพัะผะฐัะธั ะพ ะฝัะผ ะฝะต ะผะตัะฐะปะฐัั ะฒ ะบะพะฝัะพะปะธ
$con = Connect-VIServer -Server $Using:vCenterNames -User $Using:vCenterUsername -Password $Using:vCenterPassword
# ะะพะปััะฐะตะผ ะพะฑัะตะบั vm
$vm = Get-VM -Name $Using:row
# ะะธะถะต 2 ะพะดะธะฝะฐะบะพะฒัะต ะบะพะผะฐะฝะดั. ะะดะฝะฐ ั ัะธะปัััะพะผ ะฟะพ ะฒัะตะผะตะฝะธ, ะฒัะพัะฐั - ะฑะตะท. ะะพะถะฝะพ ะฟะพะปัะทะพะฒะฐัััั ัะตะผ,
$Event = $vm | Get-VIEvent -Start $Using:start -Finish $Using:finish -Types Info | Where { $_.Gettype().Name -eq "VmBeingDeployedEvent" -or $_.Gettype().Name -eq "VmCreatedEvent" -or $_.Gettype().Name -eq "VmRegisteredEvent" -or $_.Gettype().Name -eq "VmClonedEvent"}
# $Event = $vm | Get-VIEvent -Types Info | Where { $_.Gettype().Name -eq "VmBeingDeployedEvent" -or $_.Gettype().Name -eq "VmCreatedEvent" -or $_.Gettype().Name -eq "VmRegisteredEvent" -or $_.Gettype().Name -eq "VmClonedEvent"}
# ะะฐะฟะพะปะฝัะตะผ ะฟะฐัะฐะผะตััั ะฒ ะทะฐะฒะธัะธะผะพััะธ ะพั ัะพะณะพ, ัะดะฐะปะพัั ะปะธ ะฒ ะปะพะณะฐั
ะฝะฐะนัะธ ััะพ-ัะพ
If (($Event | Measure-Object).Count -eq 0){
$User = $Using:UnknownUser
$Created = $Using:UnknownCreatedTime
$CreatedFormat = $Using:UnknownCreatedTime
} Else {
If ($Event.Username -eq "" -or $Event.Username -eq $null) {
$User = $Using:UnknownUser
} Else {
$User = $Event.Username
} # Else
$CreatedFormat = $Event.CreatedTime
# ะะดะธะฝ ะธะท ะบะพะปะปะตะณ ะพัะดะตะปัะฝะพ ะฟัะพัะธะป, ััะพะฑั ะฒัะตะผั ะฑัะปะพ ะฒ ัะฐะบะพะผ ัะพัะผะฐัะต, ะฟะพััะพะผั ะดัะฑะปะธััะตะผ ะตะณะพ. ะ ะฒ ะะ ะฟะพะนะดัั ะฝะพัะผะฐะปัะฝัะน ัะพัะผะฐั.
$Created = $Event.CreatedTime.ToString('yyyy-MM-dd')
} # Else
Write-Host "Creator for $vm is $User. Creating object."
# ะกะพะทะดะฐัะผ ะพะฑัะตะบั. ะะพะฑะฐะฒะปัะตะผ ะฟะฐัะฐะผะตััั.
$Vmresult = New-Object PSObject
$Vmresult | add-member -MemberType NoteProperty -Name "VM Name" -Value $vm.Name
$Vmresult | add-member -MemberType NoteProperty -Name "CreatedBy" -Value $User
$Vmresult | add-member -MemberType NoteProperty -Name "CreatedOn" -Value $CreatedFormat
$Vmresult | add-member -MemberType NoteProperty -Name "CreatedOnFormat" -Value $Created
# ะัะฒะพะดะธะผ ัะตะทัะปััะฐัั
$Vmresult
} # Inline
} # ForEach
}
$Creators = GetCreators-Wf $VMfilePath
# ะะฐะฟะธััะฒะฐะตะผ ัะตะทัะปััะฐั ะฒ ัะฐะนะป
$Creators | select 'VM Name', CreatedBy, CreatedOn | Export-Csv -Path $filePath -NoTypeInformation -UseCulture -Force
Write-Host "CSV generetion finisghed at $(get-date). PROFIT"
เบซเปเบญเบเบชเบฐเบซเบกเบธเบเบชเบปเบกเบเบงเบเปเบเปเบฎเบฑเบเบเบงเบฒเบกเบชเบปเบเปเบเปเบเบฑเบเบเบดเปเบชเบ
เบเบฒเบเบชเปเบฒเบเปเบญเบเบฐเบชเบฒเบ xlsx เบเบตเปเบชเบงเบเบเบฒเบกเบเบตเปเบกเบตเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบเปเบเบทเปเบญเบเบเบฑเบเบเบตเปเปเบเบฑเบกเปเบเบเปเบงเบเบเปเปเบเบทเบเบเปเบญเบ
# ะกะพะทะดะฐัะผ ะฝะพะฒัั ะบะฝะธะณั
# ะะพะทะผะพะถะฝัะต ะทะฝะฐัะตะฝะธั : "xls" ะธ "xlsx"
wb<-createWorkbook(type="xlsx")
# ะกัะธะปะธ ะดะปั ะธะผัะฝ ััะดะพะฒ ะธ ะบะพะปะพะฝะพะบ ะฒ ัะฐะฑะปะธัะฐั
TABLE_ROWNAMES_STYLE <- CellStyle(wb) + Font(wb, isBold=TRUE)
TABLE_COLNAMES_STYLE <- CellStyle(wb) + Font(wb, isBold=TRUE) +
Alignment(wrapText=TRUE, horizontal="ALIGN_CENTER") +
Border(color="black", position=c("TOP", "BOTTOM"),
pen=c("BORDER_THIN", "BORDER_THICK"))
# ะกะพะทะดะฐัะผ ะฝะพะฒัะน ะปะธัั
sheet <- createSheet(wb, sheetName = names[2])
# ะะพะฑะฐะฒะปัะตะผ ัะฐะฑะปะธัั
addDataFrame(incorrect_df_filtered,
sheet, startRow=1, startColumn=1, row.names=FALSE, byrow=FALSE,
colnamesStyle = TABLE_COLNAMES_STYLE,
rownamesStyle = TABLE_ROWNAMES_STYLE)
# ะะตะฝัะตะผ ัะธัะธะฝั, ััะพะฑั ัะพัะผะฐัะธัะพะฒะฐะฝะธะต ะฑัะปะพ ะฐะฒัะพะผะฐัะธัะตัะบะธะผ
autoSizeColumn(sheet = sheet, colIndex=c(1:ncol(incorrect_df)))
# ะะพะฑะฐะฒะปัะตะผ ัะธะปัััั
addAutoFilter(sheet, cellRange = "C1:G1")
# ะะฟัะตะดะตะปัะตะผ ััะธะปั
fo2 <- Fill(foregroundColor="red")
cs2 <- CellStyle(wb,
fill = fo2,
dataFormat = DataFormat("@"))
# ะะฐั
ะพะดะธะผ ััะดั ั ะฝะตะฒะตัะฝะพ ะทะฐะฟะพะปะฝะตะฝะฝัะผ ะฟะพะปะตะผ ะะปะฐะดะตะปััะฐ ะธ ะฟัะธะผะตะฝัะตะผ ะบ ะฝะธะผ ะพะฟัะตะดะตะปัะฝะฝัะน ััะธะปั
rowsOwner <- getRows(sheet, rowIndex = (which(!incorrect_df$isOwnerCorrect) + 1))
cellsOwner <- getCells(rowsOwner, colIndex = which( colnames(incorrect_df_filtered) == "Owner" ))
lapply(names(cellsOwner), function(x) setCellStyle(cellsOwner[[x]], cs2))
# ะะฐั
ะพะดะธะผ ััะดั ั ะฝะตะฒะตัะฝะพ ะทะฐะฟะพะปะฝะตะฝะฝัะผ ะฟะพะปะตะผ ะะพะดัะธััะตะผั ะธ ะฟัะธะผะตะฝัะตะผ ะบ ะฝะธะผ ะพะฟัะตะดะตะปัะฝะฝัะน ััะธะปั
rowsSubsystem <- getRows(sheet, rowIndex = (which(!incorrect_df$isSubsystemCorrect) + 1))
cellsSubsystem <- getCells(rowsSubsystem, colIndex = which( colnames(incorrect_df_filtered) == "Subsystem" ))
lapply(names(cellsSubsystem), function(x) setCellStyle(cellsSubsystem[[x]], cs2))
# ะะฝะฐะปะพะณะธัะฝะพ ะฟะพ ะะฐัะตะณะพัะธะธ
rowsCategory <- getRows(sheet, rowIndex = (which(!incorrect_df$isCategoryCorrect) + 1))
cellsCategory <- getCells(rowsCategory, colIndex = which( colnames(incorrect_df_filtered) == "Category" ))
lapply(names(cellsCategory), function(x) setCellStyle(cellsCategory[[x]], cs2))
# ะกะพะทะดะฐัะตะปั
rowsCreator <- getRows(sheet, rowIndex = (which(!incorrect_df$isCreatorCorrect) + 1))
cellsCreator <- getCells(rowsCreator, colIndex = which( colnames(incorrect_df_filtered) == "Creator" ))
lapply(names(cellsCreator), function(x) setCellStyle(cellsCreator[[x]], cs2))
# ะกะพั
ัะฐะฝัะตะผ ัะฐะนะป
saveWorkbook(wb, filenameIncorrect)
เบเบปเบโเบเบฐโเบฅเบดเบโเปเบเบดเปเบโเบเบทโเปเบเบงโเบเบตเปโ:
เบเบญเบเบเบฒเบเบเบตเปเบเบฑเบเบกเบตเบเบฒเบ nuance เบเบตเปเบซเบเปเบฒเบชเบปเบเปเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบฑเปเบเบเบฒเบเบฐเบฅเบฒเบ Windows. เบกเบฑเบเปเบเบฑเบเปเบเบเปเปเปเบเปเบเบตเปเบเบฐเบเบญเบเบซเบฒเบชเบดเบเปเบฅเบฐเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบตเปเบเบทเบเบเปเบญเบเปเบเบทเปเบญเปเบซเปเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบกเบเบตเปเบกเบฑเบเบเบงเบ. เบเบฑเปเบเบเบฑเปเบ, เบซเปเบชเบฐเบซเบกเบธเบ R เปเบเปเบเบทเบเบเบปเบเปเบซเบฑเบ, เปเบเบดเปเบเบเบปเบงเบกเบฑเบเปเบญเบเบชเปเบฒเบเบงเบฝเบเบเบฒเบเบเบตเปเบเบฐเปเบเบตเบเบเบปเบง R script เปเบฅเบฐเบเปเปเบฅเบทเบกเบเปเบฝเบงเบเบฑเบเปเบเบฅเปเบเบฑเบเบเบถเบ. เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเปเปเบเบงเบฝเบเบเบฒเบเบเปเบงเบเบเบปเบเปเบญเบ.
เบเบดเปเบเบชเปเบงเบเบเบญเบเบฅเบฐเบซเบฑเบ R เบเบตเปเบกเบตเบชเบญเบเบเบปเบงเบขเปเบฒเบเบเบตเปเบชเปเบฒเบเบงเบฝเบเบเบฒเบเปเบ Windows Scheduler
library(taskscheduleR)
myscript <- file.path(getwd(), "all_vm.R")
## ะทะฐะฟััะบะฐะตะผ ัะบัะธะฟั ัะตัะตะท 62 ัะตะบัะฝะดั
taskscheduler_create(taskname = "getAllVm", rscript = myscript,
schedule = "ONCE", starttime = format(Sys.time() + 62, "%H:%M"))
## ะทะฐะฟััะบะฐะตะผ ัะบัะธะฟั ะบะฐะถะดัะน ะดะตะฝั ะฒ 09:10
taskscheduler_create(taskname = "getAllVmDaily", rscript = myscript,
schedule = "WEEKLY",
days = c("MON", "TUE", "WED", "THU", "FRI"),
starttime = "02:00")
## ัะดะฐะปัะตะผ ะทะฐะดะฐัะธ
taskscheduler_delete(taskname = "getAllVm")
taskscheduler_delete(taskname = "getAllVmDaily")
# ะกะผะพััะธะผ ะปะพะณะธ (ะฟะพัะปะตะดะฝะธะต 4 ัััะพัะบะธ)
tail(readLines("all_vm.log"), sep ="n", n = 4)
เปเบเบเบเปเบฒเบเบซเบฒเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเปเปเบกเบนเบ
เบซเบผเบฑเบเบเบฒเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบชเบฐเบเบดเบ, เบเบฑเบเบซเบฒเบญเบทเปเบเปเปเบฅเบตเปเบกเบเบฒเบเบปเบ. เบเบปเบงเบขเปเบฒเบ, เบเปเบญเบเบเปเบญเบเบเบฒเบเบเบญเบเบซเบฒเบงเบฑเบเบเบตเบเบตเป VM เบเบทเบเบฅเบถเบ, เปเบเปเบเบฑเบเบเบถเบเปเบ vCenter เปเบเปเบซเบกเบปเบเปเบฅเปเบง. เปเบเบทเปเบญเบเบเบฒเบเบชเบฐเบเบดเบเบงเบฒเบเปเบเบฅเปเปเบเปเบเบเปเบเบตเบเบธเบเปเบกเบทเปเปเบฅเบฐเบเปเปเปเบฎเบฑเบเบเบงเบฒเบกเบชเบฐเบญเบฒเบ (เบเบงเบเปเบฎเบปเบฒเปเบฎเบฑเบเบเบงเบฒเบกเบชเบฐเบญเบฒเบเบเปเบงเบเบกเบทเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบกเบทเปเบญเบเบงเบเปเบฎเบปเบฒเบเบทเป), เบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเบเปเบฒเบเปเบเบฅเปเปเบเบปเปเบฒเปเบฅเบฐเบเบญเบเบซเบฒเปเบเบฅเปเบเปเบฒเบญเบดเบเบเบตเป VM เบเบตเปเบเปเปเบกเบต. เปเบเปเบเบฑเปเบเบเปเปเปเบขเบฑเบ.
เบเปเบญเบเบขเบฒเบเบชเปเบฒเบเบเบฒเบเบเปเปเบกเบนเบเบเบฐเบซเบงเบฑเบเบชเบฒเบ.
เบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบ MS SQL SERVER - เบเบฒเบเบฐเบฅเบฒเบเบเบปเปเบงเบเบฒเบงเบเบญเบเบฅเบฐเบเบปเบ - เบกเบฒเบฎเบญเบเบเบนเปเปเบ. เบเบปเบเบเบฐเบเบดเปเบฅเปเบงเบกเบฑเบเบเบทเบเปเบเปเบเบฑเบเบเบฒเบเบฐเบฅเบฒเบเบเบปเปเบงเบเบฒเบง (เบเปเปเปเบกเปเบเบเบปเปเบงเบเบฒเบง).
เบเปเบฒเบเบชเบฒเบกเบฒเบเบญเปเบฒเบเบฅเบฒเบเบฅเบฐเบญเบฝเบเปเบเปเบเบตเป
เปเบเบชเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบชเปเบฒเบเบเบฒเบเบฐเบฅเบฒเบ, เบเบญเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเบฐเบกเบตเบกเบฑเบเบเบฑเบเบชเบฐเบเบฑเบ, เปเบฅเบฐ SQL Server เบชเปเบฒเบ 2 เบเบฑเบเบงเบฑเบเบเบตเปเบเบตเปเบกเปเบเบตเบกเปเบเบเบฒเบเบฐเบฅเบฒเบเบเบตเป (เบงเบฑเบเบเบตเบเบฑเบเบเบถเบเปเบเปเบเบทเบเบชเปเบฒเบเบเบทเปเบเปเบฅเบฐเบงเบฑเบเบซเบกเบปเบเบญเบฒเบเบธเบเบญเบเบเบฑเบเบเบถเบ) เปเบฅเบฐเบเบฒเบเบฐเบฅเบฒเบเปเบเบตเปเบกเปเบเบตเบกเบเบตเปเบกเบตเบเบฒเบเบเปเบฝเบเปเบเบ. เบเบฐเบเบทเบเบเบฝเบ. เบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบเบเปเปเบกเบนเบเบเบตเปเบเบฑเบเบชเบฐ เปเป เปเบฅเบฐ, เปเบเบเบเปเบฒเบเบเบฒเบเบชเบญเบเบเบฒเบกเบเปเบฒเบเป, เบเบปเบงเบขเปเบฒเบเบเบตเปเปเบซเปเบขเบนเปเปเบเปเบญเบเบฐเบชเบฒเบ, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบเบดเปเบเบงเบปเบเบเบญเบเบเบตเบงเบดเบเบเบญเบเปเบเบทเปเบญเบ virtual เบชเบฐเปเบเบฒเบฐ, เบซเบผเบทเบชเบฐเบเบฒเบเบฐเบเบญเบ VMs เบเบฑเบเบซเบกเบปเบเปเบเบเบธเบเปเบเบซเบเบถเปเบ. เปเบเปเบงเบฅเบฒ.
เบเบฒเบเบเบฑเบเบชเบฐเบเบฐเบเบฒเบเบเบฐเบเบดเบเบฑเบ, เบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบเบฒเบเบเบฝเบเปเบเบซเบฒเบเบฒเบเบฐเบฅเบฒเบเบเบปเปเบเบเปเบเบฐเบเปเปเบชเปเบฒเปเบฅเบฑเบเบเบปเบเบเปเบงเบฒเบเบฒเบเปเบฎเบฑเบเบเบธเบฅเบฐเบเปเบฒเบเบฒเบเบเบฝเบเปเบเบซเบฒเบเบฒเบเบฐเบฅเบฒเบเบเบปเปเบงเบเบฒเบงเบชเปเบฒเปเบฅเบฑเบ. เปเบซเบผเบปเปเบฒเบเบฑเปเบ. เปเบเบเบฒเบเบฐเบฅเบฒเบเบเบตเปเบกเบตเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบฝเบเบเปเบฒเบเบงเบเบซเบฅเบฒเบ, เบซเบเปเบฒเบเบตเปเบเบตเปเบเบงเบเบเบฐเบเบทเบเบเบฐเบเบดเบเบฑเบเบขเปเบฒเบเบฅเบฐเบกเบฑเบเบฅเบฐเบงเบฑเบ, เปเบเปเปเบเบเปเบฅเบฐเบเบตเบเบญเบเบเบงเบเปเบฎเบปเบฒเบกเบฑเบเปเบเบฑเบเบชเบดเปเบเบเบตเปเปเบขเบฑเบเปเบเปเป.
เปเบเบทเปเบญเปเบซเปเบเบปเบเปเบเปเบฎเบฑเบเบงเบฝเบเบขเปเบฒเบเบเบทเบเบเปเบญเบ, เบเปเบญเบเบเปเบญเบเปเบเบตเปเบกเบฅเบฐเบซเบฑเบเบเปเบญเบเปเปเบ R เบเบตเปเบเบฐเบเบฝเบเบเบฝเบเบเบฒเบเบฐเบฅเบฒเบเปเบซเบกเปเบเบฑเบเบเปเปเบกเบนเบเบชเปเบฒเบฅเบฑเบ VMs เบเบฑเบเบซเบกเบปเบเบเบฑเบเบซเบเบถเปเบเบเบตเปเปเบเบฑเบเปเบงเปเปเบเบเบฒเบเบเปเปเบกเบนเบเปเบฅเบฐเบเบฝเบเบเบฝเบเปเบเปเปเบเบงเบเบตเปเบกเบตเบเบฒเบเบเปเบฝเบเปเบเบเบเบฑเบเบกเบฑเบ. เบฅเบฐเบซเบฑเบเบเปเปเบชเบฐเบซเบฅเบฒเบเปเบเบเบชเบฐเปเบเบฒเบฐเบกเบฑเบเปเบเปเบซเปเบญเบเบชเบฐเบซเบกเบธเบเบเบฝเบเบเบฝเบDF, เปเบเปเบเปเบญเบเบเบฐเบเปเบฒเบชเบฐเปเบซเบเบตเบกเบฑเบเบเปเบฒเบเบฅเบธเปเบกเบเบตเป.
เบฅเบฐเบซเบฑเบ R เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฝเบเบเปเปเบกเบนเบเปเบชเปเบเบฒเบเบเปเปเบกเบนเบ
# ะะพะดัะตะฟะปัะตะผ ะฟะฐะบะตัั
library(odbc)
library(compareDF)
# ะคะพัะผะธััะตะผ ะบะพะฝะฝะตะบั
con <- dbConnect(odbc(),
Driver = "ODBC Driver 13 for SQL Server",
Server = DBParams$server,
Database = DBParams$database,
UID = DBParams$UID,
PWD = DBParams$PWD,
Port = 1433)
#### ะัะพะฒะตััะตะผ ะตััั ะปะธ ัะฐะฑะปะธัะฐ. ะัะปะธ ะฝะตั - ัะพะทะดะฐัะผ. ####
if (!dbExistsTable(con, DBParams$TblName)) {
#### ะกะพะทะดะฐัะผ ัะฐะฑะปะธัั ####
create <- dbSendStatement(
con,
paste0(
'CREATE TABLE ',
DBParams$TblName,
'(
[Id] [int] NOT NULL PRIMARY KEY CLUSTERED,
[VM.Name] [varchar](255) NULL,
[Cluster] [varchar](255) NULL,
[Esxi.Host] [varchar](255) NULL,
[IP.Address.1] [varchar](255) NULL,
[IP.Address.2] [varchar](255) NULL,
[IP.Address.3] [varchar](255) NULL,
[IP.Address.4] [varchar](255) NULL,
[IP.Address.5] [varchar](255) NULL,
[IP.Address.6] [varchar](255) NULL,
[vCPU] [int] NULL,
[CPU.Sockets] [int] NULL,
[Core.per.Socket] [int] NULL,
[RAM..GB.] [int] NULL,
[Total.HDD..GB.] [int] NULL,
[Power.State] [varchar](255) NULL,
[OS] [varchar](255) NULL,
[Boot.Time] [varchar](255) NULL,
[VMTools.Status] [varchar](255) NULL,
[VMTools.Version] [int] NULL,
[VMTools.Version.Status] [varchar](255) NULL,
[VMTools.Running.Status] [varchar](255) NULL,
[Creation.Date] [varchar](255) NULL,
[Creator] [varchar](255) NULL,
[Category] [varchar](255) NULL,
[Owner] [varchar](255) NULL,
[Subsystem] [varchar](255) NULL,
[IP.s] [varchar](255) NULL,
[vCenter.Name] [varchar](255) NULL,
DateFrom datetime2 GENERATED ALWAYS AS ROW START NOT NULL,
DateTo datetime2 GENERATED ALWAYS AS ROW END NOT NULL,
PERIOD FOR SYSTEM_TIME (DateFrom, DateTo)
) ON [PRIMARY]
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = ', DBParams$TblHistName,'));'
)
)
# ะัะฟัะฐะฒะปัะตะผ ะฟะพะดะณะพัะพะฒะปะตะฝะฝัะน ะทะฐะฟัะพั
dbClearResult(create)
} # if
#### ะะฐัะฐะปะพ ัะฐะฑะพัั ั ัะฐะฑะปะธัะตะน ####
# ะะฑะพะทะฝะฐัะฐะตะผ ัะฐะฑะปะธัั, ั ะบะพัะพัะพะน ะฑัะดะตะผ ัะฐะฑะพัะฐัั
allVM_db_con <- tbl(con, DBParams$TblName)
#### ะกัะฐะฒะฝะธะฒะฐะตะผ ัะฐะฑะปะธัั ####
# ะกะพะฑะธัะฐะตะผ ะดะฐะฝะฝัะต ั ัะฐะฑะปะธัั (ัะฑะธัะฐะตะผ ัะปัะถะตะฑะฝัะต ะฒัะตะผะตะฝะฝัะต ะฟะพะปั)
allVM_db <- allVM_db_con %>%
select(c(-"DateTo", -"DateFrom")) %>%
collect()
# ะกะพะทะดะฐัะผ ัะฐะฑะปะธัั ัะพ ััะฐะฒะฝะตะฝะธะตะผ ะพะฑัะตะบัะพะฒ. ะกัะฐะฒะฝะธะฒะฐะตะผ ะฟะพ Id
# ะฃะดะฐะปัะฝะฝัะต ะพะฑัะตะบัั ัะฐะผ ะฑัะดัั ะฟะพะผะตัะตะฝั ัะตัะตะท -, ัะพะทะดะฐะฝะฝัะต ัะตัะตะท +, ะธะทะผะตะฝัะฝะฝัะต ัะตัะตะท - ะธ +
ctable_VM <- fullXslx_df %>%
compare_df(allVM_db,
c("Id"))
#### ะฃะดะฐะปะตะฝะธะต ัััะพะบ ####
# ะัะดะธัะฐะตะผ Id ะฒะธัััะฐะปะพะบ, ะทะฐะฟะธัะธ ะพ ะบะพัะพััั
ะฝะฐะดะพ ัะดะฐะปะธัั
remove_Id <- ctable_VM$comparison_df %>%
filter(chng_type == "-") %>%
select(Id)
# ะัะพะฒะตััะตะผ, ััะพ ะตััั ะทะฐะฟะธัะธ (ะตัะปะธ ะทะฐะฟะธัะตะน ะฝะตั - ะธ ัะดะฐะปััั ะฝะธัะตะณะพ ะฝะต ะฝัะถะฝะพ)
if (remove_Id %>% nrow() > 0) {
# ะะพะฝััััะธััะตะผ ัะฐะฑะปะพะฝ ะดะปั ะทะฐะฟัะพัะฐ ะฝะฐ ัะดะฐะปะตะฝะธะต ะดะฐะฝะฝัั
delete <- dbSendStatement(con,
paste0('
DELETE
FROM ',
DBParams$TblName,
' WHERE "Id"=?
') # paste
) # send
# ะกะพะทะดะฐัะผ ะทะฐะฟัะพั ะฝะฐ ัะดะฐะปะตะฝะธะต ะดะฐะฝะฝัั
dbBind(delete, remove_Id)
# ะัะฟัะฐะฒะปัะตะผ ะฟะพะดะณะพัะพะฒะปะตะฝะฝัะน ะทะฐะฟัะพั
dbClearResult(delete)
} # if
#### ะะพะฑะฐะฒะปะตะฝะธะต ัััะพะบ ####
# ะัะดะตะปัะตะผ ัะฐะฑะปะธัั, ัะพะดะตัะถะฐััั ัััะพะบะธ, ะบะพัะพััะต ะฝัะถะฝะพ ะดะพะฑะฐะฒะธัั.
allVM_add <- ctable_VM$comparison_df %>%
filter(chng_type == "+") %>%
select(-chng_type)
# ะัะพะฒะตััะตะผ, ะตััั ะปะธ ัััะพะบะธ, ะบะพัะพััะต ะฝัะถะฝะพ ะดะพะฑะฐะฒะธัั ะธ ะดะพะฑะฐะฒะปัะตะผ (ะตัะปะธ ะฝะตั - ะฝะต ะดะพะฑะฐะฒะปัะตะผ)
if (allVM_add %>% nrow() > 0) {
# ะะธัะตะผ ัะฐะฑะปะธัั ัะพ ะฒัะตะผะธ ะฝะตะพะฑั
ะพะดะธะผัะผะธ ะดะฐะฝะฝัะผะธ
dbWriteTable(con,
DBParams$TblName,
allVM_add,
overwrite = FALSE,
append = TRUE)
} # if
#### ะะต ะทะฐะฑัะฒะฐะตะผ ัะดะตะปะฐัั ะดะธัะบะพะฝะฝะตะบั ####
dbDisconnect(con)
เบฅเบงเบก
เปเบเบฑเบเบเบปเบเบกเบฒเบเบฒเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบญเบเบชเบฐเบเบดเบ, เบเปเบฒเบชเบฑเปเบเปเบเปเบเบทเบเบเบทเปเบเบเบนเปเบฅเบฐเบฎเบฑเบเบชเบฒเบเบฒเบเปเบเบชเบญเบเบชเบฒเบกเปเบเบทเบญเบ. เบเบฒเบเบเบฑเปเบ VMs เบเบตเปเบเบทเบเบเบทเปเบกเบเปเปเบเบทเบเบเปเบญเบเบเบฐเบเบฒเบเบปเบ, เปเบเปเบชเบฐเบเบฃเบดเบเปเบฎเบฑเบเบซเบเปเบฒเบเบตเปเปเบเบฑเบเบเบฒเบเปเบเบทเบญเบเบเบตเปเบเบตเปเบฅเบฐ VM เบเบตเปเบซเบฒเบเบฒเบเปเบเบปเปเบฒเปเบเปเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเปเบเบฑเบเปเบงเบฅเบฒ 2 เบกเบทเปเบเบดเบเบเปเปเบเบฑเบ.
เบงเบฝเบเบเบทเปเบเบเบฒเบเบเบฑเบเบเบทเบเบชเปเบฒเบเบเบถเปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบเปเปเบกเบนเบเบเบฐเบซเบงเบฑเบเบชเบฒเบ.
เบกเบฑเบเปเบเบฑเบเบเบตเปเบเบฑเบเปเบเบเบงเปเบฒเบซเบผเบฒเบเบเบตเปเบชเบฒเบกเบฒเบเบเบฐเบเบดเบเบฑเบเบเปเปเปเบเปเบขเบนเปเปเบเบซเบปเบงเปเบเบปเปเบฒ, เปเบเปเบกเบตเบเบญเบเปเบงเบเบดเปเบชเบ, เปเบเปเบงเบฝเบเบเบฒเบเปเบกเปเบเบซเบเปเบฒเบชเบปเบเปเบเปเบฅเบฐ, เบซเบเบถเปเบเบญเบฒเบเบเบฐเปเบงเบปเปเบฒเบงเปเบฒ, เบเบฒเบเปเบฅเบทเบญเบ.
R เปเบเปเบชเบฐเปเบเบเบเบปเบงเบเบญเบเบกเบฑเบเปเบญเบเบญเบตเบเปเบเบทเปเบญเบซเบเบถเปเบเบงเปเบฒเปเบเบฑเบเบเบฒเบชเบฒเบชเบฒเบเบปเบเบเบตเปเบเบตเปเบฅเบตเบ, เปเบเบดเปเบเบเบตเปเบฅเบตเบเบเปเปเบเบฝเบเปเบเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเปเปเบเบเบฑเบเบซเบฒเบชเบฐเบเบดเบเบด, เปเบเปเบเบฑเบเปเบเบฑเบ "เบเบฑเปเบ" เบเบตเปเบเบตเปเบฅเบตเบเบฅเบฐเบซเบงเปเบฒเบเปเบซเบผเปเบเบเปเปเบกเบนเบเบญเบทเปเบเป.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com