2014-06-25 81 views
0

我這裏有這個代碼片段:Powershell的獲取,事件日誌-before參數未發現

$currentDate = get-date 
    $pastDate = $currentDate.addhours(-5) 


    $errorCommand = get-eventlog -Before $currentDate -After $pastDate -logname Application -source "ESENT" 
    $errorInfo = $errorCommand | out-string 

我有我運行整個腳本本地機器,它工作100%的罰款。 當我運行在Windows服務器標準的代碼,通過遠程桌面,我得到如下:

「獲取,事件日誌:一個參數不能被發現,‘前’匹配參數名」這是指 爲「$ errorCommand = 「我不能爲了我的生活找出它爲什麼找不到這個參數,是不是用我的powershell安裝不正確?

+0

「Get-EventLog」cmdlet是否有可能被重新定義?有人可以用自己的函數覆蓋內置的cmdlet。 – iCodez

+0

@iCodez是的,它可能是這種情況。當我得到Get-EventLog的幫助時,在params之前或之後都沒有提到,實際上相當多的東西似乎沒有被提及。我認爲我將不得不尋找其他方式來達到與我的腳本相同的效果,但以一種不同的方式......編輯:也許某種混合涉及-newest可以解決我的問題。 – Blargenspiel

+0

執行'Get-Command Get-EventLog'並查看ModuleName是否爲Microsoft.PowerShell.Management,或者是否列出了多個。 – TheMadTechnician

回答

0

看起來內置的Get-EventLog被同名的不同函數覆蓋。它不僅是缺少許多標準的參數,但該命令Get-Command Get-EventLog沒有提到Microsoft.Powershell.Management像它應該有:

PS > Get-Command Get-EventLog 

CommandType  Name    ModuleName        
-----------  ----    ----------        
Cmdlet   Get-EventLog  Microsoft.PowerShell.Management   


PS > 

您可以使用New-Alias設置名稱回到原來的cmdlet:

$currentDate = get-date 
$pastDate = $currentDate.addhours(-5) 

##################################################################### 
New-Alias Get-EventLog Microsoft.PowerShell.Management\Get-EventLog 
##################################################################### 

$errorCommand = get-eventlog -Before $currentDate -After $pastDate -logname Application -source "ESENT" 
$errorInfo = $errorCommand | out-stringApplication -source "ESENT" 

請參見下面的演示:

PS > function Get-EventLog { 'Different' } 
PS > Get-EventLog # This is a new function, not the original cmdlet 
Different 

PS > New-Alias Get-EventLog Microsoft.PowerShell.Management\Get-EventLog 
PS > Get-EventLog # This is the original cmdlet 
cmdlet Get-EventLog at command pipeline position 1 
Supply values for the following parameters: 
LogName: 

儘管最好調查爲什麼該cmdlet首先被覆蓋,然後修復該問題。

+0

這樣做似乎沒有任何改變,我仍然缺少這些參數,它可能是好的也注意到我目前是該公司的實習生。我相信他們有理由改變了這個cmdlet,不想破壞任何東西:P我也是powershell noob,所以原諒我的白癡。 – Blargenspiel

+0

不用擔心。我給的線不會破壞任何東西;它只會更改當前PowerShell會話的名稱。另外,我確定'Get-EventLog' cmdlet被重新定義,因爲它缺少許多正常的參數,並且你說'Get-Command Get-EventLog'沒有提及'Microsoft.Powershell.Management'就像它應該有。您是否將該行放在您使用'Get-EventLog'的行的上方?(請參閱我的編輯)? – iCodez

+0

是的,我已妥善放置該命令。它只是不幸地改變了一切。我仍然被告知不存在。我將不得不徹底解決這個問題並以不同的方式進行編碼?也可以這是一個版本問題?運行'get-host'會告訴我該機器當前正在運行1.0.0.0。我們可以使用4.0版本了嗎? – Blargenspiel