3

Я сталкивался с чем-то с PS, и я не знаю, делаю ли я что-то не так или, может быть, это просто ошибка в PS (и я нигде не могу найти ответ)? Я протестировал это с PS v4, v5.0 и v5.1, используя разные ОС Windows. Во-первых, кажется, что независимо от того, какая ОС и какая версия PS, когда я запускаю следующий фрагмент кода ниже либо непосредственно через окно PS, либо через сценарий PS, я не получаю никаких ошибок, и все выглядит нормально :

$error.clear()
If ($error -ne $null) { $error }

Тем не менее, на определенных типах систем (похоже, проблема на основе ОС), я запускаю следующий код, и иногда я получаю сообщение об ошибке:

$error.clear()
If ($error -ne $null)
{
$error
}

Я могу запустить приведенный выше код, генерирующий ошибки, на серверах Windows 10 и Windows 2016, и все в порядке (об ошибках не сообщается). Если я запускаю точно такой же код в Windows 2008 R2 или Windows 2012 R2, я получаю следующее сообщение об ошибке:

Missing statement block after If ( condition ).

Кажется, не имеет значения, установлен ли у меня PS 4, 5 или 5.1.1 в системах Windows 2008 R2 и Windows 2012 R2, я все еще получаю ошибку. И, кажется, не имеет значения, работаю ли я от имени администратора или нет, результаты те же. И, похоже, не имеет значения, являются ли они присоединенными к домену или системами рабочих групп. Все наши системы исправлены с момента обновления вторника, выпущенного в мае 2017 года.

Является ли требованием PS (в системах Windows 2008 R2 и Windows 2012 R2), что открывающая фигурная скобка оператора PS «IF» должна находиться в той же строке, что и сам оператор IF? Похоже, что это не так для Windows 10 и Windows 2016 server.

Заранее спасибо,

UCG

2 ответа2

0

У меня была такая же проблема, когда мой блок операторов включал здесь-строку

If ($error -ne $null)
{
 $query = @" 
 do some sql;
 do more sql; 
 "@
}

Когда я изменил его на одну строку без здесь-строки, это работало

If ($error -ne $null)
{
 $query = "do some sql;do more sql;"
}

В вашем блоке операторов может быть что-то, что PowerShell также не поддерживает как многострочное.

0

Когда PowerShell получает строку (или блок) кода - он оценивает этот блок (или строку) в целом

В этом случае ваша первая строка: If ($error -ne $null)

PowerShell знает, как взаимодействовать с линией, но имеет неправильный синтаксис, потому что PowerShell не имеет блока "что делать" в случае выполнения критериев.

Если вы передаете PowerShell блок в целом - он распознает блок "что делать" и знает, куда ему нужно перейти:

Можете ли вы более подробно рассказать о том, какие системы и платформы, которые вы находите, поддерживают одну строку? Я только что проверил это на Win10 (PowerShell 5), 2012R2 (Powershell 4 и 5), Windows 7 (PowerShell 4 и 5), и все они ведут себя точно так же.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .