เจเฉฐเจฆเจฐเจพเจเจผ
เจจเจฎเจธเจเจพเจฐ. เจนเฉเจฃ เจ เฉฑเจงเฉ เจธเจพเจฒ เจคเฉเจ เจ เจธเฉเจ เจเฉฑเจ เจธเจเฉเจฐเจฟเจชเจ (เจเจพเจ เจธเจเฉเจฐเจฟเจชเจเจพเจ เจฆเจพ เจเฉฑเจ เจธเฉเฉฑเจ) เจเจฒเจพ เจฐเจนเฉ เจนเจพเจ เจเฉ เจตเจฐเจเฉเจ เจฒ เจฎเจธเจผเฉเจจเจพเจ (เจ เจคเฉ เจจเจพ เจธเจฟเจฐเจซเจผ) เจฆเฉ เจธเจฅเจฟเจคเฉ เจฌเจพเจฐเฉ เจฐเจฟเจชเฉเจฐเจเจพเจ เจคเจฟเจเจฐ เจเจฐเจฆเฉ เจนเฉเฅค เจฎเฉเจ เจเจชเจฃเจพ เจฐเจเจจเจพ เจ เจจเฉเจญเจต เจ เจคเฉ เจเฉเจก เจเฉเจฆ เจธเจพเจเจเจพ เจเจฐเจจ เจฆเจพ เจซเฉเจธเจฒเจพ เจเฉเจคเจพเฅค เจฎเฉเจจเฉเฉฐ เจเจฒเฉเจเจจเจพ เจฆเฉ เจเจฎเฉเจฆ เจนเฉ เจ เจคเฉ เจเจน เจธเจฎเฉฑเจเจฐเฉ เจเจฟเจธเฉ เจฒเจ เจเจชเจฏเฉเจเฉ เจนเฉ เจธเจเจฆเฉ เจนเฉเฅค
เจฒเฉเฉ เจฆเจพ เจเจ เจจ
เจธเจพเจกเฉ เจเฉเจฒ เจฌเจนเฉเจค เจธเจพเจฐเฉเจเจ เจตเจฐเจเฉเจ
เจฒ เจฎเจธเจผเฉเจจเจพเจ เจนเจจ (เจฒเจเจญเจ 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 เจฆเจธเจคเจพเจตเฉเจเจผ เจคเจฟเจเจฐ เจเจฐเจจเจพ
# ะกะพะทะดะฐัะผ ะฝะพะฒัั ะบะฝะธะณั
# ะะพะทะผะพะถะฝัะต ะทะฝะฐัะตะฝะธั : "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 เจเฉเจก เจฆเจพ เจเฉฑเจ เจเฉเจเฉเจพ เจเฉ เจตเจฟเฉฐเจกเฉเจเจผ เจธเจผเจกเจฟเจเจฒเจฐ เจตเจฟเฉฑเจ เจเฉฑเจ เจเฉฐเจฎ เจฌเจฃเจพเจเจเจฆเจพ เจนเฉ
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 เจธเจฐเจตเจฐ เจฆเฉ เจเจพเจฐเจเจเฉเจธเจผเจฒเจคเจพ - เจธเจฟเจธเจเจฎ-เจตเจฐเจเจจ เจตเจพเจฒเฉ เจเฉเจเจชเฉเจฐเจฒ เจเฉเจฌเจฒ - เจฌเจเจพเจ เจฒเจ เจเจ เจนเฉเฅค เจเจน เจเจฎ เจคเฉเจฐ 'เจคเฉ เจ เจธเจฅเจพเจ (เจ เจธเจฅเจพเจ เจจเจนเฉเจ) เจเฉเจฌเจฒเจพเจ เจตเจเฉเจ เจ เจจเฉเจตเจพเจฆ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉเฅค
'เจคเฉ เจตเจฟเจธเจฅเจพเจฐ เจจเจพเจฒ เจชเฉเฉเจน เจธเจเจฆเฉ เจนเฉ
เจธเฉฐเจเฉเจช เจตเจฟเฉฑเจ, เจ เจธเฉเจ เจเฉฑเจ เจธเจพเจฐเจฃเฉ เจฌเจฃเจพเจเจเจฆเฉ เจนเจพเจ, เจเจนเจฟเฉฐเจฆเฉ เจนเจพเจ เจเจฟ เจธเจพเจกเฉ เจเฉเจฒ เจเจธเจจเฉเฉฐ เจธเฉฐเจธเจเจฐเจฃ เจฆเฉ เจจเจพเจฒ เจนเฉเจตเฉเจเจพ, เจ เจคเฉ 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 เจจเฉ เจเฉฑเจ เจตเจพเจฐ เจซเจฟเจฐ เจเจชเจฃเฉ เจเจช เจจเฉเฉฐ เจเฉฑเจ เจธเจผเจพเจจเจฆเจพเจฐ เจฏเฉเจจเฉเจตเจฐเจธเจฒ เจญเจพเจธเจผเจพ เจตเจเฉเจ เจฆเจฐเจธเจพเจเจ เจนเฉ, เจเฉ เจเจฟ เจจเจพ เจธเจฟเจฐเจซเจผ เจ เฉฐเจเฉเจพ เจธเจฎเฉฑเจธเจฟเจเจตเจพเจ เจจเฉเฉฐ เจนเฉฑเจฒ เจเจฐเจจ เจฒเจ เจธเฉฐเจชเฉเจฐเจจ เจนเฉ, เจธเจเฉเจ เจฆเฉเจเฉ เจกเฉเจเจพ เจธเจฐเฉเจคเจพเจ เจตเจฟเฉฑเจ เจเฉฑเจ เจธเจผเจพเจจเจฆเจพเจฐ "เจชเจฐเจค" เจตเจเฉเจ เจตเฉ เจเฉฐเจฎ เจเจฐเจฆเฉ เจนเฉเฅค
เจธเจฐเฉเจค: www.habr.com