PowerShell - ParentContainsErrorRecordException при указании строкового параметра по умолчанию - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь написать сценарий PowerShell, для которого необходимо указать несколько разных параметров при его выполнении (некоторые из них являются обязательными, некоторые нет). Некоторые из этих параметров имеют значение по умолчанию, которое следует использовать, если пользователь не указал никакого другого значения вместо значения по умолчанию. По какой-то причине я просто не могу понять, как это сделать. Мой текущий код выглядит следующим образом:

param
(
    [Parameter(Position=0,Mandatory)]
    [string[]]$TemplateNames,
    [Parameter(Position=1)]
    [string]$Mode = "d",
    [Parameter(Position=2)]
    [string]$Log = $env:TEMP
)

С этим кодом я всегда получаю сообщение об ошибке «ParserError: (:) [], ParentContainsErrorRecordException» в строке, где я определяю параметр Mode и сообщение об исключении, сообщающее мне что выражение недействительно, потому что оператор присваивания должен быть объектом, который может принимать присваивания. Что я делаю не так? Это должно быть довольно просто и легко сделать, но я просто не понимаю, как я должен это делать.

1 Ответ

1 голос
/ 06 августа 2020

Я не вижу ничего плохого в этом блоке параметров. Чтобы быть уверенным, я тестировал это в PowerShell Core 7, и он работал нормально.

param
(
    [Parameter(Position=0,Mandatory)]
    [string[]]$TemplateNames,

    [Parameter(Position=1)]
    [string]$Mode = "d",
    
    [Parameter(Position=2)]
    [string]$Log = $env:TEMP
)

"TemplateNames: {0}" -f ($TemplateNames -join ",")

"Mode: {0}" -f $Mode

"Log {0}" -f $Log
# only pass templates
.\foo.ps1 a,b,c
TemplateNames: a,b,c
Mode: d
Log C:\Users\user\AppData\Local\Temp

# pass templates and mode
.\foo.ps1 a,b,c X
TemplateNames: a,b,c
Mode: X
Log C:\Users\user\AppData\Local\Temp

# pass templates, mode and log path
.\foo.ps1 a,b,c X c:\temp\foobar
TemplateNames: a,b,c
Mode: X
Log c:\temp\foobar

Помните, что если вы хотите передать журнал и шаблоны, но НЕ режим, вам придется использовать именованные параметры (из-за строгой упорядоченности позиций)

.\foo.ps1 a,b,c -Log c:\temp\foobar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...