0

我在这里有这段代码:

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


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

我有一台运行整个脚本的本地机器,它可以 100% 正常工作。当我通过远程桌面在 Windows Server 标准上运行此代码时,我得到以下信息:

“Get-EventLog:找不到与参数名称'before'匹配的参数”它指的是“$errorCommand =”,我一生都无法弄清楚为什么它找不到这个参数,是我的powershell设置不正确?

4

1 回答 1

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 会被覆盖,然后再修复它。

于 2014-06-25T19:01:15.637 回答