5

私は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

どんな援助もいただければ幸いです。

4

3 に答える 3

8

1つの方法は、正規表現を使用して日付/時刻文字列を解析し、それを日付/時刻オブジェクトに変換することです。

$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'
于 2012-05-22T23:02:43.177 に答える
1

または単に:

($line -split ':\s+|:\d{3,}')[2]
于 2012-05-23T05:15:44.963 に答える
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; zzzzzzzzzzzzzzzzzzzzzzzzzzzz

PS C:\> $ lines = Get-Content "〜\ Documents \ FileName.log"

以下の行は、パターン'd / m / yyyy h:mm:ss [A / P] M'を抽出し、一致するすべてのキャプチャを示しています

PS C:\> $ lines | %{[regex] :: Matches($ _、'(\ d + / \ d + / \ d \ d \ d \ d)\ s(\ d +:\ d +:\ d +)\ s([AP] M)' )} | キャプチャを選択

DateTime形式で最初の値を取得します

PS C:\> [datetime] $ dd =($ lines |%{[regex] :: Matches($ _、'(\ d + / \ d + / \ d \ d \ d \ d)\ s(\ d +: \ d +:\ d +)\ s([AP] M)')} | Select -First 1 Value).Value

PS C:\> $ dd.GetType()。FullName
System.DateTime

PS C:\> $dd
2016年9月5日月曜日12:53:20PM

于 2016-09-12T13:11:59.810 に答える