使用Cmdlet命令输出和字符串连接

5
我该如何将一个命令的输出和一个字符串文字合并到同一行并输出到主机?
我正在尝试将(Get-BitLockerVolume -MountPoint X:).EncryptionPercentage(返回12)与字面量'% complete'组合起来,如下所示:
(Get-BitLockerVolume -MountPoint X:).EncryptionPercentage + '% complete'

我希望得到的是:

完成12%

但实际上我遇到了错误:无法将值“%完成”转换为类型“System.Single”。错误:“输入字符串不符合格式要求。”

如何在单行上执行此操作?我已经搜索了解决方案,但显然不知道如何表达这个问题,因为我一直得到关于如何连接字符串或变量而不是命令输出的信息。示例:PowerShell:在cmdlet之后使用变量连接字符串


3
(Get-BitLockerVolume -MountPoint X:).EncryptionPercentage.ToString() + '% complete' or '{0} % Complete' -f (Get-BitLockerVolume -MountPoint X:).EncryptionPercentage - TessellatingHeckler
2个回答

11

使用PowerShell时,当您使用+时,它会尝试将第二个参数转换为第一个参数的类型。EncryptionPercentage是一个Single类型,因此它会尝试将'% complete'转换为Single类型,这会引发错误。

要解决此问题,您可以预先将EncryptionPercentage转换为字符串。

 [string](Get-BitLockerVolume -MountPoint X:).EncryptionPercentage + '% complete'

或者您可以在双引号内使用子表达式$()进行字符串插值。

"$((Get-BitLockerVolume -MountPoint X:).EncryptionPercentage)% complete"

正如TessellatingHeckler所指出的那样,.ToString()方法也会将其转换为字符串。

(Get-BitLockerVolume -MountPoint X:).EncryptionPercentage.ToString() + '% complete'

你可以使用格式化运算符-f将值插入到字符串中。其中{}-f之后逗号分隔参数的索引。

'{0} % Complete' -f (Get-BitLockerVolume -MountPoint X:).EncryptionPercentage

0

如错误信息所示,PowerShell试图将'% complete'转换(强制类型转换)为System.Single类型。这是因为您的命令的输出是一个数字。

要获得您要求的输出,请在命令之前使用[string]将数字输出转换为字符串。然后命令的两个元素都将被视为字符串:

[string](Get-BitLockerVolume -MountPoint X:).EncryptionPercentage + '% complete'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接