Вы не можете сохранить этот 0, если вызывающая сторона не помещает его в кавычки.Дело в том, что эти значения будут интерпретироваться как числа, потому что они соответствуют шаблону числовых литералов.
Так что, если вы не можете изменить поведение вашего вызывающего, то они будут числами, прежде чем они когда-либо войдут в вашу функцию.Ваш [string[]]
приведёт к преобразованию числа в строку, но это уже число в тот момент и будет следовать правилам number -> string
.
PowerShell очень мягок, когда дело доходит до преобразования типов, или, скорее, он изо всех сил пытается успешно преобразовать типы в случае несоответствия, поэтому в этом случае также будет трудно выдать ошибку (у вас нетдоступ к исходным значениям, чтобы узнать, что что-то не так, поскольку это происходит во время привязки параметров).
Вы можете сделать это:
function Get-Customer {
Param
(
[ValidateScript({
$_ -is [string]
})]
[object[]]$CustomerId
)
$CustomerId
}
Это заставит переданные значения уже быть [string]
, какой тип отстой для всех других случаев, когда преобразование строк было бы полезно, хотя.