Как сохранить конечные нули в параметре массива строк без кавычек - PullRequest
2 голосов
/ 13 апреля 2019

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

Как заставить PowerShell сохранить конечный ноль?

  • Формат элемента массива Number.Number
  • Элемент массива может иметь от 1 до n конечных нулей
  • Одноэлементные массивы сохраняют конечные нули
  • Многоэлементные массивы сбрасывают конечные нули

Строго ввод параметра в качестве [string []] не решает проблему.

Пример:

function Get-Customer {
    Param 
    ( 
        [string[]]$CustomerId
    )
    $CustomerId
}

> Get-Customer -CustomerId 654.1,654.10,654.1721,654.1720
654.1    #CORRECT
654.1    #INVALID
654.1721 #CORRECT
654.172  #INVALID

Ответы [ 3 ]

2 голосов
/ 13 апреля 2019

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

Так что, если вы не можете изменить поведение вашего вызывающего, то они будут числами, прежде чем они когда-либо войдут в вашу функцию.Ваш [string[]] приведёт к преобразованию числа в строку, но это уже число в тот момент и будет следовать правилам number -> string.

PowerShell очень мягок, когда дело доходит до преобразования типов, или, скорее, он изо всех сил пытается успешно преобразовать типы в случае несоответствия, поэтому в этом случае также будет трудно выдать ошибку (у вас нетдоступ к исходным значениям, чтобы узнать, что что-то не так, поскольку это происходит во время привязки параметров).

Вы можете сделать это:

function Get-Customer {
    Param 
    ( 
        [ValidateScript({
            $_ -is [string]
        })]
        [object[]]$CustomerId
    )
    $CustomerId
}

Это заставит переданные значения уже быть [string], какой тип отстой для всех других случаев, когда преобразование строк было бы полезно, хотя.

1 голос
/ 14 апреля 2019

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

function Get-CustomerId 
{ $args }
New-Alias -Name cid -Value Get-CustomerId 
cid 654.1 654.10 654.1721 654.1720

# Results

654.1
654.10
654.1721
654.1720
1 голос
/ 13 апреля 2019

Я с Бриантист , чтобы уменьшить цитирование, вы можете разделить одну строку:

function Get-Customer {
    Param 
    ( 
        [ValidateScript({
            $_ -is [string]
        })]
        [object[]]$CustomerId
    )
    $CustomerId -split ','
}

> Get-Customer -CustomerId '654.1,654.10,654.1721,654.1720',"1.000,2.00"
654.1
654.10
654.1721
654.1720
1.000
2.00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...