2016-03-02 82 views
0

我有一個主機名列表,我想從中提取所有與AppLocker相關的事件日誌,尤其是帶有級別警告和/或錯誤的事件日誌。 我製作的這個腳本:PS Get-WinEvent拋出'句柄無效'

$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 
}  
} 

這工作了一段時間,但在一定的時間ammount的後,我得到了一個錯誤:

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 

我的第一個想法是,它與腳本嘗試達到的主機有關,但列表中的下一個是與以前相同的類型(即使是相同的模型)。

我運行腳本3次,每次輸出大小都不同(可能是因爲不同主機在線時具有相同數量的日誌)。 該腳本應該運行700多個主機,需要一個特殊帳戶的Get-Credential提示存儲在一個變量中,並將Get-WinEvent作爲參數傳遞給它。

說實話我堅持這個問題,並不確定是什麼原因導致這一點,爲什麼。

如果任何人有一個想法,請與我分享:)

回答

0

試試這個嘗試失敗,主機和空對象捕捉引用。你可以編寫接收到的異常,但是我沒有在這個文件中包含它來使失敗的主機文件易於閱讀。希望我在飛過它的時候明白了道理,並沒有真正的案例來對付。

$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 -ErrorAction Stop 

    if($EventCollection) { 
     foreach ($SingelEvent in $EventCollection) { 
      if($SingelEvent.LevelDisplayName -ne "Information") { 
       $pathtosaveto = 'SomeFileName.txt' 
       $ResultString += $SingelEvent | Select Message,MachineName,UserId | Export-Csv -Path $pathtosaveto -Append     
       } 
      } 
     } else { 
      Out-File -InputObject $($OneHost + " Empty Event Collection") -FilePath "C:\FailedHosts.txt" -Append -Encoding ascii 
     } 
    } 
catch { 
    Out-File -InputObject $($OneHost + " Failed Connection") -FilePath "C:\FailedHosts.txt" -Append -Encoding ascii 
}  
} 
+0

嗨,不幸的是,它沒有奏效。但是現在我有一個漂亮的脫機主機列表。這是事:)然而,問題仍然存在。在我看來,這是相當隨機的,每次生成不同數量的日誌,但可能不相關。目前,我是盲目的,沒有更多的想法。 – SecThor

+0

它是否拋出錯誤或以什麼方式失效?我想當你說一個FailedHosts.txt文件填充的脫機主機的漂亮列表?我只能假設它不是您在ListWithTheNames.txt文件中運行的機器的包含列表。我會在FailedList的一些機器上手動嘗試'Get-WinEvent'查詢來查看響應是什麼,我們可以圍繞結果的變化包裝一些邏輯。 – ssaviers

+0

前幾的有: '獲取-WinEvent:接口未知 在A:\ AppLocker_ExtractBlockedExes(2)的.ps1:9字符:28 + $ EventCollection = GET-WinEvent -LogName「微軟Windows的的AppLocker/EX ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:NotSpecified:(:) [Get-WinEvent ],EventLogException + FullyQualifiedErrorId:接口是未知的,Microsoft.PowerShell.Commands.GetWinEventCommand' – SecThor

相關問題