Проверка значения по умолчанию - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь проверить пустые или пустые значения для переменных $var1 и $var2.Может кто-нибудь сказать, что я делаю не так?

testing.ps1:

Param (
    [ValidateNotNullOrEmpty()][String]$var1 = $defaultvar1,
    [ValidateNotNullOrEmpty()][String]$var2 = $defaultvar2
)
Write-Host "Value of Variable 1 : $var1 "
Write-Host "Value of Variable 2 : $var2 "

Вывод:

PS> <b>.\testing.ps1</b>
Value of Variable 1 :
Value of Variable 2 :
PS> <b>$defaultvar1=123</b>
PS> <b>$defaultvar2=678</b>
PS> <b>.\testing.ps1</b>
Value of Variable 1 : 123
Value of Variable 2 : 678
PS> <b>$defaultvar2=""</b>
PS> <b>.\testing.ps1</b>
Value of Variable 1 : 123
Value of Variable 2 :

1 Ответ

0 голосов
/ 12 декабря 2018

Как Lee_Daily указывает:

Параметр значения по умолчанию являются не подтверждены - предполагается, что вы, как автор функции, гарантирует, что значения действительны.

Более простой пример:

PS> & { param([ValidateNotNullOrEmpty()] $foo = '') "foo: [$foo]" }
foo: []

То есть '' был успешно принят в качестве значения по умолчанию, даже если онпротиворечит [ValidateNotNullOrEmpty()].

Кроме того, обычно вы не должны использовать значения внешних переменных функции в качестве значений параметров по умолчанию , поскольку это усложнит поведение функциипредсказывать.

Вместо этого используйте:

  • литералов (например, $foo = 'bar')

или

  • выражений (например,$foo = (Get-Date))

При этом Майк Шепард указывает, ссылаясь на переменные - это опция, если :

  • ваша функция определена внутри модуля ,
  • и переменные, на которые ссылаются, определены в этом же модуле .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...