我正在尝试仅为最近的条目解析文件。日志文件中的每个条目都以日期格式为" m / d / yyyy h:mm:ss PM"。
我编写了一个完成我想要的脚本但不幸的是这个脚本在Powershell 5上运行但不在Powershell 2上运行
$regex = '\b([1-2][0-9]|[0-9])\/([1-3][0-9]|[0-9])\/(20[0-9][0-9]) ((1[0-2]|0?[1-9]):([0-5][0-9]):([0-5][0-9]) ([AaPp][Mm]))'
$lines = gci C:\temp\Gateway.log | select-string -pattern $regex |select linenumber, matches
$log=@()
foreach($line in $lines)
{
[datetime]$logdate = ($line.matches).value
$ln = $line.linenumber
if ($logdate -gt '2017-06-29 12:00:00')
{
$log += $ln
}
}
$log
当我尝试在使用PowerShell 2的服务器上运行此脚本时,我收到以下错误。
无法将null转换为" System.DateTime"。
我无法将select-string找到的值转换为datetime。尝试使用tostring转换为字符串,并使用out-string
$dt = $line.matches
$val = $dt|select Value
$val1 = $val|Out-String
$val2 = $val.tostring()
[datetime]$val1
[datetime]$val2
如何将值作为日期时间获取,以便我可以在其中使用powershell 2进行日期处理?
答案 0 :(得分:1)
根据我的经验,如果当前的语言环境设置不适用于上午/下午转换不起作用(也不适用于[CultureInfo] :: InvariantCulture)。
您需要指定支持am / pm
的cultureinfo对象$enUS = 'en-US' -as [Globalization.CultureInfo]
$val1 = (get-date).ToString("M/d/yyyy H:mm:ss tt", $enUS)
$val1
[DateTime]::ParseExact($val1, "M/d/yyyy H:mm:ss tt", $enUS)