トップ回答者
コマンドプロンプトの実行結果の取得方法について

質問
-
$cre = Get-Credential Invoke-Command -Credential $cre -ComputerName adserver01 { net user testuser01 /times:"M-Th,09:00-20:00;F,09:00-18:00;Sa,09:00-12:00;Su,09:00-18:00" $user = net user testuser01 }
上記の実行により、testuser01のログオン時間を制御しております。
実現したいことは、$userにセットされた実行結果から、「ログオン可能時間」の結果を配列で取得することです。
上記リンクの実行結果の、月曜日 09:00:00 - 19:00:00 の部分を取得したいと考えています。
ユーザーによっては、「すべて」と1行だけ表示されるユーザーや、7行表示されるユーザーなど、返ってくる行数は分かりませんが、コマンドプロンプトの実行結果にアクセスする方法は可能でしょうか。
PowerShellコマンドでADのログオン時間を取得する方法は確認しておりますが、今回はnet userの結果を取得することを考えています。
よろしくお願いします。
回答
-
こんにちは。
$user = net user testuser01
の$userにはnet userコマンドを実行した結果コンソールに出力される文字列が配列として保存されており、net userコマンドを使わなければならないのであればこれが取得できる全てとなります。
このため、「ログオン可能時間」を取りたい場合はこの結果の文字列を自力でパースしてやる必要があります。
超雑な例ですが、こんな感じのコードでとりあえず必要な部分を取得することはできます。
# Windows 2012 R2、日本語環境を想定 $user = net user testuser01 $user | ForEach-Object -Begin { $matching = $false } ` -Process { if($_ -match "ログオン可能時間"){$matching = $true} if($_ -match "所属しているローカル グループ"){$matching = $false} if($matching){ if ($_ -ne ""){ Write-Output $_.Replace("ログオン可能時間","").Trim() } } }
厳密な「ログオン可能時間」が必要であればnet userではなくADSIを使うのが良いかと思います。
すべての返信
-
こんにちは。
$user = net user testuser01
の$userにはnet userコマンドを実行した結果コンソールに出力される文字列が配列として保存されており、net userコマンドを使わなければならないのであればこれが取得できる全てとなります。
このため、「ログオン可能時間」を取りたい場合はこの結果の文字列を自力でパースしてやる必要があります。
超雑な例ですが、こんな感じのコードでとりあえず必要な部分を取得することはできます。
# Windows 2012 R2、日本語環境を想定 $user = net user testuser01 $user | ForEach-Object -Begin { $matching = $false } ` -Process { if($_ -match "ログオン可能時間"){$matching = $true} if($_ -match "所属しているローカル グループ"){$matching = $false} if($matching){ if ($_ -ne ""){ Write-Output $_.Replace("ログオン可能時間","").Trim() } } }
厳密な「ログオン可能時間」が必要であればnet userではなくADSIを使うのが良いかと思います。