2016-05-05 19 views
1

アプリケーションとシステムのイベントログの最後の30個のエントリを読み取るスクリプトがあります。現在、スクリプトは自分のマシン上でのみ動作し、部分的なメッセージのみを出力します。PowerShellのWindowsイベントログを操作する

411905 5月5日15:05情報Microsoft-Windows ... 1501ユーザーのグループポリシー設定が正常に処理されました。最後SUCC以来検出は変更...

誰もが次の

  1. リモートコンピュータのためにこれを使用して行うことができる方法を教えてもらえますありませんでした - 私はの形式でコンピュータ名を入力しようとしたが\ domain \ computernameは動作しませんが、動作しません。
  2. セクションだけでなく、完全なメッセージを表示する方法
  3. ファイル名の一部としてコンピュータ名でファイルを保存する方法「MYCOMPUTERアプリケーションのlog.txt」

私のスクリプトは、これまでのところ、私は、スクリプトに新しいですし、これがあると便利スクリプト可能性がありますが、私はそれを得ることができないと思ったこの

Get-EventLog -LogName Application -Newest 30 -ComputerName MYCOMPUTER | Out-File -FilePath "D:\Test\Application Event Logs.txt" 

Get-EventLog -LogName System -Newest 30 -ComputerName MYCOMPUTER | Out-File -FilePath "D:\Test\System Event Logs.txt" 

のようなものです作業。

答えて

3

リモートコンピュータ

あなたが別のドメイン内のコンピュータを意味するならば、私はあなただけではコマンドレットを使用してことができるとは思いません。

代わりに、PowerShellリモーティングを使用して、リモートコンピュータ上に存在するPowerShellコマンドを実行できます。それはどのようなことに注意することが重要です

$credential = Get-Credential # enter credentials for remote machine 
$session = New-PSSession -ComputerName REMOTECOMPUTER -Credential $credential 
Invoke-Command -Session $session -ScriptBlock { 
    Get-EventLog # parameters 
} 

本文を

を:しかし、あなたはremotinリモートマシンを坤設定し、接続が許可されます確実にするために、明示的な資格情報を使用して、SSLまたは信頼できるホストを使用する必要がありますGet-WinEventによって返されるのは複雑なオブジェクトです。画面に表示されたときに表示されるのは単なるビューです。それを直接ファイルに書き出すことも、単なるビューにすぎません。代わりに、明示的に必要なものを見つけ出し、文字列を作成してファイルに書き出します。あなたはそれを点検できるように、変数にコマンドレットの結果を割り当てることで

スタート:

$events = Get-WinEvent #params 

今、あなたは結果を見ることができます。

$events | Get-Member # see what properties are available 

それでは、あなたはそれを見ることができますMessageはプロパティです。

だけメッセージを取得するには、あなたがSelect-Objectを使用することができますし、文字列ではなくプロパティとしてそれをしたいので、あなたは-ExpandProperty

$events | Select-Object -ExpandProperty Message | Out-File #etc 

すべてのメッセージ(ただし、他の情報)を書き出すということ。

実際には、あなたは、ファイルへの書き込みを返された各ログエントリを操作して、文字列を構築することがあります:

$events | ForEach-Object { 
    # $_ represents the current object 
    $msg = $_.Message 
    $id = $_.Id 
    $timeCreated = $_.TimeCreated 

    "A log entry with ID $id was created at $timeCreated, and it says:`r`n`r`n$msg`r`n---------`r`n" 
} | Out-File #params 

をコンピュータ名

を使用すると仮定すると、あなたはコンピュータ名を知っています」事前にチェックして、変数に入れて、ファイル名に埋め込みます。

$computer = 'MYCOMPUTER' 
Get-WinEvent -ComputerName $computer | ForEach-Object { 
    # do stuff like above 
} | Out-File -Path "D:\Whatever\$computer Application Log" 
+0

ありがとうございます、私はコンピュータが同じドメイン – noelmm

関連する問題