WMI win32_process 情報を取得し、CreationDate をもう少し読みやすいものに変換しようとしています。
$Header = @("__SERVER","Caption","CommandLine","CreationDate","ProcessID")
$processes = Get-WmiObject win32_process -ComputerName theComputer |? {$_.caption -eq "java.exe"} | select $header
#Format-Date
$processes | % {
$crdate = $_.CreationDate
if($crdate -match ".\d*-\d*") {
$crdate = $crdate -replace $matches[0]," "
$idate = [System.Int64]$crdate
$date = [DateTime]::ParseExact($idate,'yyyyMMddhhmmss',$null)
$_.CreationDate = $date
}
}
この関数はうまく機能しますが、次のエラー メッセージで失敗することがあります。
Exception calling "ParseExact" with "3" argument(s): "String was not recognized as a valid DateTime."
私はintを渡していることを認識しています。また$idate
、文字列に変換してそれを渡そうとしましたが、同じ値でエラーが発生しました。
サンプル入力:(ParseExact 呼び出しの直前の $idate の値)
20130719113954
20130719114700
20130719133000 <---- これは失敗します
20130719053000
20130719060001
20130719134000 <---- これは失敗します
明らかに、この関数は 12:00 より前にのみ機能します
私の質問は、これを軍の時間を認識させるにはどうすればよいですか? 12時前に、次のような素晴らしい日付を吐き出します7/19/2013 11:47:00 AM
。ミリタリー タイムを受け入れない場合、どのように解析して AM と PM の違いを正確に知ることができますか?
注: win32_process はもともと次のような CreationDate 値を返しますが、20130719133000.137239-240
まったく解析できませんでした。ミリ秒は気にしません。