You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中将字符串转换为可被Get-FileHash使用的流对象?

好问题!确实PowerShell没有原生提供一个直接把字符串转成流的cmdlet,但我们可以用.NET的基础类快速实现,甚至封装成一个自定义函数,让用法完全贴近你想要的简洁形式。

直接用一行表达式实现

不用写额外函数的话,你可以直接把字符串转成字节数组再包装成MemoryStream,直接传给Get-FileHash的-InputStream参数:

Get-FileHash -InputStream ([System.IO.MemoryStream]::new([System.Text.Encoding]::UTF8.GetBytes("Quick brown fox jumps over the lazy dog."))) -Algorithm SHA512

这里的逻辑很简单:

  • [System.Text.Encoding]::UTF8.GetBytes()把字符串转换成UTF-8编码的字节数组(你也可以换成ASCII、Unicode等其他编码,根据需求调整)
  • [System.IO.MemoryStream]::new()把字节数组包装成内存流,正好符合-InputStream需要的Stream类型参数

封装成自定义函数,让用法更直观

如果想让写法更像你举例的Convert命令那样,我们可以自己写一个简单的ConvertTo-Stream函数:

function ConvertTo-Stream {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory, ValueFromPipeline)]
        [string]$InputObject,
        [System.Text.Encoding]$Encoding = [System.Text.Encoding]::UTF8
    )
    process {
        $bytes = $Encoding.GetBytes($InputObject)
        [System.IO.MemoryStream]::new($bytes)
    }
}

之后你就可以用完全符合预期的方式调用了:

# 直接传参
Get-FileHash -InputStream (ConvertTo-Stream "Quick brown fox jumps over the lazy dog.") -Algorithm SHA512

# 或者用管道(更符合PowerShell风格)
"Quick brown fox jumps over the lazy dog." | ConvertTo-Stream | Get-FileHash -Algorithm SHA512

注意事项

  • 编码的影响:不同的字符编码会生成不同的字节数组,最终哈希结果也会不一样。比如用ASCII编码处理包含非ASCII字符的字符串会丢失信息,所以要根据你的实际场景选择合适的编码(函数默认用UTF-8,这是最通用的选择)。
  • 资源释放:MemoryStream是轻量级的内存对象,Get-FileHash在处理完流之后会自动释放相关资源,不需要手动调用Dispose()。

内容的提问来源于stack exchange,提问作者Armen Michaeli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:34:39