首页 > 解决方案 > 使用 ISE 或 Powershell.exe 时字符串长度不同

问题描述

我用 PowerShell 编写了一个小的用户界面,以便创建舒适的校验和。目前我看到使用 ISE 和 powershell 本身之间的区别。

在 ISE 中运行 PowerShell 脚本时,我得到了完美的结果。这是我正在使用的代码(只是一个片段):

$aaa = (Get-FileHash -Algorithm SHA512 -Path $str_filepath |
       Select-Object -Property hash |
       Format-Table -HideTableHeaders |
       Out-string).TrimEnd().TrimStart()

所以我从一个文件中创建了一个校验和(SHA512)。这些是以一个文件为例的结果:

在 ISE 中运行脚本:

0518E6DF62AB7B8D7A238039262C7A0E9F1F457D514EDE2BB8B3F4719340EF4B61053EC85ED30D07688B447DBC756F3A7455D7E0C84C7BCF62A8884E4715C8A0

在 PowerShell 中运行脚本:

0518E6DF62AB7B8D7A238039262C7A0E9F1F457D514EDE2BB8B3F4719340EF4B61053EC85ED30D07688B447DBC756F3A7455D7E0C84C7BCF62A8...

如您所见,使用 PowerShell 时字符串会缩短。更令人困惑的是,缩短不一致。在我的 Windows 7 机器上,字符串甚至比我在工作的 Windows 8.1 系统上的字符串还要短。我知道在运行有关样式的脚本时,ISE 和 PowerShell 之间存在一些差异。但是更短的字符串......嗯。

所以现在的问题。你们中是否有人体验过 ISE 和 Powershell 在字符串长度限制方面的差异?如果是这样。有没有人回答我如何编写脚本以保证不会有不同的字符串结果?

标签: stringpowershell

解决方案


Format-*如果您需要进一步处理数据,请不要使用cmdlet。这些 cmdlet用于向用户显示数据。而是扩展Hash对象Get-FileHash返回的属性,如下所示:

$str_checksum_sha512 = (Get-FileHash -Algorithm SHA512 -Path $str_filepath).Hash

或像这样:

$str_checksum_sha512 = Get-FileHash -Algorithm SHA512 -Path $str_filepath |
                       Select-Object -Expand Hash

推荐阅读