2018年5月17日木曜日

別セグメントのWindowsServerの連続稼働日数を知る

同セグメントであれば以下のようにGet-WmiObjectで取得できるのだが、
(http://www.vwnet.jp/windows/PowerShell/GetBootTime.htmより)

# 連続稼働日数の取得
$WMI_OpreationSystem = Get-WmiObject win32_operatingsystem
$Now = $WMI_OpreationSystem.LocalDateTime
$Boot = $WMI_OpreationSystem.LastBootUpTime
$BootDateTime = $WMI_OpreationSystem.ConvertToDateTime($Boot)
$NowDateTime = $WMI_OpreationSystem.ConvertToDateTime($Now)
$UpTime = $NowDateTime - $BootDateTime
echo $UpTime.Days

VPNルータ越しではどうやっても取得できない為、powershellを用いてローカルに稼働日数をテキストファイル吐き出し、そちらをnet use経由後に見に行くという手法を取った。

-------------------------------------------------------------------------------------
$WMI_OpreationSystem = Get-WmiObject win32_operatingsystem
$Now = $WMI_OpreationSystem.LocalDateTime
$Boot = $WMI_OpreationSystem.LastBootUpTime
$BootDateTime = $WMI_OpreationSystem.ConvertToDateTime($Boot)
$NowDateTime = $WMI_OpreationSystem.ConvertToDateTime($Now)
$UpTime = $NowDateTime - $BootDateTime

$UpTime.Days | Out-File \\localhost\exp\uptime.txt
-------------------------------------------------------------------------------------
上記をps1ファイルとして保存し、以下をバッチファイルでタスク実行。

powershell -noprofile -executionpolicy unrestricted c:\getUpDays.ps1

注意として2003Serverでは初期状態ではPowerShell使えない(再起動を伴うSPの適用が必要)

これでuptime.txtが生成されるので、そちらをVBA(エクセルにデータ出ししたかったので)で読む形式を取った。

うーむ。直接Get-WmiObject出来れば楽チンなんだけど、セキュリティの関係(VPNでの許可ポート等)で不可の場合はこういったことしないとダメか。