R, PowerShell เดŽเดจเตเดจเดฟเดต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เดจเตเด•เดณเตเดŸเต† เด†เดฐเต‹เด—เตเดฏเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดชเตเดฐเดคเดฟเดฆเดฟเดจ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเตเด•เตพ

R, PowerShell เดŽเดจเตเดจเดฟเดต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เดจเตเด•เดณเตเดŸเต† เด†เดฐเต‹เด—เตเดฏเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดชเตเดฐเดคเดฟเดฆเดฟเดจ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเตเด•เตพ

เดŽเตปเดŸเตเดฐเดฟ

เด—เตเดกเต เด†เดซเตเดฑเตเดฑเตผเดจเต‚เตบ. เด…เดฐ เดตเตผเดทเดฎเดพเดฏเดฟ เดžเด™เตเด™เตพ เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เดจเตเด•เดณเตเดŸเต† เดจเดฟเดฒเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต (เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพ) เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต (เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ). เดŽเดจเตเดฑเต† เดธเตƒเดทเตเดŸเดฟ เด…เดจเตเดญเดตเดตเตเด‚ เด•เต‹เดกเตเด‚ เดชเด™เตเด•เดฟเดŸเดพเตป เดžเดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต. เดตเดฟเดฎเตผเดถเดจเดคเตเดคเดฟเดจเตเด‚ เดˆ เดฎเต†เดฑเตเดฑเต€เดฐเดฟเดฏเตฝ เด†เตผเด•เตเด•เต†เด™เตเด•เดฟเดฒเตเด‚ เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเด•เตเดฎเต†เดจเตเดจเตเด‚ เดžเดพเตป เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต.

เด†เดตเดถเตเดฏเดคเตเดคเดฟเดจเตเดฑเต† เดฐเต‚เดชเต€เด•เดฐเดฃเด‚

เดžเด™เตเด™เตพเด•เตเด•เต เดงเดพเดฐเดพเดณเด‚ เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เดจเตเด•เตพ เด‰เดฃเตเดŸเต (เดเด•เดฆเต‡เดถเด‚ 1500 VM-เด•เตพ 3 vCenters-เตฝ เด‰เดŸเดจเต€เดณเด‚ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเต). เดชเตเดคเดฟเดฏเดต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเด•เดฏเตเด‚ เดชเดดเดฏเดต เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เด•เตเดฐเดฎเด‚ เดจเดฟเดฒเดจเดฟเตผเดคเตเดคเตเดจเตเดจเดคเดฟเดจเต, VM-เด•เดณเต† เด‰เดชเดธเดฟเดธเตเดฑเตเดฑเดฎเตเด•เดณเดพเดฏเดฟ เดตเดฟเดญเดœเดฟเด•เตเด•เดพเดจเตเด‚ เด…เดต เดชเดฐเต€เด•เตเดทเดฃเด™เตเด™เดณเดพเดฃเต‹ เดŽเดจเตเดจเตเด‚ เด†เดฐเดฟเดฒเต‚เดŸเต†, เดŽเดชเตเดชเต‹เตพ เดธเตƒเดทเตเดŸเดฟเดšเตเดšเดคเดพเดฃเต†เดจเตเดจเตเด‚ เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต vCenter-เดฒเต‡เด•เตเด•เต เดจเดฟเดฐเดตเดงเดฟ เด‡เดทเตโ€ŒเดŸเดพเดจเตเดธเตƒเดค เดซเต€เตฝเดกเตเด•เตพ เดšเต‡เตผเดคเตเดคเต. เดฎเดพเดจเตเดทเดฟเด• เด˜เดŸเด•เด‚ เดชเด•เตเดคเดฟเดฏเดฟเดฒเดงเดฟเด•เด‚ เดฎเต†เดทเต€เดจเตเด•เดณเตเด‚ เดถเต‚เดจเตเดฏเดฎเดพเดฏ เดซเต€เตฝเดกเตเด•เดณเดพเตฝ เด…เดตเดถเต‡เดทเดฟเดšเตเดšเตเดตเต†เดจเตเดจ เดตเดธเตเดคเตเดคเดฏเดฟเดฒเต‡เด•เตเด•เต เดจเดฏเดฟเดšเตเดšเต, เด‡เดคเต เดœเต‹เดฒเดฟเดฏเต† เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเด•เตเด•เดฟ. เด“เดฐเต‹ เด†เดฑเตเดฎเดพเดธเดคเตเดคเดฟเดฒเตŠเดฐเดฟเด•เตเด•เตฝ, เด†เดฐเต†เด™เตเด•เดฟเดฒเตเด‚ เดชเดฐเดฟเดญเตเดฐเดพเดจเตเดคเดฐเดพเดฏเดฟ เดˆ เดกเดพเดฑเตเดฑ เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เดคเตเดŸเด™เตเด™เดฟ, เดชเด•เตเดทเต‡ เด’เดจเตเดจเดฐ เด†เดดเตเดšเดฏเตเด•เตเด•เต เดถเต‡เดทเด‚ เดซเดฒเด‚ เดชเตเดฐเดธเด•เตเดคเดฎเดพเด•เตเดจเตเดจเดคเต เด…เดตเดธเดพเดจเดฟเดชเตเดชเดฟเดšเตเดšเต.
เดฎเต†เดทเต€เดจเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ, เด…เดต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดชเตเดฐเด•เตเดฐเดฟเดฏ เดฎเตเดคเดฒเดพเดฏเดต เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเดฎเต†เดจเตเดจเต เดŽเดฒเตเดฒเดพเดตเดฐเตเด‚ เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเต เดžเดพเตป เด‰เดŸเตป เดคเดจเตเดจเต† เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดŸเตเดŸเต†. เด‡เดคเตเดฏเดพเดฆเดฟ. เด…เดคเต‡ เดธเดฎเดฏเด‚, เดŽเดฒเตเดฒเดพเดตเดฐเตเด‚ เดˆ เดชเตเดฐเด•เตเดฐเดฟเดฏ เด•เตผเดถเดจเดฎเดพเดฏเดฟ เดชเดฟเดจเตเดคเตเดŸเดฐเตเดจเตเดจเต, เดŽเดฒเตเดฒเดพเด‚ เด•เตเดฐเดฎเดคเตเดคเดฟเดฒเดพเดฃเต. เดจเดฟเตผเดญเดพเด—เตเดฏเดตเดถเดพเตฝ, เด‡เดตเดฟเดŸเต† เด…เด™เตเด™เดจเต†เดฏเดฒเตเดฒ, เดชเด•เตเดทเต‡ เด‡เดคเต เดฒเต‡เด–เดจเดคเตเดคเดฟเดจเตเดฑเต† เดตเดฟเดทเดฏเดฎเดฒเตเดฒ :)

เดชเตŠเดคเตเดตเต‡, เดซเต€เตฝเดกเตเด•เตพ เดชเต‚เดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เด•เตƒเดคเตเดฏเดค เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเต เดฏเดพเดจเตเดคเตเดฐเดฟเด•เดฎเดพเด•เตเด•เดพเดจเดพเดฃเต เดคเต€เดฐเตเดฎเดพเดจเด‚.
เดŽเดฒเตเดฒเดพ เด‰เดคเตเดคเดฐเดตเดพเดฆเดฟเดคเตเดคเดฎเตเดณเตเดณ เดŽเดžเตเดšเดฟเดจเต€เดฏเตผเดฎเดพเตผเด•เตเด•เตเด‚ เด…เดตเดฐเตเดŸเต† เดฎเต‡เดฒเดงเดฟเด•เดพเดฐเดฟเด•เตพเด•เตเด•เตเด‚ เดคเต†เดฑเตเดฑเดพเดฏเดฟ เดชเต‚เดฐเดฟเดชเตเดชเดฟเดšเตเดš เดฎเต†เดทเต€เดจเตเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เด‰เดณเตเดณ เด’เดฐเต เดฆเตˆเดจเด‚เดฆเดฟเดจ เด•เดคเตเดคเต เด’เดฐเต เดจเดฒเตเดฒ เดคเตเดŸเด•เตเด•เดฎเดพเดฃเต†เดจเตเดจเต เดžเด™เตเด™เตพ เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต.

เดˆ เดธเดฎเดฏเดคเตเดคเต, เดŽเดจเตเดฑเต† เดธเดนเดชเตเดฐเดตเตผเดคเตเดคเด•เดฐเดฟเดฒเตŠเดฐเดพเตพ PowerShell-เตฝ เด’เดฐเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟเดฏเดฟเดฐเตเดจเตเดจเต, เด…เดคเต เดŽเดฒเตเดฒเดพ เดฆเดฟเดตเดธเดตเตเด‚ เด’เดฐเต เดทเต†เดกเตเดฏเต‚เตพ เด…เดจเตเดธเดฐเดฟเดšเตเดšเต เดŽเดฒเตเดฒเดพ vCenters-เดฒเต†เดฏเตเด‚ เดŽเดฒเตเดฒเดพ เดฎเต†เดทเต€เดจเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฟเดตเดฐเด™เตเด™เตพ เดถเต‡เด–เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ 3 csv เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเตเด•เตพ (เด“เดฐเต‹เดจเตเดจเตเด‚ เดธเตเดตเดจเตเดคเด‚ vCenter-เดจเต เดตเต‡เดฃเตเดŸเดฟ) เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต. เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ เดกเดฟเดธเตเด•เต. เดˆ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเดฏเดฟ เดŽเดŸเตเด•เตเด•เดพเดจเตเด‚ เดžเด™เตเด™เตพเด•เตเด•เต เด•เตเดฑเดšเตเดšเต เด…เดจเตเดญเดตเด‚ เด‰เดณเตเดณ R เดญเดพเดท เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเตเดณเตเดณ เดชเดฐเดฟเดถเต‹เดงเดจเด•เตพเด•เตเด•เตŠเดชเตเดชเด‚ เด…เดจเตเดฌเดจเตเดงเดฎเดพเดฏเดฟ เดจเตฝเด•เดพเดจเตเด‚ เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต.

เด…เดจเตเดคเดฟเดฎเดฎเดพเด•เตเด•เตฝ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเดฟเตฝ, เดชเดฐเดฟเดนเดพเดฐเด‚ เดฎเต†เดฏเดฟเตฝ เดตเดดเดฟ เดตเดฟเดตเดฐเด™เตเด™เตพ เดจเต‡เดŸเดฟเดฏเต†เดŸเตเดคเตเดคเต, เดชเตเดฐเดงเดพเดจเดตเตเด‚ เดšเดฐเดฟเดคเตเดฐเดชเดฐเดตเตเดฎเดพเดฏ เดชเดŸเตเดŸเดฟเด•เดฏเตเดณเตเดณ เด’เดฐเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต (เด‡เดคเดฟเตฝ เดชเดฟเดจเตเดจเต€เดŸเต เด•เต‚เดŸเตเดคเตฝ), เด•เต‚เดŸเดพเดคเต† vM-เดจเตเดฑเต† เดฏเดฅเดพเตผเดคเตเดฅ เดธเตเดฐเดทเตโ€ŒเดŸเดพเด•เตเด•เดณเต†เดฏเตเด‚ เด…เดต เดธเตƒเดทเตโ€ŒเดŸเดฟเดšเตเดš เดธเดฎเดฏเดคเตเดคเต†เดฏเตเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดพเตป vSphere เดฒเต‹เด—เตเด•เดณเตเดŸเต† เดตเดฟเดถเด•เดฒเดจเด‚.

IDE RStudio Desktop เด‰เด‚ PowerShell ISE เด‰เด‚ เดตเดฟเด•เดธเดจเดคเตเดคเดฟเดจเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต.

เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ เดตเดฟเตปเดกเต‹เดธเต เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เดจเดฟเตฝ เดจเดฟเดจเตเดจเดพเดฃเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเต.

เดชเตŠเดคเตเดตเดพเดฏ เดฏเตเด•เตเดคเดฟเดฏเตเดŸเต† เดตเดฟเดตเดฐเดฃเด‚.

เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เดณเตเดŸเต† เดชเตŠเดคเตเดตเดพเดฏ เดฏเตเด•เตเดคเดฟ เด‡เดชเตเดฐเด•เดพเดฐเดฎเดพเดฃเต.

  • เด’เดฐเต เดชเดตเตผเดทเต†เตฝ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเด™เตเด™เตพ เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เดจเตเด•เดณเดฟเดฒเต† เดกเดพเดฑเตเดฑ เดถเต‡เด–เดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเต† เดžเด™เตเด™เตพ R เดฎเตเด–เต‡เดจ เดตเดฟเดณเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดซเดฒเด‚ เด’เดฐเต csv เด†เดฏเดฟ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เดญเดพเดทเด•เตพ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดตเดฟเดชเดฐเต€เดค เด‡เดŸเดชเต†เดŸเตฝ เดธเดฎเดพเดจเดฎเดพเดฏเดฟ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. (เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเตเดŸเต† เดฐเต‚เดชเดคเตเดคเดฟเตฝ R-เตฝ เดจเดฟเดจเตเดจเต PowerShell-เดฒเต‡เด•เตเด•เต เดจเต‡เดฐเดฟเดŸเตเดŸเต เดกเดพเดฑเตเดฑ เดกเตเดฐเตˆเดตเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดธเดพเดงเตเดฏเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต, เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเดพเดฃเต, เด•เต‚เดŸเดพเดคเต† เด‡เดจเตเดฑเตผเดฎเต€เดกเดฟเดฏเดฑเตเดฑเต csvs เด‰เดณเตเดณเดคเต เดกเต€เดฌเด—เต เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดฎเดฑเตเดฑเตŠเดฐเดพเดณเตเดฎเดพเดฏเดฟ เด‡เดจเตเดฑเตผเดฎเต€เดกเดฟเดฏเดฑเตเดฑเต เดซเดฒเด™เตเด™เตพ เดชเด™เตเด•เดฟเดŸเดพเดจเตเด‚ เดŽเดณเตเดชเตเดชเดฎเดพเด•เตเด•เตเดจเตเดจเต).
  • R เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดžเด™เตเด™เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจ เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเตเดŸเต† เดซเต€เตฝเดกเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดžเด™เตเด™เตพ เดธเดพเดงเตเดตเดพเดฏ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เด‰เดฃเตเดŸเดพเด•เตเด•เตเดจเตเดจเต. - เดตเดฟเดตเดฐ เด•เดคเตเดคเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดˆ เดซเต€เตฝเดกเตเด•เดณเตเดŸเต† เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจ เด’เดฐเต เดตเต‡เดกเต เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต เดžเด™เตเด™เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเต "เด‡เดฒเตเดฒ, เดชเด•เตเดทเต‡ เดžเดพเตป เด‡เดคเต เดŽเด™เตเด™เดจเต† เดชเต‚เดฐเดฟเดชเตเดชเดฟเด•เตเด•เดฃเด‚?" เดŽเดจเตเดจ เดธเดนเดชเตเดฐเดตเตผเดคเตเดคเด•เดฐเตเดŸเต† เดšเต‹เดฆเตเดฏเด™เตเด™เตพเด•เตเด•เตเดณเตเดณ เด‰เดคเตเดคเดฐเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚.
  • R เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต csv-เตฝ เดจเดฟเดจเตเดจเต เดŽเดฒเตเดฒเดพ VM-เด•เตพเด•เตเด•เตเดฎเตเดณเตเดณ เดกเดพเดฑเตเดฑ เดžเด™เตเด™เตพ เดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เด’เดฐเต เดกเดพเดฑเตเดฑเดพเดซเตเดฐเต†เดฏเดฟเด‚ เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดจเดพเดตเดถเตเดฏ เดซเต€เตฝเดกเตเด•เตพ เดจเต€เด•เตเด•เด‚เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เดŽเดฒเตเดฒเดพ VM-เด•เตพเด•เตเด•เตเดฎเดพเดฏเตเดณเตเดณ เดธเด‚เด—เตเดฐเดน เดตเดฟเดตเดฐเด™เตเด™เตพ เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจ เด’เดฐเต เดตเดฟเดตเดฐ xlsx เดชเตเดฐเดฎเดพเดฃเด‚ เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเต เดžเด™เตเด™เตพ เดชเด™เตเด•เดฟเดŸเตเดŸ เด’เดฐเต เด‰เดฑเดตเดฟเดŸเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เด…เดชเตโ€Œเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต.
  • เดŽเดฒเตเดฒเดพ VM-เด•เตพเด•เตเด•เตเดฎเดพเดฏเตเดณเตเดณ เดกเดพเดฑเตเดฑเดพเดซเตเดฐเต†เดฏเดฟเดฎเดฟเดฒเต‡เด•เตเด•เต เดซเต€เตฝเดกเตเด•เตพ เดชเต‚เดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เด•เตƒเดคเตเดฏเดคเดฏเตเด•เตเด•เดพเดฏเดฟ เดžเด™เตเด™เตพ เดŽเดฒเตเดฒเดพ เดชเดฐเดฟเดถเต‹เดงเดจเด•เดณเตเด‚ เดชเตเดฐเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเตเด‚ เดคเต†เดฑเตเดฑเดพเดฏเดฟ เดชเต‚เดฐเดฟเดชเตเดชเดฟเดšเตเดš เดซเต€เตฝเดกเตเด•เดณเตเดณเตเดณ (เดˆ เดซเต€เตฝเดกเตเด•เตพ เดฎเดพเดคเตเดฐเด‚) VM-เด•เตพ เดฎเดพเดคเตเดฐเด‚ เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจ เด’เดฐเต เดชเดŸเตเดŸเดฟเด• เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.
  • เดคเดคเตเดซเดฒเดฎเดพเดฏเตเดฃเตเดŸเดพเด•เตเดจเตเดจ VM-เด•เดณเตเดŸเต† เดฒเดฟเดธเตเดฑเตเดฑเต เดžเด™เตเด™เตพ เดฎเดฑเตเดฑเตŠเดฐเต PowerShell เดธเตโ€Œเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตโ€Œเด•เตเด•เตเดจเตเดจเต, เด…เดคเต VM เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตฝ เด‡เดตเดจเตเดฑเตเด•เตพเด•เตเด•เดพเดฏเตเดณเตเดณ vCenter เดฒเต‹เด—เตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด‚, เด‡เดคเต VM-เดจเตเดฑเต† เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เดฒเดฟเดจเตเดฑเต†เดฏเตเด‚ เด‰เดฆเตเดฆเต‡เดถเดฟเดšเตเดš เดธเตเดฐเดทเตโ€ŒเดŸเดพเดตเดฟเดจเตเดฑเต†เดฏเตเด‚ เด•เดฃเด•เตเด•เดพเด•เตเด•เดฟเดฏ เดธเดฎเดฏเด‚ เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเด‚. เด‡เดคเต เด†เดฐเตเดŸเต† เด•เดพเดฑเดพเดฃเต†เดจเตเดจเต เด†เดฐเตเด‚ เดธเดฎเตเดฎเดคเดฟเด•เตเด•เดพเดคเตเดค เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเดฒเดพเดฃเต เด‡เดคเต. เดˆ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดตเต‡เด—เดคเตเดคเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดฟเดฒเตเดฒ, เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเตเด‚ เดงเดพเดฐเดพเดณเด‚ เดฒเต‹เด—เตเด•เตพ เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เด…เดคเดฟเดจเดพเตฝ เดžเด™เตเด™เตพ เด•เดดเดฟเดžเตเดž 2 เด†เดดเตโ€Œเดšเด•เตพ เดฎเดพเดคเตเดฐเด‚ เดจเต‹เด•เตเด•เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เด’เดฐเต‡ เดธเดฎเดฏเด‚ เดจเดฟเดฐเดตเดงเดฟ VM-เด•เดณเดฟเดฒเต† เดตเดฟเดตเดฐเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ เดคเดฟเดฐเดฏเดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดตเตผเด•เตเด•เตเดซเตเดฒเต‹ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เด‰เดฆเดพเดนเดฐเดฃ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฟเตฝ เดˆ เดฎเต†เด•เตเด•เดพเดจเดฟเดธเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดตเดฟเดถเดฆเดฎเดพเดฏ เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดžเด™เตเด™เตพ เดซเดฒเด‚ เด’เดฐเต csv-เดฒเต‡เด•เตเด•เต เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต, เด…เดคเต เดตเต€เดฃเตเดŸเตเด‚ R-เดฒเต‡เด•เตเด•เต เดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต.
  • เดžเด™เตเด™เตพ เดฎเดจเต‹เดนเดฐเดฎเดพเดฏเดฟ เดซเต‹เตผเดฎเดพเดฑเตเดฑเต เดšเต†เดฏเตโ€Œเดค xlsx เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเตฝ เดคเต†เดฑเตเดฑเดพเดฏเดฟ เดชเต‚เดฐเดฟเดชเตเดชเดฟเดšเตเดš เดซเต€เตฝเดกเตเด•เตพ เดšเตเดตเดชเตเดชเต เดจเดฟเดฑเดคเตเดคเดฟเตฝ เดนเตˆเดฒเตˆเดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด‚, เดšเดฟเดฒ เด•เต‹เดณเด™เตเด™เดณเดฟเตฝ เดซเดฟเตฝเดŸเตเดŸเดฑเตเด•เตพ เดชเตเดฐเดฏเต‹เด—เดฟเด•เตเด•เตเด‚, เด•เต‚เดŸเดพเดคเต† เด‰เดฆเตเดฆเต‡เดถเดฟเดšเตเดš เดธเตเดฐเดทเตโ€ŒเดŸเดพเด•เตเด•เดณเตเด‚ VM เดธเตƒเดทเตโ€ŒเดŸเดฟเดšเตเดš เดธเดฎเดฏเดตเตเด‚ เด…เดŸเด™เตเด™เตเดจเตเดจ เด…เดงเดฟเด• เด•เต‹เดณเด™เตเด™เตพ เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚.
  • เดžเด™เตเด™เตพ เด’เดฐเต เด‡เดฎเต†เดฏเดฟเตฝ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดตเดฟเดŸเต† เดžเด™เตเด™เตพ เดธเดพเดงเตเดตเดพเดฏ เดซเต€เตฝเดกเต เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดตเดฟเดตเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเตเด‚ เดซเต€เตฝเดกเตเด•เดณเดฟเตฝ เดคเต†เดฑเตเดฑเดพเดฏเดฟ เดชเต‚เดฐเดฟเดชเตเดชเดฟเดšเตเดš เด’เดฐเต เดชเดŸเตเดŸเดฟเด•เดฏเตเด‚ เด…เดฑเตเดฑเดพเดšเตเดšเตเดšเต†เดฏเตเดฏเตเดจเตเดจเต. เดคเต†เดฑเตเดฑเดพเดฏเดฟ เดธเตƒเดทเตโ€ŒเดŸเดฟเดšเตเดš VM-เด•เดณเตเดŸเต† เด†เด•เต† เดŽเดฃเตเดฃเด‚, เดชเด™เตเด•เดฟเดŸเตเดŸ เด‰เดฑเดตเดฟเดŸเดคเตเดคเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดฒเดฟเด™เตเด•เต, เดชเตเดฐเดšเต‹เดฆเดจเดพเดคเตเดฎเด• เดšเดฟเดคเตเดฐเด‚ เดŽเดจเตเดจเดฟเดต เดตเดพเดšเด•เดคเตเดคเดฟเตฝ เดžเด™เตเด™เตพ เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต. เดคเต†เดฑเตเดฑเดพเดฏเดฟ เดชเต‚เดฐเดฟเดชเตเดชเดฟเดšเตเดš VM-เด•เตพ เด‡เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดธเดจเตเดคเต‹เดทเด•เดฐเดฎเดพเดฏ เด’เดฐเต เดชเตเดฐเดšเต‹เดฆเดจเดพเดคเตเดฎเด• เดšเดฟเดคเตเดฐเดตเตเดฎเดพเดฏเดฟ เดžเด™เตเด™เตพ เดฎเดฑเตเดฑเตŠเดฐเต เด•เดคเตเดคเต เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต.
  • เดšเดฐเดฟเดคเตเดฐเดชเดฐเดฎเดพเดฏ เดชเดŸเตเดŸเดฟเด•เด•เดณเตเดŸเต† เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟเดฏ เดธเด‚เดตเดฟเดงเดพเดจเด‚ เด•เดฃเด•เตเด•เดฟเดฒเต†เดŸเตเดคเตเดคเต เดžเด™เตเด™เตพ SQL เดธเต†เตผเดตเตผ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต† เดŽเดฒเตเดฒเดพ เดตเดฟเดŽเดฎเตเดฎเตเด•เตพเด•เตเด•เตเดฎเดพเดฏเดฟ เดกเดพเดฑเตเดฑ เดฑเต†เด•เตเด•เต‹เตผเดกเตเดšเต†เดฏเตเดฏเตเดจเตเดจเต (เดตเดณเดฐเต† เดฐเดธเด•เดฐเดฎเดพเดฏ เด’เดฐเต เดธเด‚เดตเดฟเดงเดพเดจเด‚ - เด…เดคเดฟเดจเต† เด•เตเดฑเดฟเดšเตเดšเต เด•เต‚เดŸเตเดคเตฝ เดชเดฟเดจเตเดจเต€เดŸเต)

เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพ

เดชเตเดฐเดงเดพเดจ 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")

PowerShell-เตฝ vm-เดจเตเดฑเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต

# ะ”ะฐะฝะฝั‹ะต ะดะปั ะฟะพะดะบะปัŽั‡ะตะฝะธั ะธ ะดั€ัƒะณะธะต ะฟะตั€ะตะผะตะฝะฝั‹ะต
$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
}

เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เดจเตเด•เดณเตเดŸเต† เดธเตเดฐเดทเตโ€ŒเดŸเดพเด•เตเด•เดณเต†เดฏเตเด‚ เด…เดต เดธเตƒเดทเตโ€ŒเดŸเดฟเดšเตเดš เดคเต€เดฏเดคเดฟเดฏเต†เดฏเตเด‚ เดฒเต‹เด—เตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเต‡เตผเดคเดฟเดฐเดฟเดšเตเดšเต†เดŸเตเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดชเดตเตผเดทเต†เตฝ เดธเตโ€Œเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต

# ะŸัƒั‚ัŒ ะบ ั„ะฐะนะปัƒ, ะธะท ะบะพั‚ะพั€ะพะณะพ ะฑัƒะดะตะผ ะดะพัั‚ะฐะฒะฐั‚ัŒ ัะฟะธัะพะบ 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)

เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเต:

R, PowerShell เดŽเดจเตเดจเดฟเดต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เดจเตเด•เดณเตเดŸเต† เด†เดฐเต‹เด—เตเดฏเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดชเตเดฐเดคเดฟเดฆเดฟเดจ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเตเด•เตพ

เดตเดฟเตปเดกเต‹เดธเต เดทเต†เดกเตเดฏเต‚เดณเตผ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดฐเดธเด•เดฐเดฎเดพเดฏ เด’เดฐเต เดจเตเดฏเต‚เดจเตปเดธเตเด‚ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเต. เดถเดฐเดฟเดฏเดพเดฏ เด…เดตเด•เดพเดถเด™เตเด™เดณเตเด‚ เดธเดœเตเดœเต€เด•เดฐเดฃเด™เตเด™เดณเตเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเดคเต เด…เดธเดพเดงเตเดฏเดฎเดพเดฏเดคเดฟเดจเดพเตฝ เดŽเดฒเตเดฒเดพเด‚ เด†เดตเดถเตเดฏเดฎเตเดณเตเดณเดคเตเดชเต‹เดฒเต† เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด‚. เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, R เดฒเตˆเดฌเตเดฐเดฑเดฟ เด•เดฃเตเดŸเต†เดคเตเดคเดฟ, เด…เดคเต เดคเดจเตเดจเต† เด’เดฐเต R เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดŸเดพเดธเตเด•เต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เดฒเต‹เด—เต เดซเดฏเดฒเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดชเต‹เดฒเตเด‚ เดฎเดฑเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ. เด…เดชเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดšเตเดฎเดคเดฒ เดธเตเดตเดฎเต‡เดงเดฏเดพ เดถเดฐเดฟเดฏเดพเด•เตเด•เดพเด‚.

เดตเดฟเตปเดกเต‹เดธเต เดทเต†เดกเตเดฏเต‚เดณเดฑเดฟเตฝ เด’เดฐเต เดŸเดพเดธเตเด•เต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจ เดฐเดฃเตเดŸเต เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เดณเตเดณเตเดณ R เด•เต‹เดกเดฟเดจเตเดฑเต† เด’เดฐเต เดญเดพเด—เด‚

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-เดฒเต† เดฒเต‹เด—เตเด•เตพ เด‡เดคเดฟเดจเด•เด‚ เดคเดจเตเดจเต† เดคเต€เตผเดจเตเดจเต. เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดŽเดฒเตเดฒเดพ เดฆเดฟเดตเดธเดตเตเด‚ เด’เดฐเต เดซเต‹เตพเดกเดฑเดฟเตฝ เดซเดฏเดฒเตเด•เตพ เด‡เดŸเตเด•เดฏเตเด‚ เด…เดคเต เดตเตƒเดคเตเดคเดฟเดฏเดพเด•เตเด•เดพเดคเดฟเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเตฝ (เด“เตผเด•เตเด•เตเดฎเตเดชเต‹เตพ เดžเด™เตเด™เตพ เด…เดคเต เดžเด™เตเด™เดณเตเดŸเต† เด•เตˆเด•เตŠเดฃเตเดŸเต เดตเตƒเดคเตเดคเดฟเดฏเดพเด•เตเด•เตเดจเตเดจเต), เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเดดเดฏ เดซเดฏเดฒเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเต เดˆ เดตเดฟเดŽเด‚ เด‡เดฒเตเดฒเดพเดคเตเดค เด†เดฆเตเดฏเดคเตเดคเต† เดซเดฏเตฝ เด•เดฃเตเดŸเต†เดคเตเดคเดพเดจเดพเด•เตเด‚. เดŽเดจเตเดจเดพเตฝ เด…เดคเต เดฐเดธเด•เดฐเดฎเดฒเตเดฒ.

เด’เดฐเต เดšเดฐเดฟเดคเตเดฐเดชเดฐเดฎเดพเดฏ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเดšเตเดšเต.

MS SQL เดธเต†เตผเดตเดฑเดฟเดจเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดค - เดธเดฟเดธเตเดฑเตเดฑเด‚ เดชเดคเดฟเดชเตเดชเต เดŸเต†เดฎเตเดชเดฑเตฝ เดŸเต‡เดฌเดฟเตพ - เดฐเด•เตเดทเดฏเตเด•เตเด•เดพเดฏเดฟ เดตเดจเตเดจเต. เด‡เดคเต เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เดคเดพเตฝเด•เตเด•เดพเดฒเดฟเด• (เดคเดพเดคเตเด•เดพเดฒเดฟเด•เดฎเดฒเตเดฒ) เดชเดŸเตเดŸเดฟเด•เด•เดณเดพเดฏเดฟ เดตเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเต.

เดŽเดจเตเดจเดคเดฟเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดตเดพเดฏเดฟเด•เตเด•เดพเด‚ เด”เดฆเตเดฏเต‹เด—เดฟเด• Microsoft เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเตป.

เดšเตเดฐเตเด•เตเด•เดคเตเดคเดฟเตฝ, เดžเด™เตเด™เตพ เด’เดฐเต เดŸเต‡เดฌเดฟเตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เดชเดคเดฟเดชเตเดชเดฟเดจเตŠเดชเตเดชเด‚ เดžเด™เตเด™เตพเด•เตเด•เดคเต เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เดชเดฑเดฏเตเด•, เด•เต‚เดŸเดพเดคเต† SQL เดธเต†เตผเดตเตผ เดˆ เดชเดŸเตเดŸเดฟเด•เดฏเดฟเตฝ 2 เด…เดงเดฟเด• เดคเต€เดฏเดคเดฟ เดธเดฎเดฏ เด•เต‹เดณเด™เตเด™เดณเตเด‚ (เดฑเต†เด•เตเด•เต‹เตผเดกเต เดธเตƒเดทเตเดŸเดฟเดšเตเดš เดคเต€เดฏเดคเดฟเดฏเตเด‚ เดฑเต†เด•เตเด•เต‹เตผเดกเดฟเดจเตเดฑเต† เด•เดพเดฒเดนเดฐเดฃ เดคเต€เดฏเดคเดฟเดฏเตเด‚) เดฎเดพเดฑเตเดจเตเดจ เด’เดฐเต เด…เดงเดฟเด• เดชเดŸเตเดŸเดฟเด•เดฏเตเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต. เดŽเดดเตเดคเดชเตเดชเต†เดŸเตเด‚. เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดžเด™เตเด™เตพเด•เตเด•เต เด•เดพเดฒเดฟเด•เดฎเดพเดฏ เดตเดฟเดตเดฐเด™เตเด™เตพ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเดฟเตฝ เดจเตฝเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เดณเดฟเดฒเต‚เดŸเต† เดฒเดณเดฟเดคเดฎเดพเดฏ เด…เดจเตเดตเต‡เดทเดฃเด™เตเด™เดณเดฟเดฒเต‚เดŸเต†, เดจเดฎเตเด•เตเด•เต เด’เดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เดจเตเดฑเต† เดœเต€เดตเดฟเดค เดšเด•เตเดฐเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด’เดฐเต เดจเดฟเดถเตเดšเดฟเดค เด˜เดŸเตเดŸเดคเตเดคเดฟเตฝ เดŽเดฒเตเดฒเดพ VM-เด•เดณเตเดŸเต†เดฏเตเด‚ เด…เดตเดธเตเดฅ เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚. เดธเดฎเดฏเดคเตเดคเต.

เด’เดฐเต เดชเตเดฐเด•เดŸเดจ เดตเต€เด•เตเดทเดฃเด•เต‹เดฃเดฟเตฝ, เดคเดพเตฝเด•เตเด•เดพเดฒเดฟเด• เดชเดŸเตเดŸเดฟเด•เดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดฑเตˆเดฑเตเดฑเต เด‡เดŸเดชเดพเดŸเต เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเดจเตเดจเดคเตเดตเดฐเต† เดชเตเดฐเดงเดพเดจ เดชเดŸเตเดŸเดฟเด•เดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดฑเตˆเดฑเตเดฑเต เด‡เดŸเดชเดพเดŸเต เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เดฟเดฒเตเดฒ. เด†. เดงเดพเดฐเดพเดณเด‚ เดฑเตˆเดฑเตเดฑเต เด“เดชเตเดชเดฑเต‡เดทเดจเตเด•เดณเตเดณเตเดณ เดชเดŸเตเดŸเดฟเด•เด•เดณเดฟเตฝ, เดˆ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดœเดพเด—เตเดฐเดคเดฏเต‹เดŸเต† เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฃเด‚, เดŽเดจเตเดจเดพเตฝ เดžเด™เตเด™เดณเตเดŸเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เด‡เดคเต เดตเดณเดฐเต† เดฐเดธเด•เดฐเดฎเดพเดฏ เด’เดฐเต เด•เดพเดฐเตเดฏเดฎเดพเดฃเต.

เดฎเต†เด•เตเด•เดพเดจเดฟเดธเด‚ เดถเดฐเดฟเดฏเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดŽเดจเดฟเด•เตเด•เต R-เตฝ เด’เดฐเต เดšเต†เดฑเดฟเดฏ เด•เต‹เดกเต เดšเต‡เตผเด•เตเด•เต‡เดฃเตเดŸเดฟ เดตเดจเตเดจเต, เด…เดคเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเตฝ เดธเด‚เดญเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดตเดฏเตเดฎเดพเดฏเดฟ เดŽเดฒเตเดฒเดพ VM-เด•เตพเด•เตเด•เตเดฎเตเดณเตเดณ เดกเดพเดฑเตเดฑเดฏเตเดฎเดพเดฏเดฟ เดคเดพเดฐเดคเดฎเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เด…เดคเดฟเดฒเต‡เด•เตเด•เต เดฎเดพเดฑเดฟเดฏ เดตเดฐเดฟเด•เตพ เดฎเดพเดคเตเดฐเด‚ เดŽเดดเตเดคเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚. เด•เต‹เดกเต เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเต เดฌเตเดฆเตเดงเดฟเดชเดฐเดฎเดฒเตเดฒ; เด‡เดคเต compareDF เดฒเตˆเดฌเตเดฐเดฑเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เดชเด•เตเดทเต‡ เดžเดพเตป เด…เดคเต เดšเตเดตเดŸเต† เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚.

เด’เดฐเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเดฒเต‡เด•เตเด•เต เดกเดพเดฑเตเดฑ เดŽเดดเตเดคเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ 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)

เด†เด•เต†

เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟเดฏเดคเดฟเดจเตเดฑเต† เดซเดฒเดฎเดพเดฏเดฟ, เดเดคเดพเดจเตเด‚ เดฎเดพเดธเด™เตเด™เตพเด•เตเด•เตเดณเตเดณเดฟเตฝ เด•เตเดฐเดฎเด‚ เดชเตเดจเดƒเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดชเดฐเดฟเดชเดพเดฒเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต. เดšเดฟเดฒเดชเตเดชเต‹เตพ เดคเต†เดฑเตเดฑเดพเดฏเดฟ เดชเต‚เดฐเดฟเดชเตเดชเดฟเดšเตเดš VM-เด•เตพ เดฆเตƒเดถเตเดฏเดฎเดพเด•เตเด‚, เดŽเดจเตเดจเดพเตฝ เดธเตโ€Œเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เด’เดฐเต เดจเดฒเตเดฒ เด“เตผเดฎเตเดฎเดชเตเดชเต†เดŸเตเดคเตเดคเดฒเดพเดฏเดฟ เดตเตผเดคเตเดคเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด’เดฐเต เด…เดชเต‚เตผเดต VM เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฏเดฟ 2 เดฆเดฟเดตเดธเดคเตเดคเต‡เด•เตเด•เต เดฒเดฟเดธเตเดฑเตเดฑเดฟเตฝ เดชเตเดฐเดตเต‡เดถเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚.

เดšเดฐเดฟเดคเตเดฐเดชเดฐเดฎเดพเดฏ เดกเดพเดฑเตเดฑ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด…เดŸเดฟเดคเตเดคเดฑเดฏเตเด‚ เด‰เดฃเตเดŸเดพเด•เตเด•เดฟ.

เด‡เดคเดฟเตฝ เดญเต‚เดฐเดฟเดญเดพเด—เดตเตเด‚ เดฎเตเดŸเตเดŸเดฟเตฝ เด…เดฒเตเดฒ, เดชเตเดฐเดคเตเดฏเต‡เด• เดธเต‹เดซเตโ€Œเดฑเตเดฑเตโ€Œเดตเต†เดฏเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดฎเต†เดจเตเดจเต เดตเตเดฏเด•เตเดคเดฎเดพเดฃเต, เดชเด•เตเดทเต‡ เดŸเดพเดธเตเด•เต เดฐเดธเด•เดฐเดตเตเด‚ เด“เดชเตเดทเดฃเตฝ เด†เดฃเต†เดจเตเดจเตเด‚ เด’เดฐเดพเตพ เดชเดฑเดžเตเดžเต‡เด•เตเด•เดพเด‚.

R เดธเตเดตเดฏเด‚ เด’เดฐเต เดฎเดฟเด•เดšเตเดš เดธเดพเตผเดตเดคเตเดฐเดฟเด• เดญเดพเดทเดฏเดพเดฃเต†เดจเตเดจเต เดตเต€เดฃเตเดŸเตเด‚ เดคเต†เดณเดฟเดฏเดฟเดšเตเดšเต, เด‡เดคเต เดธเตเดฅเดฟเดคเดฟเดตเดฟเดตเดฐเด•เตเด•เดฃเด•เตเด•เตเด•เตพ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดฎเดฑเตเดฑเต เดกเดพเดฑเตเดฑ เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพเด•เตเด•เดฟเดŸเดฏเดฟเตฝ เด’เดฐเต เดฎเดฟเด•เดšเตเดš "เดฒเต†เดฏเตผ" เด†เดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

R, PowerShell เดŽเดจเตเดจเดฟเดต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เดจเตเด•เดณเตเดŸเต† เด†เดฐเต‹เด—เตเดฏเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดชเตเดฐเดคเดฟเดฆเดฟเดจ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเตเด•เตพ

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•