声明中的意外令牌 - PowerShell

Unexpected Token in statement - PowerShell

我有一个 运行 工作正常的脚本,但是当我 运行 在家里构建相同的脚本时,脚本失败并出现以下错误:

Unexpected token '(' in expression or statement.
At C:\Users\MyAccount\Documents\Test.ps1:34 char:54
+ $Log = [Microsoft.VisualBasic.Interaction]::InputBox ('Enter the Even ...
Unexpected token '(' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken

这是我正在尝试的代码 运行:

$log = [Microsoft.VisualBasic.Interaction]::InputBox ('Enter the Event ID you are looking for.', 'Event ID Query')
cd C:\temp\winevent_logs
$List = Get-ChildItem | Where-Object {$_.FullName -match "security"} | Select-Object
Get-WinEvent -FilterHashtable @{path=$List;id=$Log} | Measure-Object | Select-Object count

我猜我的家庭系统存在配置问题,它不解释 Visual Basic 操作,但我不确定从哪里开始。

你有一个语法问题(这意味着你的问题与你运行你的代码在哪台机器上无关):

  • 在PowerShell中调用.NET方法时,必须没有space 位于方法名称和左括号之间,(,这与 C# 不同,后者是允许的。

[string] 类型的 .ToUpper() instance method 为例:

# OK - no space between 'ToUpper' and '('
PS> 'foo'.ToUpper()
FOO

# BROKEN - space before '('
PS> 'foo'.ToUpper ()

ParserError:
Line |
   1 |  'foo'.ToUpper ()
     |                ~
     | Unexpected token '(' in expression or statement.

注:

  • 与错误的 space、PowerShell 解释 space 之后的内容(在本例中为 () 作为 单独的表达式 ,它破坏了语法,因为 space 分隔的表达式列表(与运算符)无效;例如,1 2 触发相同的错误。

  • 顺便说一句:省略 () 否则将是方法调用 - 例如,'foo'.ToUpper - 提供有用的PowerShell 中的用途:它显示 反射 信息,即方法及其重载的签名(参数列表及其类型);例如:

    OverloadDefinitions
    -------------------
    string ToUpper()
    string ToUpper(cultureinfo culture)
    

你在InputBox('Enter之间放了一个space。删除 space 以便它作为带有参数的方法执行:

$log = [Microsoft.VisualBasic.Interaction]::InputBox('Enter the Event ID you are looking for.', 'Event ID Query')

否则,您试图告诉 PowerShell 做的是 return 方法对象本身,它不知道如何处理括号中的结果子表达式。