Domanda

è chiunque abbia familiarità con un modo per ottenere il pool di applicazioni che è associato con un ID di processo? Sto usando Win32_Process per interrogare i servizi w3wp e restituire il PID ora sto cercando di ottenere il pool di applicazione ad esso associata.

È stato utile?

Soluzione

Se si sta usando solo riga di comando per capirlo ad hoc si può fare anche questo:

Lo script è già messo in systemroot \ system32 in Windows Server 2003 così semplicemente andare al tuo prompt dei comandi e digitare Iisapp.vbs (vbs è opzionale) e avrete un elenco immediato di tutte le informazioni App Pool che hai sempre voluto sapere. Potrebbe essere necessario digitare cscript Iisapp.vbs se CScript non è il tuo host di script WSH di default.

Vediamo un esempio di output:

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

direttamente dalla bocca del cavallo, documenti Microsoft questo .

Altri suggerimenti

In Windows Server 2008 questo è cambiato.

in systemroot \ system32 \ inetsrv a trovare l'appcmd.exe

con

  

Elenco APPCMD wp

si ottiene un elenco di tutti i processi di lavoro e che AppPool sono al servizio.

Se siete in esecuzione su Windows Server 2008 e si desidera solo il PID, per alimentare ad un altro script o un comando, è possibile utilizzare questo:

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

Ad esempio, per creare uno script batch che crea un dump della memoria di un particolare pool di app, utilizzare questo:

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

Ho appena scoperto che si possono anche trovare questo nell'interfaccia utente per IIS 7. Selezionare il nodo del server web e aperti "processi di lavoro". Questo mostrerà il nome di ogni pool di applicazioni insieme con il suo processo di identificazione e di utilizzo particolari.

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

Prova a lavorare con questo e dovrebbe ottenere quello che ti serve.

È possibile utilizzare task manager per visualizzare il nome utente con cui il processo viene eseguito (che in generale è lo stesso del nome del pool di applicazioni) e l'ID del processo, ma si deve attivare queste colonne in task manager, ed è assume anche il nome utente che il processo viene eseguito sotto è lo stesso come il nome del pool di applicazioni (che è il default per quanto ne so, a meno che non si sta usando Sharepoint e simili).
Si noti inoltre che tutti i metodi elencati in questa pagina potrebbe visualizzare solo i processi attualmente in esecuzione, il che significa che se il vostro particolare processo si è spento a causa di minimo di tempo è necessario prima di utilizzare il sito in modo da portare il processo in alto nella lista , e nel tuo caso significa che si dovrebbe prima accedere a tutti i siti per fare in modo che il processo ad essi associati è runing.

Questo dovrebbe farlo.

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;
}

Aprire Gestione IIS (Esegui> Inetmgr), Seleziona livello principale da un albero di navigazione del sito a sinistra e da “Caratteristiche del pannello di visualizzazione” selezionare “processi di lavoro”

Clicca sui “processi di lavoro” per ottenere i dettagli di tutti i processi di lavoro che sono attualmente in esecuzione

Da questo elenco si otterrà applicazione nome del pool, processo id

PID del pool di applicazioni e di dare il suo nome:

$AppPoolName = 'AppPoolForSite1'
(Get-ItemProperty IIS:\AppPools\$AppPoolName -Name WorkerProcesses).Collection.processId
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top