如何在表达式中使用cmdlet



正如前面的问题中所解释的,我希望在目录中有一个文件列表的名称和文件版本。

直到现在,多亏了西奥,我已经有了这个:

$result = 
Get-ChildItem -Path 'X:path with spaces' | 
Where-Object {$_.Extension -match '.(dll|exe)'} |
Select-Object Name, 
@{Name = 'FileVersion'; 
Expression = {$_.VersionInfo.FileVersion}}

现在我想添加校验和
为了实现这一点,我尝试了以下方法:

$result = 
Get-ChildItem -Path 'X:path with spaces' | 
Where-Object {$_.Extension -match '.(dll|exe)'} |
Select-Object Name, 
@{Name = 'FileVersion'; 
Expression = {$_.VersionInfo.FileVersion}}, 
@{Name = 'CheckSum'; 
Expression = {Get-FileHash($_).Hash}}

所以,基本上,我添加了另一个";事物;我试着添加了一个名字和一个表达式(以防这看起来很荒谬:这是我的第一个Powershell日:-(
这不起作用,但没有错误消息:就好像校验和的问题根本不存在一样。

有人知道我该怎么解决吗
提前感谢

您的代码实际上给出了一个错误,但表达式脚本块中的错误被悄悄忽略。请参阅官方文档的注释

PS /> @{} | Select-Object @{Name = 'Something'; Expression = { throw }}
Something
---------

如果你检查你的$Error自动变量,你可能会看到这样的东西:

PS /> $Error[0]
Get-FileHash: Cannot bind argument to parameter 'Path' because it is null.

正确的表达式应该是:

Expression = {(Get-FileHash $_.FullName).Hash}

相关内容

  • 没有找到相关文章

最新更新