ConvertFrom-String возвращает символ, а не текст - PullRequest
4 голосов
/ 03 июня 2019

Выполнение следующего кода с текстовым именем студента Infinity возвращает символ бесконечности, а не фактический текст.Может кто-нибудь объяснить, почему это так и что можно сделать для исправления.

$person="Infinity,One"
$personsplit=$person | ConvertFrom-String -Delimiter "," -PropertyNames firstname,surname

$personsplit возвращает следующий вывод

имя теперь является символом, а не текстовыми данными?

Ожидается, что вывод будет отображаться как

first name surname
--------- -------
 Infinity One 

Однако он возвращает следующее

firstname surname  
--------- -------   
     ∞    One

Для всех, кто интересуется, я в настоящее время использую следующую версию powershell

PS C: \ WINDOWS \ system32> $ psversiontable

Имя Значение
---- -----
PSVersion 5.1.17763.503
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0 ...}
BuildVersion 10.0.17763.503
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1

1 Ответ

6 голосов
/ 03 июня 2019

Похоже, вы нашли ошибку / причуду в способе, которым ConvertFrom-String пытается автоматически привести значения, которые он создает, и в вашем случае, кажется, принимает строку 'Бесконечность', а вместо этого приведение имеет вид [single]::PositiveInfinity.

Альтернативным более безопасным решением было бы не использовать ConvertFrom-String и вместо этого сделать что-то подобное:

$person="Infinity,One"
$personsplit = $person -split ','

[pscustomobject]@{
    firstname = $personsplit[0]
    lastname = $personsplit[1]
}

Если вы не возражаете против того, чтобы они находились в отдельных переменных, вы также можете сделать это:

$firstname,$lastname = $person -split ','
...