R เจ…เจคเฉ‡ PowerShell เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจเจพเจ‚ เจฆเฉ€ เจธเจฟเจนเจค เจฌเจพเจฐเฉ‡ เจฐเฉ‹เจœเจผเจพเจจเจพ เจฐเจฟเจชเฉ‹เจฐเจŸเจพเจ‚

R เจ…เจคเฉ‡ PowerShell เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจเจพเจ‚ เจฆเฉ€ เจธเจฟเจนเจค เจฌเจพเจฐเฉ‡ เจฐเฉ‹เจœเจผเจพเจจเจพ เจฐเจฟเจชเฉ‹เจฐเจŸเจพเจ‚

เจ‡เฉฐเจฆเจฐเจพเจœเจผ

เจจเจฎเจธเจ•เจพเจฐ. เจนเฉเจฃ เจ…เฉฑเจงเฉ‡ เจธเจพเจฒ เจคเฉ‹เจ‚ เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจธเจ•เฉเจฐเจฟเจชเจŸ (เจœเจพเจ‚ เจธเจ•เฉเจฐเจฟเจชเจŸเจพเจ‚ เจฆเจพ เจ‡เฉฑเจ• เจธเฉˆเฉฑเจŸ) เจšเจฒเจพ เจฐเจนเฉ‡ เจนเจพเจ‚ เจœเฉ‹ เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจเจพเจ‚ (เจ…เจคเฉ‡ เจจเจพ เจธเจฟเจฐเจซเจผ) เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจฌเจพเจฐเฉ‡ เจฐเจฟเจชเฉ‹เจฐเจŸเจพเจ‚ เจคเจฟเจ†เจฐ เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค เจฎเฉˆเจ‚ เจ†เจชเจฃเจพ เจฐเจšเจจเจพ เจ…เจจเฉเจญเจต เจ…เจคเฉ‡ เจ•เฉ‹เจก เจ–เฉเจฆ เจธเจพเจ‚เจเจพ เจ•เจฐเจจ เจฆเจพ เจซเฉˆเจธเจฒเจพ เจ•เฉ€เจคเจพเฅค เจฎเฉˆเจจเฉ‚เฉฐ เจ†เจฒเฉ‹เจšเจจเจพ เจฆเฉ€ เจ‰เจฎเฉ€เจฆ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจน เจธเจฎเฉฑเจ—เจฐเฉ€ เจ•เจฟเจธเฉ‡ เจฒเจˆ เจ‰เจชเจฏเฉ‹เจ—เฉ€ เจนเฉ‹ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค

เจฒเฉ‹เฉœ เจฆเจพ เจ—เจ เจจ

เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจเจพเจ‚ เจนเจจ (เจฒเจ—เจญเจ— 1500 VM 3 vCenters เจตเจฟเฉฑเจš เจตเฉฐเจกเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจนเจจ)เฅค เจจเจตเฉ‡เจ‚ เจฌเจฃเจพเจ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ เจ…เจคเฉ‡ เจชเฉเจฐเจพเจฃเฉ‡ เจจเฉ‚เฉฐ เจ…เจ•เจธเจฐ เจฎเจฟเจŸเจพเจ‡เจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจ†เจฐเจกเจฐ เจฌเจฃเจพเจˆ เจฐเฉฑเจ–เจฃ เจฒเจˆ, VMs เจจเฉ‚เฉฐ เจธเจฌ-เจธเจฟเจธเจŸเจฎ เจตเจฟเฉฑเจš เจตเฉฐเจกเจฃ เจฒเจˆ, เจ•เจˆ เจ•เจธเจŸเจฎ เจซเฉ€เจฒเจกเจพเจ‚ เจจเฉ‚เฉฐ vCenter เจตเจฟเฉฑเจš เจœเฉ‹เฉœเจฟเจ† เจ—เจฟเจ† เจธเฉ€, เจ‡เจน เจฆเจฐเจธเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ เจ•เจฟ เจ•เฉ€ เจ‰เจน เจŸเฉˆเจธเจŸ เจนเจจ, เจ…เจคเฉ‡ เจ•เจฟเจธ เจฆเฉเจ†เจฐเจพ เจ…เจคเฉ‡ เจ•เจฆเฉ‹เจ‚ เจฌเจฃเจพเจ เจ—เจ เจธเจจเฅค เจฎเจจเฉเฉฑเจ–เฉ€ เจ•เจพเจฐเจ• เจจเฉ‡ เจ‡เจธ เจคเฉฑเจฅ เจตเฉฑเจฒ เจ…เจ—เจตเจพเจˆ เจ•เฉ€เจคเฉ€ เจ•เจฟ เจ…เฉฑเจงเฉ‡ เจคเฉ‹เจ‚ เจตเฉฑเจง เจฎเจธเจผเฉ€เจจเจพเจ‚ เจ–เจพเจฒเฉ€ เจ–เฉ‡เจคเจพเจ‚ เจจเจพเจฒ เจฐเจนเจฟ เจ—เจˆเจ†เจ‚, เจœเจฟเจธ เจจเจพเจฒ เจ•เฉฐเจฎ เจจเฉ‚เฉฐ เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ†เฅค เจนเจฐ เจ›เฉ‡ เจฎเจนเฉ€เจจเจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจตเจพเจฐ, เจ•เฉ‹เจˆ เจจเจพ เจ•เฉ‹เจˆ เจนเฉˆเจฐเจพเจจ เจนเฉ‹ เจ—เจฟเจ† เจ…เจคเฉ‡ เจ‡เจธ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจ…เจชเจกเฉ‡เจŸ เจ•เจฐเจจ 'เจคเฉ‡ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐ เจฆเจฟเฉฑเจคเจพ, เจชเจฐ เจจเจคเฉ€เจœเจพ เจกเฉ‡เจข เจนเจซเจผเจคเฉ‡ เจฌเจพเจ…เจฆ เจธเฉฐเจฌเฉฐเจงเจค เจนเฉ‹เจฃเจพ เจฌเฉฐเจฆ เจนเฉ‹ เจ—เจฟเจ†เฅค
เจฎเฉˆเจ‚ เจคเฉเจฐเฉฐเจค เจธเจชเจธเจผเจŸ เจ•เจฐ เจฆเจฟเฉฐเจฆเจพ เจนเจพเจ‚ เจ•เจฟ เจนเจฐ เจ•เฉ‹เจˆ เจธเจฎเจเจฆเจพ เจนเฉˆ เจ•เจฟ เจฎเจธเจผเฉ€เจจเจพเจ‚ เจฆเฉ€ เจธเจฟเจฐเจœเจฃเจพ เจฒเจˆ เจ…เจฐเจœเจผเฉ€เจ†เจ‚ เจนเฉ‹เจฃเฉ€เจ†เจ‚ เจšเจพเจนเฉ€เจฆเฉ€เจ†เจ‚ เจนเจจ, เจ‰เจนเจจเจพเจ‚ เจฆเฉ€ เจฐเจšเจจเจพ เจฒเจˆ เจ‡เฉฑเจ• เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†, เจ†เจฆเจฟเฅค เจ‡เจคเจ†เจฆเจฟ. เจ…เจคเฉ‡ เจ‰เจธเฉ‡ เจธเจฎเฉ‡เจ‚, เจนเจฐ เจ•เฉ‹เจˆ เจ‡เจธ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฆเฉ€ เจธเจ–เจคเฉ€ เจจเจพเจฒ เจชเจพเจฒเจฃเจพ เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจธเจญ เจ•เฉเจ เจ•เฉเจฐเจฎ เจตเจฟเฉฑเจš เจนเฉˆ. เจฌเจฆเจ•เจฟเจธเจฎเจคเฉ€ เจจเจพเจฒ, เจ‡เฉฑเจฅเฉ‡ เจ‡เจน เจฎเจพเจฎเจฒเจพ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจชเจฐ เจ‡เจน เจฒเฉ‡เจ– เจฆเจพ เจตเจฟเจธเจผเจพ เจจเจนเฉ€เจ‚ เจนเฉˆ :)

เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡, เจ–เฉ‡เจคเจพเจ‚ เจตเจฟเฉฑเจš เจญเจฐเจจ เจฆเฉ€ เจธเจผเฉเฉฑเจงเจคเจพ เจฆเฉ€ เจœเจพเจ‚เจš เจจเฉ‚เฉฐ เจธเจตเฉˆเจšเจพเจฒเจค เจ•เจฐเจจ เจฆเจพ เจซเฉˆเจธเจฒเจพ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€เฅค
เจ…เจธเฉ€เจ‚ เจซเฉˆเจธเจฒเจพ เจ•เฉ€เจคเจพ เจนเฉˆ เจ•เจฟ เจธเจพเจฐเฉ‡ เจœเจผเจฟเฉฐเจฎเฉ‡เจตเจพเจฐ เจ‡เฉฐเจœเฉ€เจจเฉ€เจ…เจฐเจพเจ‚ เจ…เจคเฉ‡ เจ‰เจจเฉเจนเจพเจ‚ เจฆเฉ‡ เจฎเจพเจฒเจ•เจพเจ‚ เจจเฉ‚เฉฐ เจ—เจฒเจค เจขเฉฐเจ— เจจเจพเจฒ เจญเจฐเฉ€เจ†เจ‚ เจฎเจธเจผเฉ€เจจเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจฐเฉ‹เจœเจผเจพเจจเจพ เจชเฉฑเจคเจฐ เจ‡เฉฑเจ• เจšเฉฐเจ—เฉ€ เจธเจผเฉเจฐเฉ‚เจ†เจค เจนเฉ‹เจตเฉ‡เจ—เฉ€เฅค

เจ‡เจธ เจฎเฉŒเจ•เฉ‡ 'เจคเฉ‡, เจฎเฉ‡เจฐเฉ‡ เจ‡เฉฑเจ• เจธเจพเจฅเฉ€ เจจเฉ‡ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ PowerShell เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเจ•เฉเจฐเจฟเจชเจŸ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเฉ€ เจธเฉ€, เจœเฉ‹ เจนเจฐ เจฐเฉ‹เจœเจผ, เจ‡เฉฑเจ• เจ…เจจเฉเจธเฉ‚เจšเฉ€ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐ, เจธเจพเจฐเฉ‡ vCenters เจฆเฉ€เจ†เจ‚ เจธเจพเจฐเฉ€เจ†เจ‚ เจฎเจธเจผเฉ€เจจเจพเจ‚ 'เจคเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจ‡เจ•เฉฑเจ เฉ€ เจ•เจฐเจฆเฉ€ เจนเฉˆ เจ…เจคเฉ‡ 3 csv เจฆเจธเจคเจพเจตเฉ‡เจœเจผ (เจนเจฐเฉ‡เจ• เจ†เจชเจฃเฉ‡ vCenter เจฒเจˆ) เจคเจฟเจ†เจฐ เจ•เจฐเจฆเฉ€ เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจ‡เจธ 'เจคเฉ‡ เจ…เฉฑเจชเจฒเฉ‹เจก เจ•เฉ€เจคเฉ€ เจ—เจˆ เจธเฉ€เฅค เจ‡เฉฑเจ• เจ†เจฎ เจกเจฟเจธเจ•. เจ‡เจธ เจฒเจฟเจชเฉ€ เจจเฉ‚เฉฐ เจ†เจงเจพเจฐ เจตเจœเฉ‹เจ‚ เจฒเฉˆเจฃ เจ…เจคเฉ‡ เจ†เจฐ เจญเจพเจธเจผเจพ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจœเจพเจ‚เจšเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ‡เจธ เจฆเฉ€ เจชเฉ‚เจฐเจคเฉ€ เจ•เจฐเจจ เจฆเจพ เจซเฉˆเจธเจฒเจพ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€, เจœเจฟเจธ เจจเจพเจฒ เจธเจพเจจเฉ‚เฉฐ เจ•เฉเจ เจ…เจจเฉเจญเจต เจธเฉ€เฅค

เจ…เฉฐเจคเจฎ เจฐเฉ‚เจช เจฆเฉ‡เจฃ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจตเจฟเฉฑเจš, เจนเฉฑเจฒ เจจเฉ‡ เจกเจพเจ• เจฆเฉเจ†เจฐเจพ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ€, เจ‡เฉฑเจ• เจฎเฉเฉฑเจ– เจ…เจคเฉ‡ เจ‡เจคเจฟเจนเจพเจธเจ• เจธเจพเจฐเจฃเฉ€ เจตเจพเจฒเจพ เจ‡เฉฑเจ• เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ (เจ‡เจธ เจฌเจพเจฐเฉ‡ เจนเฉ‹เจฐ เจฌเจพเจ…เจฆ เจตเจฟเฉฑเจš), เจ…เจคเฉ‡ เจจเจพเจฒ เจนเฉ€ vm เจฆเฉ‡ เจ…เจธเจฒ เจธเจฟเจฐเจœเจฃเจนเจพเจฐเจพเจ‚ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฆเฉ€ เจฐเจšเจจเจพ เจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจจเฉ‚เฉฐ เจฒเฉฑเจญเจฃ เจฒเจˆ vSphere เจฒเฉŒเจ—เจธ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃเฅค

IDE RStudio เจกเฉˆเจธเจ•เจŸเจพเจช เจ…เจคเฉ‡ PowerShell ISE เจจเฉ‚เฉฐ เจตเจฟเจ•เจพเจธ เจฒเจˆ เจตเจฐเจคเจฟเจ† เจ—เจฟเจ† เจธเฉ€เฅค

เจธเจ•เฉเจฐเจฟเจชเจŸ เจ‡เฉฑเจ• เจจเจฟเจฏเจฎเจค เจตเจฟเฉฐเจกเฉ‹เจœเจผ เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจ เจคเฉ‹เจ‚ เจฒเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจ—เจˆ เจนเฉˆเฅค

เจ†เจฎ เจคเจฐเจ• เจฆเจพ เจตเจฐเจฃเจจเฅค

เจฒเจฟเจชเฉ€เจ†เจ‚ เจฆเจพ เจ†เจฎ เจคเจฐเจ• เจ‡เจธ เจชเฉเจฐเจ•เจพเจฐ เจนเฉˆเฅค

  • เจ…เจธเฉ€เจ‚ PowerShell เจธเจ•เฉเจฐเจฟเจชเจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจเจพเจ‚ 'เจคเฉ‡ เจกเจพเจŸเจพ เจ‡เจ•เฉฑเจ เจพ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจœเจฟเจธ เจจเฉ‚เฉฐ เจ…เจธเฉ€เจ‚ R เจฐเจพเจนเฉ€เจ‚ เจ•เจพเจฒ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจ…เจคเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• csv เจตเจฟเฉฑเจš เจœเฉ‹เฉœเจฆเฉ‡ เจนเจพเจ‚เฅค เจญเจพเจธเจผเจพเจตเจพเจ‚ เจตเจฟเจšเจ•เจพเจฐ เจ‰เจฒเจŸเจพ เจชเจฐเจธเจชเจฐ เจชเฉเจฐเจญเจพเจต เจ‡เจธเฉ‡ เจคเจฐเฉเจนเจพเจ‚ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค (เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเจพ R เจคเฉ‹เจ‚ PowerShell เจคเฉฑเจ• เจšเจฒเจพเจ‰เจฃเจพ เจธเฉฐเจญเจต เจธเฉ€, เจชเจฐ เจ‡เจน เจฎเฉเจธเจผเจ•เจฒ เจนเฉˆ, เจ…เจคเฉ‡ เจตเจฟเจšเจ•เจพเจฐเจฒเฉ‡ csvs เจนเฉ‹เจฃ เจจเจพเจฒ เจกเฉ€เจฌเฉฑเจ— เจ•เจฐเจจเจพ เจ…เจคเฉ‡ เจ•เจฟเจธเฉ‡ เจจเจพเจฒ เจ‡เฉฐเจŸเจฐเจฎเฉ€เจกเฉ€เจเจŸ เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจธเจพเจ‚เจเจพ เจ•เจฐเจจเจพ เจ†เจธเจพเจจ เจนเฉ‹ เจœเจพเจ‚เจฆเจพ เจนเฉˆ)เฅค
  • R เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ, เจ…เจธเฉ€เจ‚ เจ‰เจนเจจเจพเจ‚ เจ–เฉ‡เจคเจฐเจพเจ‚ เจฒเจˆ เจตเฉˆเจง เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจœเจฟเจจเฉเจนเจพเจ‚ เจฆเฉ‡ เจฎเฉเฉฑเจฒเจพเจ‚ เจฆเฉ€ เจ…เจธเฉ€เจ‚ เจœเจพเจ‚เจš เจ•เจฐ เจฐเจนเฉ‡ เจนเจพเจ‚เฅค - เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจธเจผเจฌเจฆ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจฌเจฃเจพ เจฐเจนเฉ‡ เจนเจพเจ‚ เจœเจฟเจธ เจตเจฟเฉฑเจš เจœเจพเจฃเจ•เจพเจฐเฉ€ เจชเฉฑเจคเจฐ เจตเจฟเฉฑเจš เจธเฉฐเจฎเจฟเจฒเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจ‡เจนเจจเจพเจ‚ เจ–เฉ‡เจคเจฐเจพเจ‚ เจฆเฉ‡ เจฎเฉเฉฑเจฒ เจนเฉ‹เจฃเจ—เฉ‡, เจœเฉ‹ เจธเจนเจฟเจฏเฉ‹เจ—เฉ€เจ†เจ‚ เจฆเฉ‡ เจธเจตเจพเจฒเจพเจ‚ เจฆเจพ เจœเจตเจพเจฌ เจนเฉ‹เจตเฉ‡เจ—เจพ "เจจเจนเฉ€เจ‚, เจชเจฐ เจฎเฉˆเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจญเจฐเจพเจ‚?"
  • เจ…เจธเฉ€เจ‚ R เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ csv เจคเฉ‹เจ‚ เจธเจพเจฐเฉ‡ VMs เจฒเจˆ เจกเจพเจŸเจพ เจฒเฉ‹เจก เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจ‡เฉฑเจ• เจกเจพเจŸเจพเจซเฉเจฐเฉ‡เจฎ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚, เจฌเฉ‡เจฒเฉ‹เฉœเฉ‡ เจ–เฉ‡เจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจนเจŸเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจœเจพเจฃเจ•เจพเจฐเฉ€ xlsx เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจœเจฟเจธ เจตเจฟเฉฑเจš เจธเจพเจฐเฉ‡ VMs เจฒเจˆ เจธเฉฐเจ–เฉ‡เจช เจœเจพเจฃเจ•เจพเจฐเฉ€ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจธเจพเจ‚เจเฉ‡ เจธเจฐเฉ‹เจค 'เจคเฉ‡ เจ…เฉฑเจชเจฒเฉ‹เจก เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค
  • เจ…เจธเฉ€เจ‚ เจธเจพเจฐเฉ‡ VMs เจฒเจˆ เจกเฉ‡เจŸเจพเจซเฉเจฐเฉ‡เจฎ เจตเจฟเฉฑเจš เจ–เฉ‡เจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจญเจฐเจจ เจฆเฉ€ เจธเจผเฉเฉฑเจงเจคเจพ เจฒเจˆ เจธเจพเจฐเฉ€เจ†เจ‚ เจœเจพเจ‚เจšเจพเจ‚ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจธเจพเจฐเจฃเฉ€ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจœเจฟเจธ เจตเจฟเฉฑเจš เจธเจฟเจฐเจซเจผ VMs เจนเฉ€ เจ—เจฒเจค เจขเฉฐเจ— เจจเจพเจฒ เจญเจฐเฉ‡ เจ—เจ เจ–เฉ‡เจคเจฐเจพเจ‚ (เจ…เจคเฉ‡ เจธเจฟเจฐเจซเจผ เจ‡เจน เจ–เฉ‡เจคเจฐ) เจนเจจเฅค
  • เจ…เจธเฉ€เจ‚ VM เจฆเฉ€ เจจเจคเฉ€เจœเฉ‡ เจตเจพเจฒเฉ€ เจธเฉ‚เจšเฉ€ เจจเฉ‚เฉฐ เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ PowerShell เจธเจ•เฉเจฐเจฟเจชเจŸ เจจเฉ‚เฉฐ เจญเฉ‡เจœเจฆเฉ‡ เจนเจพเจ‚, เจœเฉ‹ VM เจฌเจฃเจพเจ‰เจฃ เจฆเฉ‡ เจ‡เจตเฉˆเจ‚เจŸเจพเจ‚ เจฒเจˆ vCenter เจฒเฉŒเจ—เจธ เจจเฉ‚เฉฐ เจตเฉ‡เจ–เฉ‡เจ—เฉ€, เจœเฉ‹ เจธเจพเจจเฉ‚เฉฐ VM เจฆเฉ€ เจฐเจšเจจเจพ เจฆเฉ‡ เจ…เจจเฉเจฎเจพเจจเจฟเจค เจธเจฎเฉ‡เจ‚ เจ…เจคเฉ‡ เจ‰เจฆเฉ‡เจธเจผ เจธเจฟเจฐเจœเจฃเจนเจพเจฐ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจฃ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเฉ‡เจตเฉ‡เจ—เฉ€เฅค เจ‡เจน เจ‰เจธ เจ•เฉ‡เจธ เจฒเจˆ เจนเฉˆ เจœเจฆเฉ‹เจ‚ เจ•เฉ‹เจˆ เจจเจนเฉ€เจ‚ เจฎเฉฐเจจเจฆเจพ เจ•เจฟ เจ‡เจน เจ•เจฟเจธเจฆเฉ€ เจ•เจพเจฐ เจนเฉˆเฅค เจ‡เจน เจธเจ•เฉเจฐเจฟเจชเจŸ เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจ•เฉฐเจฎ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเฉ€, เจ–เจพเจธ เจ•เจฐเจ•เฉ‡ เจœเฉ‡ เจ‡เฉฑเจฅเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจฒเฉŒเจ— เจนเจจ, เจ‡เจธ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจธเจฟเจฐเจซเจผ เจชเจฟเจ›เจฒเฉ‡ 2 เจนเจซเจผเจคเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจฆเฉ‡เจ–เจฆเฉ‡ เจนเจพเจ‚, เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจตเจฐเจ•เจซเจฒเฉ‹ เจตเฉ€ เจตเจฐเจคเจฆเฉ‡ เจนเจพเจ‚ เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ•เฉ‹ เจธเจฎเฉ‡เจ‚ เจ•เจˆ VMs 'เจคเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจ–เฉ‹เจœเจฃ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค เจ‰เจฆเจพเจนเจฐเจจ เจธเจ•เฉเจฐเจฟเจชเจŸ เจตเจฟเฉฑเจš เจ‡เจธ เจตเจฟเจงเฉ€ 'เจคเฉ‡ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจŸเจฟเฉฑเจชเจฃเฉ€เจ†เจ‚ เจธเจผเจพเจฎเจฒ เจนเจจเฅค เจ…เจธเฉ€เจ‚ เจจเจคเฉ€เจœเฉ‡ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• csv เจตเจฟเฉฑเจš เจœเฉ‹เฉœเจฆเฉ‡ เจนเจพเจ‚, เจœเจฟเจธ เจจเฉ‚เฉฐ เจ…เจธเฉ€เจ‚ เจฆเฉเจฌเจพเจฐเจพ R เจตเจฟเฉฑเจš เจฒเฉ‹เจก เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค
  • เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจธเฉเฉฐเจฆเจฐ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจซเจพเจฐเจฎเฉˆเจŸ เจ•เฉ€เจคเจพ xlsx เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจคเจฟเจ†เจฐ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจœเจฟเจธ เจตเจฟเฉฑเจš เจ—เจฒเจค เจขเฉฐเจ— เจจเจพเจฒ เจญเจฐเฉ‡ เจนเฉ‹เจ เจ–เฉ‡เจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจฒเจพเจฒ เจฐเฉฐเจ— เจตเจฟเฉฑเจš เจ‰เจœเจพเจ—เจฐ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพ, เจซเจฟเจฒเจŸเจฐ เจ•เฉเจ เจ•เจพเจฒเจฎเจพเจ‚ 'เจคเฉ‡ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเฉ‡ เจœเจพเจฃเจ—เฉ‡, เจ…เจคเฉ‡ เจตเจพเจงเฉ‚ เจ•เจพเจฒเจฎ เจœเจฟเจจเฉเจนเจพเจ‚ เจตเจฟเฉฑเจš เจ‰เจฆเฉ‡เจธเจผ เจธเจฟเจฐเจœเจฃเจนเจพเจฐ เจนเจจ เจ…เจคเฉ‡ VM เจฌเจฃเจพเจ‰เจฃ เจฆเจพ เจธเจฎเจพเจ‚ เจฆเจฐเจธเจพเจ‡เจ† เจœเจพเจตเฉ‡เจ—เจพเฅค
  • เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจˆเจฎเฉ‡เจฒ เจคเจฟเจ†เจฐ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจœเจฟเฉฑเจฅเฉ‡ เจ…เจธเฉ€เจ‚ เจตเฉˆเจง เจซเฉ€เจฒเจก เจฎเฉเฉฑเจฒเจพเจ‚ เจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเจจ เจตเจพเจฒเฉ‡ เจ‡เฉฑเจ• เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจจเฉ‚เฉฐ เจจเฉฑเจฅเฉ€ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจจเจพเจฒ เจนเฉ€ เจ‡เฉฑเจ• เจธเจพเจฐเจฃเฉ€ เจœเจฟเจธ เจตเจฟเฉฑเจš เจซเฉ€เจฒเจกเจพเจ‚ เจตเจฟเฉฑเจš เจ—เจฒเจค เจญเจฐเจฟเจ† เจ—เจฟเจ† เจนเฉˆเฅค เจŸเฉˆเจ•เจธเจŸ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจ—เจฒเจค เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ เจฌเจฃเจพเจ เจ—เจ VMs เจฆเฉ€ เจ•เฉเฉฑเจฒ เจธเฉฐเจ–เจฟเจ†, เจ‡เฉฑเจ• เจธเจพเจ‚เจเฉ‡ เจธเจฐเฉ‹เจค เจฒเจˆ เจ‡เฉฑเจ• เจฒเจฟเฉฐเจ• เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจชเฉเจฐเฉ‡เจฐเจ• เจคเจธเจตเฉ€เจฐ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚เฅค เจœเฉ‡เจ•เจฐ เจ•เฉ‹เจˆ เจตเฉ€ เจ—เจฒเจค เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ เจญเจฐเฉ‡ เจนเฉ‹เจ VM เจจเจนเฉ€เจ‚ เจนเจจ, เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจ–เฉเจธเจผเจนเจพเจฒ เจชเฉเจฐเฉ‡เจฐเจฃเจพเจฆเจพเจ‡เจ• เจคเจธเจตเฉ€เจฐ เจฆเฉ‡ เจจเจพเจฒ เจชเฉฑเจคเจฐ เจญเฉ‡เจœเจฆเฉ‡ เจนเจพเจ‚เฅค
  • เจ…เจธเฉ€เจ‚ SQL เจธเจฐเจตเจฐ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจธเจพเจฐเฉ‡ VM เจฒเจˆ เจกเฉ‡เจŸเจพ เจฐเจฟเจ•เจพเจฐเจก เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจ‡เจคเจฟเจนเจพเจธเจ• เจŸเฉ‡เจฌเจฒเจพเจ‚ เจฆเฉ‡ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเฉ‡ เจตเจฟเจงเฉ€ เจจเฉ‚เฉฐ เจงเจฟเจ†เจจ เจตเจฟเฉฑเจš เจฐเฉฑเจ–เจฆเฉ‡ เจนเฉ‹เจ (เจ‡เฉฑเจ• เจฌเจนเฉเจค เจนเฉ€ เจฆเจฟเจฒเจšเจธเจช เจตเจฟเจงเฉ€ - เจœเจฟเจธ เจฌเจพเจฐเฉ‡ เจฌเจพเจ…เจฆ เจตเจฟเฉฑเจš เจนเฉ‹เจฐ)

เจ…เจธเจฒ เจตเจฟเฉฑเจš เจธเจ•เฉเจฐเจฟเจชเจŸเจพเจ‚

เจฎเฉเฉฑเจ– เจ†เจฐ เจ•เฉ‹เจก เจซเจพเจˆเจฒ

# ะŸัƒั‚ัŒ ะบ ั€ะฐะฑะพั‡ะตะน ะดะธั€ะตะบั‚ะพั€ะธะธ (ะฝัƒะถะฝะพ ะดะปั ะบะพั€ั€ะตะบั‚ะฝะพะน ั€ะฐะฑะพั‚ั‹ ั‡ะตั€ะตะท ะฒะธะฝะดะพะฒั‹ะน ะฟะปะฐะฝะธั€ะพะฒั‰ะธะบ ะทะฐะดะฐะฝะธะน)
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
}

เจ‡เฉฑเจ• PowerShell เจธเจ•เฉเจฐเจฟเจชเจŸ เจœเฉ‹ เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจเจพเจ‚ เจฆเฉ‡ เจธเจฟเจฐเจœเจฃเจนเจพเจฐเจพเจ‚ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฆเฉ€ เจธเจฟเจฐเจœเจฃเจพ เจฆเฉ€ เจฎเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจฒเฉŒเจ—เจธ เจคเฉ‹เจ‚ เจ•เฉฑเจขเจฆเฉ€ เจนเฉˆ

# ะŸัƒั‚ัŒ ะบ ั„ะฐะนะปัƒ, ะธะท ะบะพั‚ะพั€ะพะณะพ ะฑัƒะดะตะผ ะดะพัั‚ะฐะฒะฐั‚ัŒ ัะฟะธัะพะบ 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 เจ•เฉ‹เจก เจฆเจพ เจ‡เฉฑเจ• เจŸเฉเจ•เฉœเจพ เจœเฉ‹ เจตเจฟเฉฐเจกเฉ‹เจœเจผ เจธเจผเจกเจฟเจŠเจฒเจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ•เฉฐเจฎ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ

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 เจธเจฐเจตเจฐ เจฆเฉ€ เจ•เจพเจฐเจœเจ•เฉเจธเจผเจฒเจคเจพ - เจธเจฟเจธเจŸเจฎ-เจตเจฐเจœเจจ เจตเจพเจฒเฉ€ เจŸเฉˆเจ‚เจชเฉ‹เจฐเจฒ เจŸเฉ‡เจฌเจฒ - เจฌเจšเจพเจ… เจฒเจˆ เจ†เจˆ เจนเฉˆเฅค เจ‡เจน เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจ…เจธเจฅเจพเจˆ (เจ…เจธเจฅเจพเจˆ เจจเจนเฉ€เจ‚) เจŸเฉ‡เจฌเจฒเจพเจ‚ เจตเจœเฉ‹เจ‚ เจ…เจจเฉเจตเจพเจฆ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

'เจคเฉ‡ เจตเจฟเจธเจฅเจพเจฐ เจจเจพเจฒ เจชเฉœเฉเจน เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ…เจงเจฟเจ•เจพเจฐเจค Microsoft เจฆเจธเจคเจพเจตเฉ‡เจœเจผ.

เจธเฉฐเจ–เฉ‡เจช เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจธเจพเจฐเจฃเฉ€ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚, เจ•เจนเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ‡เจธเจจเฉ‚เฉฐ เจธเฉฐเจธเจ•เจฐเจฃ เจฆเฉ‡ เจจเจพเจฒ เจนเฉ‹เจตเฉ‡เจ—เจพ, เจ…เจคเฉ‡ SQL เจธเจฐเจตเจฐ เจ‡เจธ เจธเจพเจฐเจฃเฉ€ เจตเจฟเฉฑเจš 2 เจตเจพเจงเฉ‚ เจกเฉ‡เจŸเจŸเจพเจˆเจฎ เจ•เจพเจฒเจฎ เจฌเจฃเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ (เจฐเจฟเจ•เจพเจฐเจก เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจฎเจฟเจคเฉ€ เจ…เจคเฉ‡ เจฐเจฟเจ•เจพเจฐเจก เจฆเฉ€ เจฎเจฟเจ†เจฆ เจชเฉเฉฑเจ—เจฃ เจฆเฉ€ เจฎเจฟเจคเฉ€) เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจตเจพเจงเฉ‚ เจธเจพเจฐเจฃเฉ€ เจœเจฟเจธ เจตเจฟเฉฑเจš เจฌเจฆเจฒเจฆเจพ เจนเฉˆเฅค เจฒเจฟเจ–เจฟเจ† เจœเจพเจตเฉ‡เจ—เจพเฅค เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚, เจ…เจธเฉ€เจ‚ เจ…เฉฑเจช-เจŸเฉ‚-เจกเฉ‡เจŸ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡, เจธเจงเจพเจฐเจจ เจธเจตเจพเจฒเจพเจ‚ เจฐเจพเจนเฉ€เจ‚, เจœเจฟเจธ เจฆเฉ€เจ†เจ‚ เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจฆเจธเจคเจพเจตเฉ‡เจœเจผเจพเจ‚ เจตเจฟเฉฑเจš เจฆเจฟเฉฑเจคเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจนเจจ, เจ…เจธเฉ€เจ‚ เจœเจพเจ‚ เจคเจพเจ‚ เจ‡เฉฑเจ• เจ–เจพเจธ เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจ เจฆเจพ เจœเฉ€เจตเจจ เจšเฉฑเจ•เจฐ, เจœเจพเจ‚ เจ‡เฉฑเจ• เจ–เจพเจธ เจฌเจฟเฉฐเจฆเฉ‚ 'เจคเฉ‡ เจธเจพเจฐเฉ‡ VM เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเจพเจ‚เฅค เจตเจ•เจผเจค เจตเจฟเจš.

เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจฆเฉ‡ เจฆเฉเจฐเจฟเจธเจผเจŸเฉ€เจ•เฉ‹เจฃ เจคเฉ‹เจ‚, เจฎเฉเฉฑเจ– เจธเจพเจฐเจฃเฉ€ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฃ เจฆเจพ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจ‰เจฆเฉ‹เจ‚ เจคเฉฑเจ• เจชเฉ‚เจฐเจพ เจจเจนเฉ€เจ‚ เจนเฉ‹เจตเฉ‡เจ—เจพ เจœเจฆเฉ‹เจ‚ เจคเฉฑเจ• เจ…เจธเจฅเจพเจˆ เจธเจพเจฐเจฃเฉ€ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฃ เจฆเจพ เจฒเฉˆเจฃ-เจฆเฉ‡เจฃ เจชเฉ‚เจฐเจพ เจจเจนเฉ€เจ‚ เจนเฉ‹ เจœเจพเจ‚เจฆเจพเฅค เจ‰เจน. เจตเฉฑเจกเฉ€ เจ—เจฟเจฃเจคเฉ€ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฃ เจฆเฉ€เจ†เจ‚ เจ•เจพเจฐเจตเจพเจˆเจ†เจ‚ เจตเจพเจฒเฉ‡ เจŸเฉ‡เจฌเจฒเจพเจ‚ 'เจคเฉ‡, เจ‡เจธ เจ•เจพเจฐเจœเจธเจผเฉ€เจฒเจคเจพ เจจเฉ‚เฉฐ เจธเจพเจตเจงเจพเจจเฉ€ เจจเจพเจฒ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ, เจชเจฐ เจธเจพเจกเฉ‡ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš เจ‡เจน เจ‡เฉฑเจ• เจฌเจนเฉเจค เจตเจงเฉ€เจ† เจšเฉ€เจœเจผ เจนเฉˆเฅค

เจตเจฟเจงเฉ€ เจฆเฉ‡ เจธเจนเฉ€ เจขเฉฐเจ— เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ, เจฎเฉˆเจจเฉ‚เฉฐ R เจตเจฟเฉฑเจš เจ•เฉ‹เจก เจฆเจพ เจ‡เฉฑเจ• เจ›เฉ‹เจŸเจพ เจœเจฟเจนเจพ เจŸเฉเจ•เฉœเจพ เจœเฉ‹เฉœเจจเจพ เจชเจฟเจ† เจœเฉ‹ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเฉ‡ เจ‡เฉฑเจ• เจจเจพเจฒ เจธเจพเจฐเฉ‡ VMs เจฒเจˆ เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจจเจพเจฒ เจจเจตเฉ€เจ‚ เจธเจพเจฐเจฃเฉ€ เจฆเฉ€ เจคเฉเจฒเจจเจพ เจ•เจฐเฉ‡เจ—เจพ เจ…เจคเฉ‡ เจ‡เจธ เจตเจฟเฉฑเจš เจธเจฟเจฐเจซ เจฌเจฆเจฒเฉ€เจ†เจ‚ เจนเฉ‹เจˆเจ†เจ‚ เจ•เจคเจพเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจฒเจฟเจ–เจพเจ‚เจ—เจพเฅค เจ•เฉ‹เจก เจ–เจพเจธ เจคเฉŒเจฐ 'เจคเฉ‡ เจšเจฒเจพเจ• เจจเจนเฉ€เจ‚ เจนเฉˆ; เจ‡เจน compareDF เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ, เจชเจฐ เจฎเฉˆเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจนเฉ‡เจ เจพเจ‚ เจตเฉ€ เจชเฉ‡เจธเจผ เจ•เจฐเจพเจ‚เจ—เจพเฅค

เจ‡เฉฑเจ• เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจกเฉ‡เจŸเจพ เจฒเจฟเจ–เจฃ เจฒเจˆ เจ†เจฐ เจ•เฉ‹เจก

# ะŸะพะดั†ะตะฟะปัะตะผ ะฟะฐะบะตั‚ั‹
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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹