Introduzione con AppCmd.exe

di Mike Volodarsky

Panoramica

AppCmd.exe è lo strumento da riga di comando singolo per la gestione di IIS 7 e versioni successive. Espone tutte le funzionalità di gestione dei server chiave tramite un set di oggetti di gestione intuitivi che possono essere modificati dalla riga di comando o dagli script.

AppCmd consente di controllare facilmente il server senza usare uno strumento di amministrazione grafica e di automatizzare rapidamente le attività di gestione del server senza scrivere codice.

Alcune delle operazioni che è possibile eseguire con AppCmd:

  • Creare e configurare siti, app, pool di applicazioni e directory virtuali
  • Avviare e arrestare i siti e riciclare i pool di applicazioni
  • Elencare i processi di lavoro in esecuzione ed esaminare le richieste attualmente in esecuzione
  • Cercare, modificare, esportare e importare IIS e ASP.NET configurazione

AppCmd consente anche agli amministratori del server di creare attività di gestione avanzate semplicemente combinando più comandi AppCmd.exe più semplici o riutilizzando l'output dello strumento all'interno di un altro programma.

È anche possibile trovare altri argomenti di AppCmd e apprendere modi avanzati per gestire il server dalla riga di comando nel blog all'indirizzo https://mvolo.com/category/appcmd/.

Come usare AppCmd.exe

La riga di comando AppCmd.exe è basata su un set di oggetti di gestione server di primo livello, ad esempio Sito e Applicazione. Questi oggetti espongono metodi che possono essere usati per eseguire varie azioni su tali oggetti e le istanze di oggetti espongono proprietà che possono essere controllate e modificate.

Ad esempio, l'oggetto Site fornisce metodi per elencare, creare ed eliminare istanze del sito (si tratta di metodi standard presenti in quasi tutti gli oggetti), nonché di arrestare e avviare siti. Ogni istanza del sito conterrà a sua volta proprietà, ad esempio il nome del sito e l'ID sito, che possono essere controllate, cercate o impostate. L'output di ogni comando è sempre un elenco di istanze di oggetti.

Nota

AppCmd.exe si trova nella %systemroot%\system32\inetsrv\ directory . Poiché non fa parte automaticamente di PATH, è necessario usare il percorso completo per l'eseguibile quando si eseguono comandi come in %systemroot%\system32\inetsrv\AppCmd.exe list sites. In alternativa, è possibile aggiungere manualmente la directory inetsrv al percorso nel computer in modo da poter accedere AppCmd.exe direttamente da qualsiasi posizione.

Lo strumento funziona eseguendo un comando su uno degli oggetti di gestione supportati, con parametri facoltativi usati per personalizzare ulteriormente il comportamento del comando:

APPCMD (command) (object-type) <identifier> < /parameter1:value1 ... >*

Dove <COMMAND> è uno dei comandi supportati da <OBJECT>. La maggior parte degli oggetti supporta questo set di comandi di base:

  • ELENCO Visualizzare gli oggetti nel computer. Un ID> facoltativo <può specificare un oggetto univoco da elencare oppure è possibile specificare uno o più parametri per la corrispondenza con le proprietà dell'oggetto.
  • AGGIUNGERE Creare un nuovo oggetto con le proprietà dell'oggetto specificate da impostare durante la creazione.
  • ELIMINA Eliminare l'oggetto specificato dall'ID<>.
  • IMPOSTARE Impostare i parametri sull'oggetto specificato dall'ID<>.

Un oggetto supporta spesso comandi aggiuntivi, ad esempio START e STOP per l'oggetto Site.

Ad esempio, il set corrente di oggetti disponibili tramite AppCmd è (dove <OBJECT> è uno degli oggetti di gestione supportati dallo strumento):

Oggetto Descrizione
Sito Amministrazione dei siti virtuali
App Amministrazione delle applicazioni
VDir Amministrazione delle directory virtuali
Apppool Amministrazione dei pool di applicazioni
File di configurazione Amministrazione delle sezioni di configurazione generale
Backup Gestione dei backup di configurazione del server
WP Amministrazione dei processi di lavoro
Richiesta Visualizzazione di richieste HTTP attive
Modulo Amministrazione dei moduli server
Trace Gestione dei log di traccia del server

Dove <ID> è l'identificatore specifico dell'oggetto per l'istanza dell'oggetto che si desidera specificare per il comando. Il formato dell'identificatore è specifico di ogni tipo di oggetto. Ad esempio, l'oggetto Site usa il nome del sito, l'oggetto App usa il percorso dell'applicazione e l'oggetto AppPool ha usato il nome del pool di applicazioni.

Dove [ /parameter:value ]* è zero o più parametri per il comando. Ogni comando supporta un set diverso di parametri, a seconda dell'oggetto . In genere, i comandi che cercano oggetti o modificano le proprietà dell'oggetto consentiranno di specificare una delle proprietà dell'oggetto come parametro.

Lo strumento stesso supporta anche una serie di parametri che influiscono sull'esecuzione generale del comando e non sono specifici per nessuno degli oggetti . Queste informazioni sono elencate nella pagina della Guida di primo livello disponibile in "AppCmd.exe /?"e includono parametri come /text, /config e /xml per controllare l'output degli strumenti e /commit per controllare la posizione delle modifiche alla configurazione.

Altre informazioni

AppCmd fornisce una Guida autodescrittura che può essere usata come riferimento per tutti gli oggetti e i comandi supportati. Sono disponibili tre tipi di assistenza durante il drill-through dell'attività che si vuole eseguire.

Guida generale

La schermata della Guida generale mostra gli oggetti supportati dallo strumento, nonché i parametri degli strumenti generalmente applicabili. Per visualizzare la Guida generale:

APPCMD /?

Le prime righe di output sono:

General purpose IIS command line administration tool.
APPCMD (command) (object-type) <identifier> < /parameter1:value1 ... >

Supported object types:
       
  SITE      Administration of virtual sites
  APP       Administration of applications              

...

Guida dell'oggetto

La schermata della Guida dell'oggetto mostra i comandi supportati da un oggetto specifico. Per visualizzare la Guida dell'oggetto:

APPCMD <OBJECT> /?

dove <OBJECT> è uno dei tipi di oggetto supportati. Ad esempio, questa riga di comando visualizzerà la Guida per l'oggetto sito:

APPCMD site /?

Guida ai comandi

La schermata della Guida del comando descrive la sintassi per un comando e un oggetto specifici, inclusi i parametri supportati ed esempi di attività comuni. Per visualizzare la Guida dei comandi:

APPCMD <COMMAND> <OBJECT> /?

Ad esempio, questa riga di comando visualizzerà la Guida per il comando LIST dell'oggetto App:

APPCMD list app /?

Ricerca di oggetti con il comando LIST

Il comando LIST è il comando più versatile ed è supportato da tutti gli oggetti. Lo scopo di questo comando è trovare istanze dell'oggetto in base ai criteri specificati. L'output di questo comando è un elenco di istanze di oggetti, che è possibile esaminare visualizzando le relative proprietà, esportando per la ricreazione futura in un altro computer o usando un altro comando per eseguire azioni su di esse.

Elenco di tutti gli oggetti

Il modo più semplice per usare il comando LIST è senza parametri, che elenca semplicemente tutte le istanze note dell'oggetto:

APPCMD list <OBJECT>

Ad esempio, per elencare tutti i siti nel computer, usare questa riga di comando:

%systemroot%\system32\inetsrv\APPCMD list sites

L'output sarà analogo al seguente:

SITE "Default Web Site" (id:1,bindings:HTTP/*:80:,state:Started)
SITE "Site1" (id:2,bindings:http/*:81:,state:Started)
SITE "Site2" (id:3,bindings:http/*:82:,state:Stopped)

Per impostazione predefinita, ogni oggetto viene visualizzato in una singola riga, specificando il relativo identificatore specifico dell'oggetto (ad esempio "Sito Web predefinito") e una o più proprietà importanti (ad esempio ID, associazioni e stato).

Elenco di un oggetto specifico

Il comando LIST può essere usato per trovare un'istanza di un oggetto specifico denominato usando una riga di comando in questo formato:

APPCMD list <OBJECT> <ID>

Ad esempio, usare questa riga di comando per trovare il sito con id univoco "Sito Web predefinito":

%systemroot%\system32\inetsrv\APPCMD list site "Default Web Site"

Elenco di oggetti che soddisfano una query

Per trovare tutte le istanze di oggetti che corrispondono a criteri specifici, specificare uno o più parametri che indicano i valori delle proprietà degli oggetti da trovare. Ad esempio, usare questa riga di comando per trovare tutti i siti arrestati:

%systemroot%\system32\inetsrv\APPCMD list sites /state:Stopped

È possibile specificare un numero qualsiasi di coppie di valori di proprietà e lo strumento garantisce che gli oggetti restituiti soddisfino tutti i criteri specificati. Ad esempio, usare questa riga di comando per trovare i siti arrestati e configurati per non avviarsi automaticamente:

%systemroot%\system32\inetsrv\APPCMD list sites /serverAutoStart:false /state:Stopped

Modifica di oggetti con ADD, SET e DELETE

Oltre a LIST, la maggior parte degli oggetti supporta anche i comandi ADD, SET e DELETE.

Aggiunta di nuovi oggetti

Il comando ADD crea una nuova istanza di un oggetto. Ad esempio, questa riga di comando creerà un nuovo sito:

%systemroot%\system32\inetsrv\APPCMD add site /name:MyNewSite /bindings:"http/*:81:" /physicalPath:"C:\MyNewSite"

A seconda dell'oggetto, alcuni parametri saranno necessari per impostare le proprietà necessarie nella nuova istanza e altre proprietà potrebbero essere facoltative. Verrà restituito un errore se non è specificato un parametro obbligatorio.

La schermata della Guida del comando indica quali parametri sono necessari. Ad esempio, usare questa riga di comando per vedere quali parametri sono necessari per aggiungere un sito:

%systemroot%\system32\inetsrv\APPCMD add site /?

Per altre informazioni sulla creazione di siti, applicazioni, directory virtuali e pool di applicazioni con AppCmd.

Modifica degli oggetti esistenti

Il comando SET imposta una o più proprietà in un'istanza di oggetto specificata. Questo comando richiede che venga specificato l'identificatore specifico dell'oggetto. Ad esempio, per modificare la proprietà ID del "Sito Web predefinito", usare questa riga di comando:

%systemroot%\system32\inetsrv\APPCMD set site "Default Web Site" /id:200

Usare una forma della sintassi della Guida del comando per visualizzare le proprietà che possono essere impostate su un determinato oggetto. Ad esempio, per visualizzare le proprietà supportate dall'uso predefinito del sito Web:

%systemroot%\system32\inetsrv\APPCMD set site "Default Web Site" /?

Eliminazione di oggetti

Il comando DELETE elimina un'istanza di un oggetto. Come SET, questo comando richiede anche l'identificatore specifico dell'oggetto da specificare. Ad esempio, usare questa riga di comando per eliminare il sito denominato "MyNewSite":

%systemroot%\system32\inetsrv\APPCMD delete site "MyNewSite"

Gestione dei backup

AppCmd consente di creare e ripristinare i backup della configurazione globale del server. È possibile usare questa opzione per ripristinare le modifiche indesiderate alla configurazione del server e tornare allo stato del server noto. È consigliabile creare un backup prima di modificare la configurazione del server o installare un componente che lo modifica. Ogni backup contiene la copia del file di configurazione radice corrente ApplicationHost.config, nonché altri stati a livello di server correlati, tra cui la configurazione FTP e la configurazione dello strumento di amministrazione IIS.

Per creare un backup, usare il comando ADD dell'oggetto Backup:

%systemroot%\system32\inetsrv\APPCMD add backup
BACKUP object "20060519T172530" added

In questo modo è stato creato un backup con un nome generato automaticamente che rappresenta la data e l'ora del backup.

Un nome specifico per il backup può essere specificato come segue:

%systemroot%\system32\inetsrv\APPCMD add backup MyBackup
BACKUP object "MyBackup" added

È possibile visualizzare un elenco di backup disponibili usando il comando LIST dell'oggetto Backup:

%systemroot%\system32\inetsrv\APPCMD list backups
BACKUP "20060519T172530"
BACKUP "MyBackup"

Infine, per ripristinare un backup, usare il comando RESTORE con il nome del backup:

%systemroot%\system32\inetsrv\APPCMD restore backup "MyBackup"
Restored configuration from backup "MyBackup"

Il ripristino di un backup arresta il server e ripristina la configurazione globale allo stato al momento della creazione del backup.

In Windows Server® 2008 e Windows Vista SP1, AppCmd sarà anche in grado di lavorare con backup di configurazione periodici eseguiti dal servizio cronologia configurazione. Questi backup verranno visualizzati nell'elenco AppCmd dei backup e saranno disponibili per ripristinare lo stesso modo dei backup eseguiti manualmente tramite lo strumento.

Per altre informazioni sulla gestione dei backup di configurazione con AppCmd, vedere http://mvolo.com/most-important-appcmd-commands-backing-up-and-restoring-iis7-configuration/.

Uso di siti, applicazioni, directory virtuali e pool di applicazioni

La creazione e la gestione di siti, applicazioni e directory virtuali sono gli amministratori delle attività più comuni. IIS 7 e versioni successive usa una gerarchia di contenimento più stretta rispetto alle versioni precedenti che funzionano come segue:

  1. Sito Web Un sito Web riceve le richieste in specifici endpoint di associazione definiti dagli indirizzi IP e dalle intestazioni host. Ad esempio, questo URL rappresenta un sito Web associato alla porta 81: http://www.mysite.com:81.

    Un sito Web contiene una o più applicazioni.

  2. Applicazione Un'applicazione è rappresentata dal percorso virtuale all'interno dello spazio dei nomi url di un sito Web. Ad esempio, un'applicazione con un percorso virtuale "/app1" può essere rappresentata da questo URL: http://www.mysite.com:81/app1.

    Un'applicazione appartiene a un pool di applicazioni.

    Un'applicazione contiene una o più directory virtuali.

  3. Directory virtuale Una directory virtuale è rappresentata dal percorso virtuale all'interno dello spazio dei nomi url di un'applicazione. Ad esempio, una directory virtuale con un percorso virtuale di "/vdir1" può essere rappresentata da questo URL: http://www.mysite.com:81/app1/vdir1.

    Una directory virtuale esegue il mapping a una posizione fisica su disco.

Questa gerarchia è diversa da IIS 6.0 in cui un sito Web può contenere una combinazione di directory e applicazioni virtuali e le applicazioni sono solo directory virtuali contrassegnate appositamente.

Pool di applicazioni Un pool di applicazioni specifica un gruppo di impostazioni per i processi di lavoro che eseguono l'elaborazione delle richieste per le applicazioni nel pool di applicazioni. I pool di applicazioni non fanno parte della gerarchia site-app-vdir. Ogni applicazione specifica il pool di applicazioni in cui verrà eseguito oppure viene eseguito nel pool di applicazioni predefinito. Il pool di applicazioni definisce una serie di impostazioni del processo di lavoro, ad esempio la versione di CLR caricata da essa, la modalità di integrazione .NET, l'account in cui viene eseguito il processo di lavoro e le impostazioni di riciclo del processo di lavoro.

Per impostazione predefinita, IIS 7 e versioni successive vengono installati con un sito Web denominato "Sito Web predefinito" in ascolto sulla porta 80 senza indirizzi IP né restrizioni di intestazione host. Questo sito Web ha un'applicazione radice e che l'applicazione dispone di una directory virtuale radice. Esiste anche un pool di applicazioni denominato "DefaultAppPool" che viene usato per impostazione predefinita da tutte le nuove applicazioni.

Questa riga di comando elenca tutti i siti, incluso il sito Web predefinito:

%systemroot%\system32\inetsrv\APPCMD list sites
SITE "Default Web Site" (id:1,bindings:HTTP/*:80:,state:Started)

Esaminiamo le applicazioni che appartengono al sito Web predefinito specificando la proprietà site.name durante la presentazione di App:

%systemroot%\system32\inetsrv\APPCMD list apps /site.name:"Default Web Site"
APP "Default Web Site/" (applicationPool:DefaultAppPool)

Un comando simile elenca le directory virtuali all'interno dell'applicazione "Sito Web predefinito/" specificando la proprietà app.name durante l'elenco di Vdirs:

%systemroot%\system32\inetsrv\APPCMD list vdirs /app.name:"Default Web Site/"
VDIR "Default Web Site/" (physicalPath:C:\inetpub\wwwroot)

Infine, esaminiamo i pool di applicazioni:

%systemroot%\system32\inetsrv\APPCMD list apppools
APPPOOL "DefaultAppPool" (MgdVersion:v2.0,MgdMode:Integrated,state:Started)
APPPOOL "Classic .NET AppPool" (MgdVersion:v2.0,MgdMode:ISAPI,state:Started)

Creazione di siti, applicazioni, directory virtuali e pool di applicazioni

A questo punto, verrà creato un nuovo sito Web denominato "MySite", con id sito di 2 in ascolto sulla porta 81 per tutti gli indirizzi IP e le intestazioni host:

%systemroot%\system32\inetsrv\APPCMD add site /name:MySite /id:2 /bindings:http/*:81: /physicalPath:C:\inetpub\mysite
SITE object "MySite" added
APP object "MySite/" added
VDIR object "MySite/" added

I parametri dei nomi devono essere specificati per creare un sito Web. Il parametro ID è facoltativo e causerà che AppCmd generi l'ID sito disponibile successivo per il nuovo sito se omesso. Vengono inoltre specificate le associazioni e i parametri physicalPath , illustrati di seguito. È anche possibile specificare proprietà aggiuntive per impostare i valori.

La proprietà bindings usa il formato protocollo/bindingInformation, in cui bindingInformation è specifico del protocollo. Per HTTP, è in formato IP:PORT:HOSTHEADER. È possibile specificare più associazioni usando una virgola per separare ogni definizione.

È stata specificata anche una proprietà physicalPath per il sito. Sebbene un sito Web stesso non disponga di un percorso fisico, questo breve modulo viene usato per creare un sito Web con un'applicazione radice e una directory virtuale radice mappata al percorso fisico specificato.

Se non si specifica un percorso fisico, il sito Web verrà creato senza applicazioni; è necessario creare un'applicazione e una directory virtuale in modo esplicito.

Andiamo avanti e aggiungiamo un'altra applicazione al sito Web:

%systemroot%\system32\inetsrv\APPCMD add app /site.name:MySite /path:/app1 /physicalPath:C:\inetpub\mysite\app1
APP object "MySite/app1" added
VDIR object "MySite/app1/" added

Questa operazione ha creato una nuova applicazione con percorso virtuale "/app1" appartenente al sito creato in precedenza, con una directory virtuale radice che punta a C:\inetpub\mysite\app1. Il parametro percorso obbligatorio specifica il percorso virtuale della nuova applicazione e il parametro site.name richiesto specifica il sito a cui appartiene l'applicazione. Il parametro physicalPath facoltativo è un collegamento, molto simile nel caso del sito, che crea una directory virtuale radice insieme all'applicazione.

Se non si specifica il parametro physicalPath o si vuole aggiungere un'altra directory virtuale all'applicazione, usare una riga di comando simile al seguente:

%systemroot%\system32\inetsrv\APPCMD add vdir /app.name:"MySite/app1" /path:/vdir1 /physicalPath:C:\inetpub\mysite\app1\vdir1
VDIR object "MySite/app1/vdir1" added

In questo modo è stata creata una nuova directory virtuale con percorso virtuale "/vdir1" appartenente all'applicazione creata in precedenza e puntando a C:\inetpub\mysite\app1\vdir1. Il parametro percorso obbligatorio specifica il percorso virtuale della nuova directory virtuale e il parametro di app.name richiesto specifica l'applicazione a cui appartiene la directory virtuale. Il parametro physicalPath specifica la posizione fisica della directory virtuale.

Infine, creiamo un nuovo pool di applicazioni:

%systemroot%\system32\inetsrv\APPCMD add apppool /name:MyAppPool
APPPOOL object "MyAppPool" added

In questo modo è stato creato un nuovo pool di applicazioni denominato "MyAppPool".

Per altre informazioni sui siti, le applicazioni e le directory virtuali in IIS 7 e versioni successive e le opzioni disponibili nella creazione di appCmd, vedere Creazione di IIS7 e siti precedenti, applicazioni e directory virtuali.

Configurazione di siti, applicazioni, directory virtuali e pool di applicazioni

In precedenza è stato aggiunto un nuovo sito Web, completo di alcune applicazioni e directory virtuali. Ora verrà usato AppCmd per modificare alcune delle relative proprietà. Tutti gli oggetti AppCmd supportano la stessa sintassi standard per l'impostazione delle proprietà:

APPCMD SET <OBJECT> <ID> [ /property:value ]*

In primo luogo, verranno visualizzate le applicazioni disponibili nel computer:

%systemroot%\system32\inetsrv\APPCMD list apps
APP "Default Web Site/" (applicationPool:DefaultAppPool)
APP "MySite/" (applicationPool:DefaultAppPool)
APP "MySite/app1" (applicationPool:DefaultAppPool)

Si notino le due applicazioni create in precedenza nel sito Web "MySite". Entrambe queste applicazioni sono impostate per usare il pool di applicazioni DefaultAppPool. Modificare la proprietà applicationPool dell'applicazione radice "MySite/" per usare il nuovo pool di applicazioni creato in precedenza denominato "MyAppPool":

%systemroot%\system32\inetsrv\APPCMD set app "MySite/" /applicationPool:MyAppPool
APP object "MySite/" changed

Questo ha modificato il valore della proprietà applicationPool dell'applicazione "MySite/" al nuovo valore, spostando in modo efficace l'applicazione nel nuovo pool di applicazioni.

Il motivo per cui l'applicazione è stata spostata nel nuovo pool di applicazioni è in modo che sia possibile modificare alcuni dei parametri di runtime del processo di lavoro all'interno del quale verrà eseguita l'applicazione. A tale scopo, verranno modificate alcune delle proprietà nel pool di applicazioni "MyAppPool". Prima di modificare i valori delle proprietà, se spesso utile per visualizzare prima le proprietà disponibili e i relativi valori correnti. È possibile eseguire questa operazione elencando l'applicazione in visualizzazione dettagliata:

%systemroot%\system32\inetsrv\APPCMD list apppool "MyAppPool" /text:*
APPPOOL
  APPPOOL.NAME: MyAppPool
  managedPipelineMode: Integrated
  managedRuntimeVersion: v2.0
  state: Started
  [add]
    name:"MyAppPool"
    queueLength:"1000"
    autoStart:"true"
    enable32BitAppOnWin64:"false"
    managedRuntimeVersion:"v2.0"
    managedPipelineMode:"Integrated"
    passAnonymousToken:"true"
    [processModel]
      identityType:"NetworkService"
      userName:""
      password:""
...
      pingingEnabled:"true"
...

Si noti il numero di proprietà nell'oggetto pool di applicazioni; l'output completo non viene visualizzato qui.

Si è interessati a modificare la proprietà managedRuntimeVersion su "v1.1" per eseguire le applicazioni in questo pool di applicazioni con ASP.NET v1.1. Ecco la riga di comando da eseguire:

%systemroot%\system32\inetsrv\APPCMD set apppool "MyAppPool" /managedRuntimeVersion:v1.1
APPPOOL object "MyAppPool" changed

È possibile vedere dall'output List precedente che esistono numerose proprietà disponibili nell'oggetto pool di applicazioni e alcune delle proprietà vengono annidate all'interno di un sottoelemento di configurazione. Ad esempio, le opzioni di processo vengono annidate sotto l'elemento secondario "processModel".

Se si vuole impostare una proprietà annidata, indirizzarla con la notazione del percorso dell'elemento come indicato di seguito:

%systemroot%\system32\inetsrv\APPCMD set apppool "MyAppPool" /processModel.pingingEnabled:false

Altri elementi di configurazione

Oltre a modificare le proprietà di configurazione con gli oggetti AppCmd di primo livello, è possibile impostare le proprietà di configurazione in qualsiasi sezione di configurazione, incluse quelle associate agli oggetti AppCmd di primo livello. Questa operazione viene descritta più avanti nella sezione denominata "Working with Configuration".

Controllo dello stato del server

AppCmd offre funzionalità per esaminare vari aspetti dello stato di runtime del server, tra cui:

  • stato del sito
  • stato del pool di applicazioni
  • processi di lavoro server attivi
  • attualmente in esecuzione delle richieste

Inoltre, alcuni oggetti forniscono comandi che consentono di controllare lo stato di runtime, ad esempio il comando STOP dell'oggetto Site e il comando RECYCLE dell'oggetto AppPool.

Controllo dello stato del pool di applicazioni e del sito

Lo stato dei siti e dei pool di applicazioni viene segnalato dalla proprietà di stato di ogni oggetto. Quando si elencano siti o pool di applicazioni, lo stato viene visualizzato nell'output predefinito. Ad esempio:

%systemroot%\system32\inetsrv\APPCMD list apppools DefaultAppPool
APPPOOL "DefaultAppPool" (MgdVersion:v2.0,MgdMode:Integrated,state:Started)

La proprietà state può essere usata anche per cercare siti o pool di applicazioni che si trovano in uno stato specifico. Ad esempio, per trovare tutti i pool di applicazioni avviati:

%systemroot%\system32\inetsrv\APPCMD list apppools /state:started
APPPOOL "DefaultAppPool" (MgdVersion:v2.0,MgdMode:Integrated,state:Started)
APPPOOL "Classic .NET AppPool" (MgdVersion:v2.0,MgdMode:ISAPI,state:Started)

Ispezione dei processi di lavoro in esecuzione

È possibile utilizzare l'oggetto WP (processo di lavoro) per elencare i processi di lavoro in esecuzione:

%systemroot%\system32\inetsrv\APPCMD list wps
WP "3577" (apppool:DefaultAppPool)

Ogni oggetto WP ha una proprietà apppool.name , che consente di elencare tutti i processi di lavoro in esecuzione per un determinato pool di applicazioni:

%systemroot%\system32\inetsrv\APPCMD list wps /apppool.name:DefaultAppPool
WP "3577" (apppool:DefaultAppPool)

Controllo delle richieste attualmente in esecuzione

L'oggetto Request consente di controllare le richieste attualmente in esecuzione nel server:

%systemroot%\system32\inetsrv\APPCMD list requests
REQUEST "fb0000008000000e" (url:GET /wait.aspx?time=10000,time:4276 msec,client:localhost)

L'elenco può essere limitato alle richieste di un determinato sito, pool di applicazioni, processo di lavoro o URL usando la proprietà appropriata per filtrare i risultati. Di seguito sono riportati alcuni esempi:

%systemroot%\system32\inetsrv\APPCMD list request /apppool.name:DefaultAppPool

%systemroot%\system32\inetsrv\
APPCMD list requests /wp.name:3567

%systemroot%\system32\inetsrv\APPCMD list requests /site.id:1

Utilizzo della configurazione

IIS 7 e versioni successive presentano un sistema di configurazione gerarchico basato su XML simile al sistema di configurazione ASP.NET che archivia la configurazione del server in sezioni XML strutturate. La configurazione può essere posizionata a livello di server ApplicationHost.config file o inserita in file di configurazione Web.config distribuiti all'interno della gerarchia dell'applicazione.

AppCmd consente l'ispezione completa e la modifica della gerarchia di configurazione dalla riga di comando tramite il relativo oggetto Config. AppCmd offre anche altre funzioni utili, ad esempio la cancellazione della configurazione, il blocco e lo sblocco e la ricerca.

Visualizzazione della configurazione

AppCmd funziona con la configurazione a livello di sezioni di configurazione. Ogni sezione di configurazione descrive in genere una funzionalità del server e può contenere uno o più sottoelementi e raccolte.

La configurazione può essere impostata per uno spazio dei nomi url arbitrario, ad esempio per un sito, un'applicazione o un URL. Le impostazioni di configurazione impostate a un livello superiore vengono ereditate da tutti i livelli inferiori, a meno che non vengano sovrascritto in modo specifico a livelli inferiori.

Per visualizzare una configurazione efficace per un particolare livello di URL, usare il comando LIST dell'oggetto Config come indicato di seguito:

%systemroot%\system32\inetsrv\APPCMD list config <URL> /section:SectionName

Dove <URL> è il percorso di configurazione in cui deve essere letta la configurazione effettiva, ad esempio "Sito Web predefinito/" o "Sito Web predefinito/app1/hello.html". Se non specificato, per impostazione predefinita viene impostato il livello del server.

Per altre informazioni sulla gerarchia di configurazione di IIS e su come compilare percorsi di configurazione IIS da usare con AppCmd e altri strumenti, vedere Anatomia di un percorso di configurazione IIS7 e versioni successive.

Il parametro section specifica la sezione di configurazione da leggere. Se non specificato, verranno visualizzate tutte le sezioni di configurazione valide a livello di URL. Ad esempio, questa riga di comando visualizza tutte le configurazioni valide per l'applicazione radice del sito Web predefinito:

%systemroot%\system32\inetsrv\APPCMD list config "Default Web Site/"

Per elencare una sezione specifica, usare una riga di comando simile alla seguente:

%systemroot%\system32\inetsrv\APPCMD list config "Default Web Site/" /section:asp
<system.webServer>
  <asp>
    <session />
    <comPlus />
    <cache />
    <limits />
</asp>
</system.webServer>

Per impostazione predefinita, AppCmd visualizza solo la configurazione impostata in modo esplicito. Se si vuole visualizzare la configurazione effettiva, inclusi i valori ereditati o predefiniti, specificare il parametro /config:* :

%systemroot%\system32\inetsrv\APPCMD list config "Default Web Site/" /section:asp /config:*

Per visualizzare un elenco delle sezioni di configurazione disponibili, usare questa riga di comando:

%systemroot%\system32\inetsrv\APPCMD list config /section:?

Modifica delle proprietà di configurazione

In AppCmd ogni sezione di configurazione viene esposta come istanza di un oggetto di configurazione che espone le proprietà che rappresentano la sezione di configurazione sottostante. Utilizzare il comando SET dell'oggetto Config per modificare queste proprietà. La sintassi è:

APPCMD set config <URL> /section:SectionName [ /property:value ]+

<URL> è facoltativo; specifica in quale percorso di configurazione deve essere applicata la modifica. Omesso, le modifiche verranno applicate a livello di server, per essere ereditate da tutti gli URL.

Il parametro section è obbligatorio; indica la sezione da modificare.

Ad esempio, per impostare la proprietà appAllowClientDebug della sezione ASP per l'URL http://localhost/app1 :

%systemroot%\system32\inetsrv\APPCMD set config "http://localhost/app1" /section:asp /appAllowClientDebug:false
CONFIG object "asp" changed

Per impostare le proprietà di configurazione annidate all'interno di sottoelementi della sezione di configurazione, usare questa notazione del percorso dell'elemento:

%systemroot%\system32\inetsrv\APPCMD set config "http://localhost/app1" /section:asp /limits.requestQueueMax:4000
CONFIG object "asp" changed

Specificare più proprietà in una singola riga di comando per apportare più modifiche all'interno della stessa sezione di configurazione.

Per visualizzare tutte le proprietà che possono essere impostate in una determinata sezione di configurazione, usare questa riga di comando:

%systemroot%\system32\inetsrv\APPCMD set config /section:asp /?

Nota

Si noti che la sezione asp è bloccata per impostazione predefinita, pertanto l'esecuzione di questi comandi restituirà un errore di violazione del blocco. È possibile sbloccare prima questa sezione, impostare la configurazione a livello di server omettendo <URL>o eseguendo il commit nel tag del percorso a livello di server usando /commit:apphost. Vedere il controllo della posizione della configurazione più avanti nell'articolo.

Modifica delle raccolte di configurazioni

AppCmd offre anche il supporto per la modifica delle raccolte di configurazione. Una raccolta di configurazioni può contenere più elementi, ad esempio la sezione di configurazione system.webServer/modules contiene un elenco di elementi di configurazione del modulo che specificano i moduli eseguiti dal server.

Per impostare una proprietà su un elemento della raccolta, specificare l'elemento della raccolta da modificare usando un'espressione dell'indicizzatore di raccolta all'interno della notazione del percorso dell'elemento. L'espressione dell'indicizzatore di raccolta usa i valori chiave per identificare un elemento della raccolta specifico. L'indicizzatore ha il formato seguente:

[key1='value1',key2='value2',...]

Il numero di chiavi necessarie per identificare in modo univoco un elemento dipende dalla raccolta. La maggior parte delle raccolte richiede una sola chiave.

Ad esempio, per impostare la proprietà type sull'elemento della raccolta con la proprietà key name uguale a "FormsAuthentication", usare questa riga di comando:

%systemroot%\system32\inetsrv\APPCMD set config /section:system.webServer/modules /[name='FormsAuthentication'].type:System.Web.Security.FormsAuthenticationModule

Per aggiungere un nuovo elemento della raccolta, anteporre alla notazione del percorso dell'elemento un segno più, +. All'interno dell'espressione dell'indicizzatore di raccolta specificare i valori per ogni proprietà chiave. Altre proprietà non chiave possono essere incluse anche nell'espressione dell'indicizzatore di raccolta. Ad esempio, verrà aggiunto un nuovo elemento della raccolta di moduli:

%systemroot%\system32\inetsrv\APPCMD set config /section:system.webServer/modules /+[name='MyModule',type='MyType']

Per eliminare un elemento della raccolta, anteporre alla notazione del percorso dell'elemento un segno meno, -:

%systemroot%\system32\inetsrv\APPCMD set config /section:system.webServer/modules /-[name='MyModule']

Controllo della posizione della configurazione

Il sistema di configurazione è gerarchico, consentendo la scrittura delle impostazioni di configurazione a più livelli, dal file di ApplicationHost.config a livello di server ai file Web.config distribuiti che possono essere presenti a livello di sito, applicazione o directory virtuale.

Quando la configurazione viene scritta a un determinato livello, viene ereditata da tutti gli URL a quel livello e inferiore. Ad esempio, la configurazione impostata nel file di configurazione Web.config alla radice del sito in ereditato da tutti gli URL del sito.

Per impostazione predefinita, AppCmd scriverà la configurazione a livello di impostazione. Ad esempio, se si imposta la configurazione per il "Sito Web predefinito/", verrà scritto in un file Web.config nella radice del sito.

Tuttavia, è possibile scrivere la configurazione a un livello superiore e applicarla solo a un determinato sottoinsieme di URL usando un costrutto di posizione . Ad esempio, l'applicazione Web.config può contenere la configurazione applicata a una sola directory all'interno dell'applicazione. AppCmd offre questa funzionalità tramite il relativo parametro di commit .

Il parametro commit può essere impostato su uno dei seguenti:

  • (omesso) — impostazione predefinita; scrittura della configurazione a livello per il quale è impostato
  • url : uguale a quello predefinito; scrittura della configurazione a livello per il quale è impostato
  • site : configurazione di scrittura nel Web.config nella radice del sito dell'URL per cui è impostato
  • app : configurazione di scrittura nel Web.config nella radice dell'app dell'URL per cui è impostata
  • apphost : configurazione di scrittura a livello di server, nel file applicationHost.config
  • <PATH> : scrivere la configurazione nel percorso di configurazione specificato

Ad esempio, questa riga di comando disattiva l'esplorazione della directory per un'applicazione e scrive tale configurazione all'interno del file Web.config della radice del sito:

%systemroot%\system32\inetsrv\APPCMD set config http://localhost/app1/ /section:directoryBrowse /enabled:false /commit:site

Per altre informazioni sui percorsi di configurazione di IIS e sul controllo della posizione della configurazione, vedere Anatomia del percorso di configurazione IIS7 e versioni successive.

Configurazione di blocco e sblocco

Il sistema di configurazione consente di bloccare le sezioni di configurazione a un determinato livello, impedendo l'override delle relative proprietà a livelli inferiori. Può essere usato per impedire alle applicazioni di modificare le impostazioni che l'amministratore del server desidera applicare.

Per impostazione predefinita, la maggior parte delle sezioni di configurazione iis è bloccata a livello di server. Per configurare queste sezioni a livelli inferiori, è necessario sbloccare queste sezioni. AppCmd fornisce il comando UNLOCK a questo scopo:

%systemroot%\system32\inetsrv\APPCMD unlock config /section:asp

Usare il comando LOCK per bloccare una sezione:

%systemroot%\system32\inetsrv\APPCMD lock config /section:asp

Si noti che se si blocca una sezione di configurazione, tutte le applicazioni che potrebbero aver già configurato tale sezione a un livello inferiore verificheranno un errore di violazione del blocco quando tentano di accedere alla sezione di configurazione.

Ricerca nella configurazione

AppCmd può cercare nella gerarchia di configurazione distribuita tutte le posizioni che impostano proprietà di configurazione o valori di proprietà specifici. La funzionalità di ricerca di configurazione può essere usata per individuare le posizioni in cui è abilitata una particolare funzionalità o per garantire la conformità a un requisito di configurazione specifico.

Per cercare nel server tutti i percorsi che definiscono la configurazione, è possibile usare il comando SEARCH senza argomenti:

%systemroot%\system32\inetsrv\APPCMD search config

Per eseguire ricerche in tutte le posizioni in un percorso di configurazione specifico, ad esempio tutte le posizioni di configurazione per un determinato sito, includere il percorso nella riga di comando:

%systemroot%\system32\inetsrv\APPCMD search config "Default Web Site/"

Per cercare i percorsi che configurano una sezione di configurazione specifica:

%systemroot%\system32\inetsrv\APPCMD search config "Default Web Site/" /section:directoryBrowse

Per cercare le posizioni che impostano una determinata proprietà, includere il nome della proprietà:

%systemroot%\system32\inetsrv\APPCMD search config "Default Web Site/" /section:directoryBrowse /enabled

Infine, per cercare posizioni che impostano una proprietà su un valore specifico:

%systemroot%\system32\inetsrv\APPCMD search config "Default Web Site/" /section:directoryBrowse /enabled:true

Utilizzo dell'output degli strumenti

In precedenza è stato indicato che l'output del comando LIST è un elenco di istanze di oggetti. AppCmd offre diverse modalità di output che consentono di controllare il livello di dettaglio visualizzato su ogni oggetto.

Output predefinito

Si prendano ad esempio LIST Sites. Per impostazione predefinita, AppCmd usa un formato di output compatto:

%systemroot%\system32\inetsrv\APPCMD list sites
SITE "Default Web Site" (id:1,bindings:HTTP/*:80:,state:Started)
SITE "Site1" (id:2,bindings:http/*:81:,state:Started)
SITE "Site2" (id:3,bindings:http/*:82:,state:Stopped)

In questo formato di output, ogni istanza dell'oggetto si trova su una riga, specificando il tipo di oggetto (SITE) e l'identificatore dell'oggetto ("Sito Web predefinito"). Diverse proprietà comuni o importanti sono in genere anche output (ID, associazioni e stato per l'oggetto Site).

Output dettagliato

La maggior parte degli oggetti supporta molte più proprietà rispetto a quelle presentate nell'output predefinito. Per visualizzare tutte le proprietà dell'oggetto, specificare il parametro text:*. Le proprietà di ogni istanza verranno visualizzate in un formato albero gerarchico:

APPCMD list site "Default Web Site" /text:*
SITE
  SITE.NAME: Default Web Site
  SITE.ID: 2
  bindings: http/*:80:
  state: Started
...

Nell'esempio precedente l'output è stato abbreviato. L'output effettivo include molte altre proprietà.

Output per l'uso di altri strumenti da riga di comando

AppCmd offre una modalità di output che visualizza solo una proprietà specifica di ogni istanza dell'oggetto. Specificare il nome della proprietà da visualizzare con il parametro text:<PROPERTY> . Ad esempio, questo comando restituirà tutte le istanze di directory virtuali disponibili, visualizzando solo la proprietà physicalPath di ognuno di essi:

%systemroot%\system32\inetsrv\APPCMD list vdirs /text:physicalPath
C:\inetpub\wwwroot
C:\inetpub\vdir1
D:\vdir2

È possibile, naturalmente, visualizzare una delle proprietà valide del tipo di oggetto elencato.

A volte è consigliabile usare l'output di AppCmd con gli strumenti da riga di comando e i comandi della shell esistenti, ad esempio il comando FOR e FINDSTR.EXE. Questi strumenti spesso funzionano meglio quando ogni elemento di dati di interesse si trova su una riga separata.

Si supponga, ad esempio, una riga di comando che produce un elenco di directory di ogni directory virtuale IIS. La riga di comando deve acquisire un elenco di percorsi fisici da ognuna delle directory virtuali di interesse e quindi eseguire un comando DIR in ognuno di questi percorsi usando il comando FOR per eseguire un ciclo tramite essi:

FOR /F %f IN ('%systemroot%\system32\inetsrv\APPCMD list vdir /text:physicalPath') DO CALL DIR %f

Output di configurazione

Molti oggetti contengono dati di configurazione provenienti direttamente dalle sezioni di configurazione associate. L'oggetto Config è l'esempio principale di questo e funge da wrapper diretto sul sistema di configurazione IIS. Ogni istanza dell'oggetto restituita dall'oggetto Config è una sezione di configurazione. Altri oggetti, ad esempio Site, contengono anche informazioni di configurazione come parte delle proprietà dell'oggetto.

Se si desidera visualizzare le informazioni di configurazione per gli oggetti restituiti nel formato XML non elaborato del sistema di configurazione, è possibile usare il parametro config . Ad esempio, per visualizzare le informazioni di configurazione XML per l'oggetto sito, usare una riga di comando simile alla seguente:

%systemroot%\system32\inetsrv\APPCMD list site "Default Web Site" /config
<site name="Default Web Site" id="1">
  <bindings>
        <binding protocol="HTTP" bindingInformation="*:80:" />
...

XML Output

Lo strumento supporta anche il proprio formato di output XML, che genera set di risultati XML ben formati per gli oggetti restituiti dall'esecuzione del comando. Ciò consente alcune funzionalità interessanti che distinguono AppCmd da qualsiasi precedente strumento da riga di comando fornito dal team iis.

  • Creazione di attività di gestione complesse. Lo scopo principale di questa capacità è consentire ai set di risultati generati da AppCmd di essere input in un altro comando AppCmd. In questo modo è possibile eseguire rapidamente attività di gestione complesse senza scrivere codice dell'applicazione.
  • Esecuzione efficiente di operazioni batch. L'esecuzione dello strumento un numero elevato di volte durante l'esecuzione di un numero elevato di operazioni (ad esempio la creazione di 10.000 siti) può essere lenta a causa del sovraccarico della creazione e dell'inizializzazione del processo per ogni operazione. Al contrario, un singolo comando strumento può essere eseguito sui dati di input contenuti in un set di dati XML, riducendo notevolmente il tempo di esecuzione dell'elaborazione dei dati di input.
  • Esportazione dei dati in altri strumenti. Il formato XML consente di usare i set di dati generati da AppCmd con altri strumenti per elaborare, archiviare o fornire report. Ad esempio, i dati di AppCmd possono essere usati con trasformazioni XSLT in report di gestione HTML generali, importati in SQL Server 2005 per ulteriori analisi o caricati da ADO.NET per l'elaborazione a livello di codice.

Ad esempio, per restituire l'elenco dei siti in modalità XML:

%systemroot%\system32\inetsrv\APPCMD list sites /xml

Per altre informazioni sulla funzionalità di piping e su come usarla per una potente gestione della riga di comando, vedere http://mvolo.com/do-complex-iis-management-tasks-easily-with-appcmd-command-piping/.

Riepilogo

In questa panoramica è stato acquisito familiarità con tutti i diversi comandi potenti disponibili usando l'utilità IIS 7 e versioni successive Command-Line, AppCmd.exe.

È anche possibile trovare altri argomenti di AppCmd e apprendere modi avanzati per gestire il server dalla riga di comando nel blog all'indirizzo http://mvolo.com/category/appcmd/.