powershell - 语句中出现意外的令牌 - 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 方法时,方法名称和左括号 , 之间不能有空格
(
,这与在C#中允许的不同。
使用[string]
类型的.ToUpper()
实例方法作为一个简单的例子:
# 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.
笔记:
对于错误的空格,PowerShell 将空格(
()
在这种情况下)后面的内容解释为单独的表达式,这会破坏语法,因为空格分隔的表达式列表(不与操作符连接)是无效的;例如,1 2
触发相同的错误。顺便说一句:在其他情况下省略
()
方法调用 - 例如'foo'.ToUpper
- 在 PowerShell 中有一个有用的目的:它显示反射信息,即方法及其重载的签名(参数列表及其类型);例如:OverloadDefinitions ------------------- string ToUpper() string ToUpper(cultureinfo culture)
推荐阅读
- django - django 应用程序的 docker-compose up 命令后程序挂起
- gmail-api - Gmail API - 如何验证 APP 以跳过未经验证的屏幕
- python - 如何使用 Rasterio 从多数据集 MODIS 图像中打开特定数据集(波段)?Rasterio IndexError:波段索引超出范围
- python - 将 `'<'` 替换为开头,将 `'>'` 替换为字符串中所需值的结尾短语
- php - 消息:file_get_contents(sso.json):无法打开流:没有这样的文件或目录
- c++ - 如何将元素向右移动并删除二维动态数组中的超出边界的元素
- ios - 试验 Firebase - 推送通知
- io - 处理器如何通知设备单元其中断请求已在中断驱动的 I/O 中被识别?
- regex - 正则表达式,结束短语提取
- batch-file - 批处理文件CF登录