【问题标题】:ConvertFrom-String returns symbol not textConvertFrom-String 返回符号而不是文本
【发布时间】:2019-06-03 07:49:41
【问题描述】:

使用学生文本名称 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

Name                           Value                                           
----                           -----                                           
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 

【问题讨论】:

  • 该 cmdlet 中的解析系统将 Infinity 视为数学术语,并将属性类型设置为 float。我的设置将Infinity 作为浮点文本名称,而不是作为无穷大符号。你可以做至少两件事之一......提供一个模板,为该属性设置[string]类型或使用ConvertFrom-CSV并给cmdlet一个-Header行而不是-PropertyNames行。
  • 您可以运行$PSVersionTable 并将其添加到您的问题中吗?我无法重现它(PS 5.1)。
  • @robdy - 仔细看看你得到的输出。 Infinity 单词它 对齐,而One 单词它 对齐。即第 1 个数字布局和第 2 个文本布局。另外,如果您在每个属性上运行.GetType(),第一个将是float ...真是奇怪的故障... [grin]
  • @Lee_Dailey 你说的对,谢谢!
  • @robdy - 不客气!很高兴能帮上一点忙……[咧嘴]

标签: powershell powershell-3.0


【解决方案1】:

您似乎发现了一个错误/怪癖,ConvertFrom-String 尝试自动转换它创建的值,在您的情况下,似乎采用字符串“Infinity”而不是转换为 @987654324 @。

另一种更安全的解决方案是不使用ConvertFrom-String,而是执行以下操作:

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

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

如果您不介意它们位于单独的变量中,您也可以这样做:

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

【讨论】:

  • 谢谢马克,感谢您的回答和快速回复。我会将您的解决方案合并为当前的解决方法。有没有办法将此升级到微软?信不信由你,Infinity 是我们数据库中的一个学生姓名。
  • 我认为您不太可能在 Windows PowerShell 中获得修复。看起来与 PowerShell Core 一样,ConvertFrom-String cmdlet 不可用,也不太可能被移植,因为它使用了非开源代码:github.com/PowerShell/PowerShell/issues/2123
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-29
  • 2016-03-12
  • 1970-01-01
相关资源
最近更新 更多