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}」という名前のプロセスが見つかりません。プロセス名を確認して、コマンドレットを再度呼び出します。
+$Get-実行可能ファイル-名前| ここで、{$ _ -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 に答える