回答編集履歴

1

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

2019/03/11 10:00

投稿

ronin
ronin

スコア89

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