#powershell #methods #syntax
Вопрос:
У меня есть сценарий, который отлично работает на работе, но когда я запускаю тот же сценарий дома, чтобы построить на нем, сценарий завершается со следующей ошибкой:
Unexpected token '(' in expression or statement.
At C:UsersMyAccountDocumentsTest.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:tempwinevent_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, но я не уверен, с чего начать.
Ответ №1:
Вы ставите пробел между InputBox
и ('Enter
. Удалите пробел, чтобы он выполнялся как метод с аргументами:
$log = [Microsoft.VisualBasic.Interaction]::InputBox('Enter the Event ID you are looking for.', 'Event ID Query')
В противном случае вы пытаетесь сказать PowerShell, чтобы он вернул сам объект метода, и он не знает, что делать с полученным подвыражением в круглых скобках.
Ответ №2:
У вас проблема с синтаксисом (это означает, что ваша проблема не связана с тем, на какой машине вы запускаете свой код):
- При вызове методов .NET в PowerShell между именем метода и открывающей скобкой не должно быть пробела,
(
в отличие от 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)