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

为何Resolve-Path -Relative输出通过管道传给Get-FileHash时运行异常

问题原因说明
  • 第三条命令执行失败的核心逻辑:Resolve-Path -Relative的输出是字符串类型的相对路径,而Get-FileHash默认接收管道传入的是FileInfo类型的文件对象,虽然它也支持字符串路径输入,但相对路径的参数绑定容易出现匹配错误;即使执行成功,Get-FileHash的原生输出结果也只会记录文件的绝对路径,无法满足你保留相对路径的需求。
现有实现代码的问题修正

你自己写的代码整体逻辑可行,存在2处可优化调整的点:

  1. Where-Object里的正则写法错误:^*.exe属于无效正则表达式,通配符*需要匹配前置字符,匹配后缀为exe、dll的文件应该写成.*\.(exe|dll)$
  2. 可以简化写法,无需先声明空字符串再构造自定义对象

修正后的代码如下:

Get-ChildItem -Path .\ -Recurse -File | Where-Object { $_.Name -match '.*\.(exe|dll)$' } | ForEach-Object {
    [PSCustomObject]@{
        FileName = Resolve-Path -Relative $_.FullName
        SHA1 = (Get-FileHash $_.FullName -Algorithm SHA1).Hash
    }
}
更简洁的单行管道实现

如果你偏好管道写法,也可以用下面的命令直接实现需求:

Get-ChildItem -Path .\subdir\ -Recurse -Filter *.* | Select-Object @{n='FileName';e={$_ | Resolve-Path -Relative}}, @{n='SHA1';e={$_ | Get-FileHash -Algorithm SHA1 | Select-Object -ExpandProperty Hash}}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:15:04