最近PowerShellを使って便利だなと思ったことがあったので、メモを残します。
TCP通信でプロセス名とURLを同時に表示する
Windowsで通信状況を見る場合に、netstatを実行し、表示されたPIDや通信先IPアドレスを見て、tasklistやDNSキャッシュを調べていました。これではさすがに面倒くさいのでPowerShellで自動化処理をしてみました。
$proc = @{}
Get-Process | foreach { $proc.add($_.Id,@($_.ProcessName,$_.Path)) }
$dns = @{}
Get-DnsClientCache | foreach { if (($_.Data -ne $null) -and !$dns.ContainsKey($_.Data)) { $dns.add($_.Data,$_.entry) }}
Get-NetTCPConnection | foreach { New-Object PSCustomObject -Property @{ "dstaddr"=$_.RemoteAddress;"dns"=$dns[$_.RemoteAddress];"dstport"=$_.RemotePort;"state"=$_.state;"PID"=$_OwingProcess;"Proc"=$proc[[int]$_.OwningProcess][0];"path"=$proc[[int]$_.OwningProcess][1] }} | format-table dstaddr,dstport,state,PID,Proc,Path,dns
- プログラムの説明
1~2行目で、PIDからプロセス名とパスを検索できる辞書型変数$proc
を作っています。
3~4行目で、IPアドレスからURLを検索できる辞書型変数$dns
を作っています。
5行目で、PowerShell版nestatのGet-NetTCPConnection
の出力に、上の辞書型変数$proc
と$dns
を使って、プロセス名とパス、URLを追加しています。
イベントログをCSVファイルに出力したい
Windowsのイベントビューアーでの検索が辛いので、PowerShellで必要なデータをcsvファイル化する方法を調べてみました。これで、テキストエディタやExcelで処理できるので、ログ検索が楽になると思います。
Get-EventLog -Logname System -After "2024/08/01 08:00:00" -Before "2024/08/01 09:00:00" | Select-Object -property EventID,TimeGenerated,UserName,Message | Export-Csv -Path "event.csv" -Encoding UTF8 -NoTypeInformation -Append
- プログラムの説明
Get-EventLog
コマンドで、イベント情報を取ってきます。
-Logname
オプションで、System
を選んでいます。
-After
と-Before
オプションで、抽出期間を選んでいます。
Select-Object
コマンドで、パイプに流すオブジェクトを選別しています。
Export-Csv
コマンドで、CSVファイルとして保存しています。
-Append
オプションを使い、先にファイルがあった場合には追記するようにしています。
コマンドプロンプト対比表
PowerShellを使えば他にも色々便利になると思いますが、今は思いつかないので、今後のためにコマンドプロンプトの代わりに使えるPowerShellのコマンドレットを載せておきます。
コマンドプロンプト | PowerShell |
---|---|
arp -a | Get-NetNeighbor |
netstat -a | Get-NetTCPConnection |
ipconfig /all | Get-NetIPConfiguration -detail Get-NetIPAddress |
ping x.x.x.x | Test-Connection x.x.x.x |
tracert x.x.x.x | Test-NetConnection x.x.x.x -traceroute |
schtasks | Get-ScheduledTask |
tasklist | Get-Process |
systeminfo | Get-ComputerInfo |
ipconfig /displaydns | Get-DnsClientCache |
Get-EventLog |
あとがき
久しぶりにPowerShellを使うと思ったとおりの操作ができないので、プログラム作成に難儀しました。
プログラムを作成した際には、小まめにメモを残しておくのは重要かと思います。