【问题标题】:Powershell Get-EventLog -before parameter not foundPowershell Get-EventLog - 未找到参数之前
【发布时间】:2014-08-16 11:01:20
【问题描述】:

我这里有这段代码:

    $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 设置不正确?

【问题讨论】:

  • Get-EventLog cmdlet 是否有可能被重新定义?有人可以用自己的函数覆盖内置 cmdlet。
  • @iCodez 是的,可能是这样。当我在 Get-EventLog 上获得帮助时,没有提及之前或之后的参数,实际上似乎很多都丢失了。我想我将不得不找到其他方法来实现与我的脚本相同的效果,但以不同的方式......编辑:也许某种涉及 -newest 的混合物可以解决我的问题。
  • 执行 Get-Command Get-EventLog 并查看 ModuleName 是否为 Microsoft.PowerShell.Management,或者是否列出了多个。
  • @TheMadTechnician 执行此操作后,我得到标题“命令类型、名称和定义”,没有提及 Microsoft.powershell.management

标签: powershell get-eventlog


【解决方案1】:

似乎内置的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 被覆盖,然后再修复它。

【讨论】:

  • 这样做似乎没有任何改变,我仍然缺少这些参数,还需要注意我目前是公司的实习生。我确信他们有充分的理由更改了 cmdlet,不想破坏任何东西:P 我也是一个 powershell 菜鸟,所以请原谅我的白痴。
  • 不用担心。我给的线不会破坏任何东西;它只会更改当前 PowerShell 会话的名称。此外,我确信 Get-EventLog cmdlet 已重新定义,因为它缺少许多正常参数,并且您说 Get-Command Get-EventLog 没有像它应该提到的那样提及 Microsoft.Powershell.Management。您是否将该行放在使用 Get-EventLog 的行上方(请参阅我的编辑)?
  • 是的,我已经正确放置了命令。不幸的是,它根本没有改变任何东西。我仍然被告知以前不存在。我是否必须完全解决这个问题并以不同的方式对其进行编码?这也可能是版本问题吗?运行“get-host”告诉我机器当前正在运行 1.0.0.0。我们已经升级到 4.0 版了,不是吗?
  • 是的,运行上面的命令,标题“ModuelName”对我来说是“定义”,并开始列出 cmdlet 可以采用的参数。编辑:我会考虑尝试在这台机器上更新 powershell。
  • 发现您的问题:这是版本问题。如here 所述,PowerShell 1.0 Get-EventLog 没有-Before 参数。如here 所述,这是在 PowerShell 2.0 中引入的。因此,您要么需要重新编写脚本以不使用 Get-EventLog 这样的方式,要么如果可能的话,让您的上级升级 PowerShell。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-26
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
  • 1970-01-01
相关资源
最近更新 更多