teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

スクリプトを描いてみました。

2019/03/11 10:00

投稿

ronin
ronin

スコア89

answer CHANGED
@@ -2,4 +2,71 @@
2
2
  検討違いでしたらすみません。
3
3
 
4
4
  [カスタムビュー作成@IT]
5
- (https://www.atmarkit.co.jp/fwin2k/win2ktips/1191custevt/custevt.html)
5
+ (https://www.atmarkit.co.jp/fwin2k/win2ktips/1191custevt/custevt.html)
6
+
7
+ 2019/03/11 18:46 追記
8
+ lazybones2000さんに教えて頂いたコマンドで手動で任意(一日単位でも可能)の日付のログを取得する感じのスクリプトを書いてみました。
9
+ なお、サーバへアクセスできるクライアント端末からの使用をイメージしています。
10
+
11
+ 使い方の説明
12
+ 1.LogStart,LogEndに開始と終了日付を設定します。
13
+ 2.WorkDirに作業用ディレクトリパスを入力(末尾に\を入れてください)
14
+ 3.WorkDirにServerList.txtとLogList.txtを入れてください。
15
+ 4.3の両ファイルに取得したいサーバ名とログ名を入れてください。
16
+   ※途中で空白行があれば、それ以降は処理しません。
17
+ 5.ログの出力形式を選択してください。(1は一つのファイルにまとめられた状態。2はサーバ名で分けられた状態、3はログ名で分けられた状態
18
+  イメージ
19
+   1 = WindowsServerLog_20190301
20
+   2 = ServerName1_20190301
21
+   3 = ServerName1_Application_20190301
22
+
23
+ ```PowerShell
24
+ $ErrorActionPreference = "silentlycontinue"
25
+ $LogStart = "2019/3/1" #開始 yyyy/MM/dd
26
+ $LogEnd = "2019/3/2" #終了 yyyy/MM/dd
27
+ $WorkDir = "C:\Users\hostname\Desktop\log\"
28
+ $ServerListFile = $WorkDir+"ServerList.txt"
29
+ $LogListFile = $WorkDir+"LogList.txt"
30
+ $LogOutStaus = "3" #ログの出力形式 "1:一つのファイル","2:サーバ単位で分割","3:サーバとログ名で分割"
31
+ $OutFileName = ""
32
+ $ServerList = (Get-Content -Encoding UTF8 $ServerListFile)
33
+ $LogList = (Get-Content -Encoding UTF8 $LogListFile)
34
+
35
+
36
+ # ステータスが"1"であれば一つのファイルに纏めて出す
37
+ if($LogOutStaus.Equals("1")){ $OutFileName = "WindowsServerLog_"+(get-date $LogStart -format yyyyMMdd)+".csv" }
38
+
39
+ #サーバ数分繰り返す
40
+ foreach($server in $ServerList){
41
+
42
+ # 途中で改行があれば以降は参照しない
43
+ if($server.Equals("")){
44
+ break;
45
+ }
46
+
47
+ # ステータスが"2"であればサーバ単位で出力する
48
+ if($LogOutStaus.Equals("2")){ $OutFileName = $server+"_"+(get-date $LogStart -format yyyyMMdd)+".csv" }
49
+
50
+ #ログ分繰り返す
51
+ foreach($logname in $LogList){
52
+
53
+ #途中で改行があれば以降は参照しない
54
+ if($logname.Equals("")){
55
+ break;
56
+ }
57
+
58
+ # ステータスが"3"であればサーバ+ログ単位で出力する
59
+ if($LogOutStaus.Equals("3")){ $OutFileName = $server+"_"+$logname+"_"+(get-date $LogStart -format yyyyMMdd)+".csv"}
60
+
61
+ Get-WinEvent -ComputerName $server -FilterHashtable `
62
+ @{logname=$logname; starttime=$LogStart; endtime=$LogEnd;level=1,2,3} | ` #levelの末尾に4を追加するとinfoも出る。
63
+ Select-Object -Property TimeCreated,LogName,LevelDisplayName,ProviderName,id,MachineName,Message | ` #itemの選定をしないならワイルドカードを設定
64
+ Export-Csv -UseCulture -Path $WorkDir$OutFileName -Append -Encoding UTF8 -NoTypeInformation
65
+
66
+ }
67
+ }
68
+ ```
69
+
70
+ ちなみに、私の勉強方法ですが、基本的にググって出てきたものを試したり、get-commandで出てきたコマンド名を試したり…と言った感じですので、動けばいいか、程度の事しかできません。
71
+
72
+ 以上です。