0

我有一个 PowerShell 函数,它返回一个可执行名称列表(带有文件扩展名),如果它们正在运行,我试图杀死它们中的任何一个,但没有太大成功。这是我正在使用的命令:

Get-Executable-Names `
| where { $_ -match ".exe" } `
| foreach { $_ -replace ".exe" } `
| foreach { ps $_ } `
| kill

如果我将 Get-Executable-Names 的输出存储在一个变量中并显示其内容,它将显示为:

Path
----
A.exe
B.exe
C.exe

PowerShell 报告此错误:

Get-Process:找不到名为“@{Path=A}”的进程。验证进程名称并再次调用 cmdlet。
+ $Get-Executable-Names | 其中 { $_ -match ".exe" } | foreach { $_ -replace ".exe" } | foreach { ps <<<< $_ } | kill
+ CategoryInfo : ObjectNotFound: (@{Path=A}:String) [Get-Process], ProcessCommandException

似乎该-replace操作将管道数据更改为以下格式:

@(Path=A)
@(Path=B)
@(Path=C)

我不明白。我确定我只是在这里误解了 PowerShell 的对象模型,但我忽略了什么?

4

1 回答 1

2

尝试在调用 GetExecutableNames 之后添加以下内容

%{ $_.Path }

完整答案

Get-Executable-Names 
| where { $_ -match ".exe" } 
| %{ $_.Path }
| %{ $_ -replace ".exe" } 
| %{ ps $_ } 
| kill
于 2010-02-24T18:44:56.590 回答