我是PowerShell的新手,并且已经想出如何从日志文件中提取相关的行:
C:\Documents and Settings\admin\Local Settings\Application Data\Microsoft\SyncToy\2.0\SyncToyLog.log:325:SYNC: 05/22/2012 14:54:55:857: SyncToy run of Profile Backup (C:\Documents and Settings\admin\, H:\Sync\) completed at 5:22/2012 2:54:55 PM.
我想要做的是将第一个时间戳sans毫秒(使用24小时时间的那个)提取到一个变量。结果:
05/22/2012 14:54:55
任何帮助都将不胜感激。
答案 0 :(得分:6)
一种方法是使用正则表达式解析日期/时间字符串,然后将其转换为日期/时间对象:
$line = 'C:\Documents and Settings\admin\Local Settings\Application Data\Microsoft\SyncToy\2.0\SyncToyLog.log:325:SYNC: 05/22/2012 14:54:55:857: SyncToy run of Profile Backup (C:\Documents and Settings\admin\, H:\Sync\) completed at 5:22/2012 2:54:55 PM.'
$dateTimeString = [regex]::Matches($line, '(\d\d/\d\d/\d\d\d\d.+): ')[0].Groups[1].Value
然后将其转换为日期时间对象:
$provider = New-Object System.Globalization.CultureInfo "en-US"
$dateTime = [datetime]::ParseExact($dateTimeString, 'MM/dd/yyyy HH:mm:ss:fff', $provider)
现在您可以显示它或将其存储在您想要的变量中:
$dateTime -f 'MM/dd/yyyy HH:mm:ss'
答案 1 :(得分:1)
或简单地说:
($line -split ':\s+|:\d{3,}')[2]
答案 2 :(得分:0)
以上参考文献,我可以在我的案例中做到以下
DefaultSource; Verbose; 8; 9/5/2016 1:05:19 PM; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
DefaultSource; Verbose; 8; 9/5/2016 1:05:20 PM; yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
DefaultSource; Verbose; 8; 9/5/2016 1:05:20 PM; zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz z
PS C:\> $ lines = Get-Content"〜\ Documents \ FileName.log"
PS C:\> $ lines | %{[正则表达式] ::相配($ _,'(\ d + / \ d + / \ d \ d \ d \ d)\ S(\ d +:\ d +:\ d +)\ S([AP] M)')} |选择捕获
PS C:\> [datetime] $ dd =($ lines |%{[regex] ::匹配($ _,'(\ d + / \ d + / \ \ d \ d \ d \ d)\ s \(\ d +:\ d + :\ d +)\ s([AP] M)')} |选择-First 1 Value).Value
PS C:\> $ dd.GetType()。FullName
System.DateTime的
PS C:\> $ dd
2016年9月5日星期一下午12:53:20