質問

は、プロセスIDに関連付けられたアプリケーションプールを取得する方法に精通して誰ですか?私はW3WPサービスを照会し、私はそれに関連付けられたアプリケーションプールを取得しようとしています今PIDを返すために、Win32_Processクラスを使用しています。

役に立ちましたか?

解決

あなただけのあなたもこれを行うことができアドホックそれを把握するために、コマンドラインを使用している場合:

スクリプトが、既にWindows Server 2003上SYSTEMROOTの\ system32にに配置されるため、単にiisapp.vbsであなたのコマンドプロンプトとタイプに行く(.vbsファイルオプションです)、あなたは、すべてのアプリケーションプールの情報を瞬時にリストを持っていますあなたは常に知りたいと思ってきました。 CScriptがデフォルトのWSHスクリプトホストでない場合は、します。cscript iisapp.vbsを入力する必要があります。

の出力の例を見てみましょう。

W3WP.exe PID: 1468 AppPoolId: AppPoolForSite1.com
W3WP.exe PID: 3056 AppPoolId: AppPoolForSite2.com
W3WP.exe PID: 1316 AppPoolId: AppPoolForSite3.com

マイクロソフトの文書このに、馬の口から直接ます。

他のヒント

Windows Server 2008では、これは変更されています。

SYSTEMROOTで\ SYSTEM32 \あなたがAppcmd.exeのを見つけINETSRV

を使用して

  

APPCMDリストWP

あなたはすべてのワーカープロセスのリストを取得し、それらが提供しているアプリケーションプールます。

、PIDを使用すると、Windows Server 2008上で実行しているとあなたが唯一の希望は、別のスクリプトやコマンドにフィードする場合は、あなたがこれを使用することができます:

c:\windows\system32\inetsrv\appcmd list wps /apppool.name:"My Application Pool" /text:WP.NAME

たとえば、特定のアプリケーションプールのメモリダンプを作成するバッチスクリプトを作成するには、これを使用します:

c:\windows\system32\inetsrv\appcmd list wps /apppool.name:"My Application Pool" /text:WP.NAME > "%temp%\pid.txt"
for /F %%a in (%temp%\pid.txt) do c:\debugger\adplus.exe -hang -o d:\dumps -p %%a
pause

私はまた、あなたのWebサーバのノードとオープン「ワーカープロセス」を選択してIIS 7のUIでこれを見つけることができることを発見しました。これは、そのプロセスIDと利用の詳細とともに、各アプリケーションプールの名前が表示されます。

ServerManager serverManager = new ServerManager();
ApplicationPoolCollection applicationPoolCollection = serverManager.ApplicationPools;

これで働いてみて、それはあなたが必要なものを取得する必要があります。

あなたは、プロセスの実行に使用されるユーザー名(一般的にはアプリケーションプール名と同じである)とプロセスIDを表示するには、タスクマネージャを使用できますが、タスクマネージャでこれらの列をオンにする必要があり、それまた、プロセスは、下の実行しているユーザー名が、(1は、SharePointなどを使用しない限り、私の知る限りではデフォルトです)アプリケーションプール名と同じであると仮定し。
また、このページに記載されているすべてのメソッドは、あなたの特定のプロセスが原因のアイドル時間にシャットダウンした場合は、リスト内のプロセスを起動するために、サイトを利用する最初のを持っていることを意味し、現在実行中のプロセスを表示する場合がありますのでご注意、そしてあなたのケースで、それはあなたが最初にそれらに関連するプロセスをruningていることを確認するために、すべてのサイトにアクセスしなければならないことを意味する。

これはそれを行う必要があります。

public string getAppPoolName(int pid)
{            
    ServerManager serverManager = new ServerManager();

    ApplicationPoolCollection apc = serverManager.ApplicationPools;

    foreach (var app in apc)
    {
        var workers = app.WorkerProcesses;

        foreach (var w in workers)
        {                   
            if (w.ProcessId == pid)
            {
                return app.Name;
            }
        }
    }

    return string.Empty;
}

オープンIISマネージャ(ファイル名を指定して実行> inetmgrを)、左サイトのナビゲーションツリーから選択し、「ワーカープロセス」

「表示パネル機能」から選択ルートレベル

現在実行されているすべてのワーカープロセスの詳細情報を取得するには、「ワーカープロセス」をクリックします。

は、アプリケーションプールの名前を取得します。このリストから、プロセスID

のPIDおよびアプリケーションプールは、その名前を与えます:

$AppPoolName = 'AppPoolForSite1'
(Get-ItemProperty IIS:\AppPools\$AppPoolName -Name WorkerProcesses).Collection.processId
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top