我正在检索 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
为 String 并将其传入,但它在相同的值上出错。
示例输入:(在 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
但我根本无法解析它,而且我真的不关心毫秒。