Powershell获取事件日志-未找到参数之前

Powershell获取事件日志-未找到参数之前,powershell,get-eventlog,Powershell,Get Eventlog,我这里有一段代码: $currentDate = get-date $pastDate = $currentDate.addhours(-5) $errorCommand = get-eventlog -Before $currentDate -After $pastDate -logname Application -source "ESENT" $errorInfo = $errorCommand | out-string 我有一台本地机器,我在上

我这里有一段代码:

    $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 standard上通过远程桌面运行此代码时,我得到以下信息:

“Get EventLog:找不到与参数名称'before'匹配的参数”
它指的是“$ERRORCOMAND=”,我一辈子都不明白它为什么找不到这个参数,是不是我的powershell设置不正确?

内置函数似乎被同名的不同函数覆盖了。它不仅缺少许多标准参数,而且命令
Get command Get EventLog
也没有像它应该具有的那样提到
Microsoft.Powershell.Management

PS>Get命令获取事件日志
CommandType名称ModuleName
-----------     ----             ----------                              
Cmdlet获取事件日志Microsoft.PowerShell.Management
PS>

您可以使用将名称设置回原始cmdlet:

$currentDate=获取日期
$pastDate=$currentDate.addhours(-5)
#####################################################################
新别名Get-EventLog Microsoft.PowerShell.Management\Get-EventLog
#####################################################################
$errorCommand=get eventlog-在$currentDate之前-在$pastDate之后-logname应用程序-源“ESENT”
$errorInfo=$errorCommand | out stringApplication-源“ESENT”
请参见下面的演示:

PS>函数获取事件日志{“不同”}
PS>Get EventLog#这是一个新函数,而不是原始cmdlet
不同的
PS>New Alias Get EventLog Microsoft.PowerShell.Management\Get EventLog
PS>Get EventLog#这是原始的cmdlet
cmdlet在命令管道位置1获取事件日志
提供以下参数的值:
日志名:

尽管最好首先调查为什么要重写cmdlet,然后修复它。

是否有可能重新定义
Get-EventLog
cmdlet?有人可能用自己的函数覆盖了内置cmdlet。@iCodez是的,可能是这样。当我在GetEventLog上获得帮助时,并没有提到参数之前或之后的任何内容,事实上,有相当多的参数似乎丢失了。我想我必须找到一些其他的方法来实现我的剧本同样的效果,但是用一种不同的方式。。。编辑:也许某种涉及-newest的混合可以解决我的问题。执行
Get命令Get EventLog
并查看ModuleName是否为Microsoft.PowerShell.Management,或者是否列出了多个ModuleName。@MadTechnician执行此操作后,我会得到标题“命令类型、名称和定义”没有提及Microsoft.powershell.Managements这样做似乎没有任何改变,我仍然缺少这些参数,也许还应该注意到我目前是该公司的实习生。我确信他们更改cmdlet是有充分理由的,不会想破坏任何东西:P我也是一个powershell noob,所以请原谅我的愚蠢。别担心。我给的线不会断任何东西;它仅更改当前PowerShell会话的名称。另外,我确信,
Get EventLog
cmdlet已被重新定义,因为它缺少许多正常参数,而且您说过
Get命令Get EventLog
没有像应该提到的那样提到
Microsoft.Powershell.Management
。您是否将该行放置在使用
Get EventLog
的行上方(请参见我的编辑)?是的,我已正确放置该命令。不幸的是,它并没有改变什么。我仍然被告知以前不存在。我是否必须完全解决这个问题并以不同的方式编写代码?这也可能是版本问题吗?运行“get host”告诉我计算机当前正在运行1.0.0.0。我们升级到了4.0版本没有?是的,运行上面的命令,标题“ModuelName”对我来说是“Definition”,并开始列出cmdlet可以使用的参数。编辑:我将研究尝试更新此计算机上的powershell。发现您的问题:这是版本问题。如上所述,PowerShell 1.0
Get EventLog
没有
-Before
参数。如前所述,这是在PowerShell 2.0中引入的。因此,您需要重新编写脚本以避免像那样使用
Get EventLog
,或者,如果可能的话,让您的上级升级PowerShell:)