0

特定のプログラムを実行しているユーザーの後に、10 台のターミナル サーバーを検索したいと考えています。出力にプロセス、コンピューター名、およびユーザーを含めたい。

このコマンドは基本的に私が望むことを行います:

Invoke-Command -ComputerName (Get-Content .\test-servers.txt) -ScriptBlock { get-wmiobject win32_process|where{$_.name -eq "iexplore.exe" }|select name, __SERVER,@{n="owner";e={$_.getowner().user}}} | Format-Table name, PSComputerName, owner -AutoSize

name         PSComputerName owner 
----         -------------- ----- 
iexplore.exe mrdsh-test     dojo03
iexplore.exe mrdsh-test     dojo03
iexplore.exe mrdsh-test     baob12
iexplore.exe mrdsh-test     baob12

しかし、プロセスをパラメーターとして受け取るスクリプトを作成しようとすると、それを機能させることができません。

CmdletBinding()]
Param (
[parameter(mandatory=$true)][string]$process
)

Invoke-Command -ComputerName (Get-Content .\test-servers.txt) -ScriptBlock { get-wmiobject win32_process | where{param($process)$_.name  -eq $process } | select name, __SERVER,@{n="owner";e={$_.getowner().user}}} | Format-Table name, PSComputerName, owner -AutoSize

コマンドを呼び出しているサーバーに $process パラメータを送信できませんでした。どうすればいいですか?または、プロセスを探してプロセス、コンピューター名、およびユーザー名を返す簡単な方法はありますか?

4

1 に答える 1

1

where scriptblock に param($process) があり、設定していないため、空になります。

編集:

要求に応じて、自分のマシンで次のようにパラメーターを取り出します。

[CmdletBinding()]
Param (
[parameter(mandatory=$true)][string]$process
)

Invoke-Command -ScriptBlock { get-wmiobject win32_process | where{ $_.name  -eq $process } | select name, __SERVER,@{n="owner";e={$_.getowner().user}}} | Format-Table name, PSComputerName, owner -AutoSize

Powershell バージョン 1 でも機能します。

powershell -version 1.0 -noprofile -Command ".\test.ps1 -process 'chrome.exe'"

うまく動作します。

于 2012-11-09T11:54:45.543 に答える