เบฅเบฒเบเบ‡เบฒเบ™เบ›เบฐเบˆเปเบฒเบงเบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบชเบธเบ‚เบฐเบžเบฒเบšเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡ virtual เป‚เบ”เบเปƒเบŠเป‰ R เปเบฅเบฐ PowerShell

เบฅเบฒเบเบ‡เบฒเบ™เบ›เบฐเบˆเปเบฒเบงเบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบชเบธเบ‚เบฐเบžเบฒเบšเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡ virtual เป‚เบ”เบเปƒเบŠเป‰ R เปเบฅเบฐ PowerShell

เป€เบ‚เบปเป‰เบฒ

เบชเบฐโ€‹เบšเบฒเบโ€‹เบ”เบตโ€‹เบ•เบญเบ™โ€‹เบชเบงเบฒเบ. เบชเปเบฒเบฅเบฑเบšเป€เบ„เบดเปˆเบ‡เบซเบ™เบถเปˆเบ‡เบ›เบตเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ 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, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เป„เบŸเบฅเปŒเปเบ™เบšเบเบฑเบšเบˆเบปเบ”เบซเบกเบฒเบเบกเบตเบฎเบนเบšเปเบšเบšเบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™ (เบ•เบฒเบกเบ„เบงเบฒเบกเบกเบฑเบเบ‚เบญเบ‡เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™), เปเบฅเบฐเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบ•เบฒเบ•เบฐเบฅเบฒเบ‡ CSV.

เบเบฒเบ™เบชเป‰เบฒเบ‡เป€เบญเบเบฐเบชเบฒเบ™ 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)

เบœเบปเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹เป€เบšเบดเปˆเบ‡โ€‹เบ„เบทโ€‹เปเบ™เบงโ€‹เบ™เบตเป‰โ€‹:

เบฅเบฒเบเบ‡เบฒเบ™เบ›เบฐเบˆเปเบฒเบงเบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบชเบธเบ‚เบฐเบžเบฒเบšเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡ virtual เป‚เบ”เบเปƒเบŠเป‰ R เปเบฅเบฐ PowerShell

เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰เบเบฑเบ‡เบกเบตเบเบฒเบ™ 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 - เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบŠเบปเปˆเบงเบ„เบฒเบงเบ‚เบญเบ‡เบฅเบฐเบšเบปเบš - เบกเบฒเบฎเบญเบ”เบเบนเป‰เป„เบž. เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบกเบฑเบ™เบ–เบทเบเปเบ›เป€เบ›เบฑเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบŠเบปเปˆเบงเบ„เบฒเบง (เบšเปเปˆเปเบกเปˆเบ™เบŠเบปเปˆเบงเบ„เบฒเบง).

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป„เบ”เป‰เบ—เบตเปˆ เป€เบญเบเบฐเบชเบฒเบ™ Microsoft เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™.

เปƒเบ™เบชเบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡, เบšเบญเบเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบกเบตเบกเบฑเบ™เบเบฑเบšเบชเบฐเบšเบฑเบš, เปเบฅเบฐ 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 เป„เบ”เป‰เบชเบฐเปเบ”เบ‡เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบงเปˆเบฒเป€เบ›เบฑเบ™เบžเบฒเบชเบฒเบชเบฒเบเบปเบ™เบ—เบตเปˆเบ”เบตเป€เบฅเบตเบ”, เป€เบŠเบดเปˆเบ‡เบ”เบตเป€เบฅเบตเบ”เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบชเบฐเบ–เบดเบ•เบด, เปเบ•เปˆเบเบฑเบ‡เป€เบ›เบฑเบ™ "เบŠเบฑเป‰เบ™" เบ—เบตเปˆเบ”เบตเป€เบฅเบตเบ”เบฅเบฐเบซเบงเปˆเบฒเบ‡เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบญเบทเปˆเบ™เป†.

เบฅเบฒเบเบ‡เบฒเบ™เบ›เบฐเบˆเปเบฒเบงเบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบชเบธเบ‚เบฐเบžเบฒเบšเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡ virtual เป‚เบ”เบเปƒเบŠเป‰ R เปเบฅเบฐ PowerShell

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™