如何在表达式中使用 cmdlet
How to use cmdlet inside an expression
如 中所述,我想要目录中文件列表的名称和文件版本。
直到现在,多亏了Theo,我已经有了这个:
$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 日:-))。
这不起作用,但没有错误消息:就好像校验和的问题根本不存在。
有人知道我该如何解决这个问题吗?
提前致谢
您的代码实际上给出了一个错误,但是 表达式脚本块 中的错误被悄悄地忽略了。参见官方文档的Notes。
PS /> @{} | Select-Object @{Name = 'Something'; Expression = { throw }}
Something
---------
如果您检查 $Error
automatic variable,您可能会看到如下内容:
PS /> $Error[0]
Get-FileHash: Cannot bind argument to parameter 'Path' because it is null.
正确的表达方式应该是:
Expression = {(Get-FileHash $_.FullName).Hash}
如
直到现在,多亏了Theo,我已经有了这个:
$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 日:-))。
这不起作用,但没有错误消息:就好像校验和的问题根本不存在。
有人知道我该如何解决这个问题吗?
提前致谢
您的代码实际上给出了一个错误,但是 表达式脚本块 中的错误被悄悄地忽略了。参见官方文档的Notes。
PS /> @{} | Select-Object @{Name = 'Something'; Expression = { throw }}
Something
---------
如果您检查 $Error
automatic variable,您可能会看到如下内容:
PS /> $Error[0]
Get-FileHash: Cannot bind argument to parameter 'Path' because it is null.
正确的表达方式应该是:
Expression = {(Get-FileHash $_.FullName).Hash}