同セグメントであれば以下のように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での許可ポート等)で不可の場合はこういったことしないとダメか。
0 件のコメント:
コメントを投稿