在 powershell 2.0 中将字符串转换为日期时间
convert string to datetime in powershell 2.0
我正在尝试仅针对最近的条目来解析文件。日志文件中的每个条目都以 "m/d/yyyy h:mm:ss PM".
格式的日期开头
我写了一个脚本来完成我想要的,但不幸的是这个脚本 运行s 在 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 在服务器上运行此脚本时,出现以下错误。
Cannot convert null to type "System.DateTime".
我无法将 select 字符串找到的值转换为日期时间。尝试使用 tostring 和 out-string
转换为字符串
$dt = $line.matches
$val = $dt|select Value
$val1 = $val|Out-String
$val2 = $val.tostring()
[datetime]$val1
[datetime]$val2
如何获取日期时间的值,以便在 Powershell 2 中进行数据运算?
根据我的经验,如果您当前的区域设置不适用于它,am/pm 转换将不起作用(也不适用于 [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)
我正在尝试仅针对最近的条目来解析文件。日志文件中的每个条目都以 "m/d/yyyy h:mm:ss PM".
格式的日期开头我写了一个脚本来完成我想要的,但不幸的是这个脚本 运行s 在 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 在服务器上运行此脚本时,出现以下错误。
Cannot convert null to type "System.DateTime".
我无法将 select 字符串找到的值转换为日期时间。尝试使用 tostring 和 out-string
转换为字符串 $dt = $line.matches
$val = $dt|select Value
$val1 = $val|Out-String
$val2 = $val.tostring()
[datetime]$val1
[datetime]$val2
如何获取日期时间的值,以便在 Powershell 2 中进行数据运算?
根据我的经验,如果您当前的区域设置不适用于它,am/pm 转换将不起作用(也不适用于 [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)