AppLocker に関連するすべてのイベント ログ、特にレベルが警告またはエラーのイベント ログを抽出したいホスト名のリストがあります。私はこのスクリプトを作成しました:
$ComputersToCheck = Get-Content 'X:\ListWithTheNames.txt'
foreach($OneHost in $ComputersToCheck)
{
try
{
$EventCollection = Get-WinEvent -LogName "Microsoft-Windows-AppLocker/EXE and DLL" -ComputerName $OneHost -Credential $CredentialFromUser
foreach ($SingelEvent in $EventCollection)
{
if($SingelEvent.LevelDisplayName -ne "Information")
{
$pathtosaveto = 'SomeFileName.txt'
$ResultString += $SingelEvent | Select Message,MachineName,UserId | Export-Csv -Path $pathtosaveto -Append
}
}
}
catch
{
//handling exceptions
}
}
これはしばらくは機能しますが、一定時間後にエラーが発生しました。
Get-WinEvent : The remote procedure call failed
At X:\FileName.ps1:22 char:28
+ $EventCollection = Get-WinEvent -LogName "Microsoft-Windows-AppLocker/EX ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-WinEvent], EventLogException
+ FullyQualifiedErrorId : The remote procedure call failed,Microsoft.PowerShell.Commands.GetWinEventCommand
そして、スクリプトが次のようなエラーを出し始めた直後:
Get-WinEvent : The handle is invalid
At X:\FileName.ps1:22 char:28
+ $EventCollection = Get-WinEvent -LogName "Microsoft-Windows-AppLocker/EX ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-WinEvent], EventLogException
+ FullyQualifiedErrorId : The handle is invalid,Microsoft.PowerShell.Commands.GetWinEventCommand
私の最初の考えは、スクリプトが到達しようとしているホストに関連しているということでしたが、リストの次は前のものと同じタイプ (Os、同じモデルでも) です。
スクリプトを 3 回実行しましたが、毎回出力サイズが異なっていました (おそらく、同じホストが同じ量のログでオンラインになっているわけではないためです)。スクリプトは 700 を超えるホストに対して実行する必要があります。このホストには、Get-Credential によってプロンプトを表示し、変数に格納して Get-WinEvent にパラメーターとして渡す特別なアカウントが必要です。
正直なところ、私はこの問題に固執していましたが、何が原因で、その理由がよくわかりません.
誰かがアイデアを持っている場合は、私と共有してください:)