Padronanza di PowerShell IIS: creare e gestire siti web

Se gestisci server Windows, probabilmente hai lavorato con Internet Information Services (IIS). I siti web sono una delle principali caratteristiche di IIS e, utilizzando PowerShell, è possibile gestire e automatizzare facilmente IIS con gli script PowerShell per IIS!

In questo articolo, verrà presentato un nuovo modo per gestire IIS utilizzando PowerShell. Utilizzando le tecniche descritte in questo articolo, è possibile facilmente creare script PowerShell per IIS per creare e gestire siti web.

Per gestire IIS con PowerShell è necessario uno dei due moduli PowerShell: WebAdministration o IISAdministration. Questo articolo copre il modulo IISAdministration più moderno. Il video correlato a questo articolo mostra il vecchio modulo WebAdministration se desideri vedere un modo alternativo.

Sapere come gestire anche un semplice sito web per la tua azienda o per il mondo intero ti distinguerà dagli altri tuoi colleghi. Le sezioni seguenti in questo articolo ti aiuteranno a imparare come creare e gestire un sito web in IIS. Imparerai anche come gestire le pool di applicazioni web utilizzando alcuni cmdlet di PowerShell.

Moduli IISAdministration vs WebAdministration

Hai due opzioni per gestire IIS. Puoi utilizzare WebAdministration o IISAdministration. Ma quale dovresti utilizzare?

Se stai utilizzando IIS 10.0 o versioni successive, il nuovo modulo IISAdministration offre molti miglioramenti rispetto al vecchio modulo WebAdministration.

Ecco alcuni punti salienti:

  • Le cmdlet IISAdministration offrono un miglior supporto per il pipeline e una migliore scalabilità.
  • Rispetto alle vecchie cmdlet IIS WebAdministration, IISAdministration contiene un codice più efficiente.
  • Le cmdlet IISAdministration sono più semplici e forniscono un accesso diretto al gestore del server.

Questo articolo si concentrerà su questo modulo IISAdministration più recente.

Prerequisiti

Questo articolo sarà pratico. Se intendi seguirmi, assicurati di avere i seguenti prerequisiti.

The Windows 10 “Turn Windows features on or off” dialogue

Si consiglia di essere familiari con le basi di HTML. Ci sarà un passaggio in cui l’uso di HTML svolge un ruolo negli esempi successivi. Ma non preoccuparti, sarai in grado di copiare e incollare il codice!

Tutti gli esempi in questo post sono stati creati utilizzando IIS 10.0 su Windows 10 e PowerShell 7 Preview 6. Le cmdlet IISAdministration sono le stesse per Windows Server 2016 e 2019 e funzionano con Windows PowerShell 5.1.

Questo è tutto per gli strumenti utilizzati, ora passiamo alle risorse necessarie per seguire.

Installazione del modulo IISAdministration

Una volta soddisfatti i prerequisiti, è tempo di fare qualche lavoro di configurazione. Fortunatamente, non c’è molto da configurare poiché il modulo PowerShell di cui hai bisogno (IISAdministration) è liberamente disponibile nella PowerShell Gallery.

Vai avanti e apri una console PowerShell con privilegi elevati sul tuo server web e installa il modulo usando il comando di seguito.

PS> Install-Module -Name 'IISAdministration'

Se non hai accesso a Internet, puoi scaricare il modulo su un altro host e copiarlo nella tua directory dei moduli. Dai un’occhiata alla documentazione del comando Save-Module.

Scoprire i cmdlet disponibili

Come con qualsiasi modulo PowerShell che potresti non conoscere, uno dei primi cmdlet da utilizzare per scoprire l’inventario dei cmdlet di un modulo è Get-Command. Utilizzando il comando Get-Command -Module 'IISAdministration' come mostrato di seguito, potrai vedere cosa è possibile fare con questo modulo.

Anche se imparerai alcune azioni comuni da eseguire sui siti web, questi comandi ti daranno un’idea di tutto il resto che puoi fare.

Get-Command -Module ‘IISAdministration’ results

Ora hai una lista di cmdlet disponibili. È ora di iniziare a creare un sito.

Creazione del tuo primo sito web

Per avere un sito web funzionante, creiamo prima un sito web. Per farlo, il primo passo è creare una directory per salvare i contenuti web. Inoltre, avrai bisogno di un file HTML in quella directory perché IIS lo visualizzi. Questa directory fungerà da directory web che verrà utilizzata negli esempi successivi.

Creazione della cartella e della pagina web

Prima di tutto, crea una directory. Puoi farlo utilizzando il cmdlet New-Item. Il codice qui sotto creerà una directory in C:\MyWebsite.

PS> New-Item -ItemType Directory -Name 'MyWebsite' -Path 'C:\'

Puoi scegliere qualsiasi percorso desideri con il codice sopra. Per mantenere le cose semplici, verranno utilizzati percorsi generici.

Una volta creata la directory, è ora di creare un file HTML che sarà la pagina di accesso per il tuo nuovo sito web.

Ora crea un file chiamato index.html nella directory C:\Mywebsite come mostrato di seguito.

PS> New-Item -ItemType File -Name 'index.html' -Path 'C:\MyWebsite\'

Una volta creato il file, aprilo nel tuo editor preferito e copia/incolla il codice sottostante in quel documento. Questo HTML è una semplice pagina che verrà utilizzata per verificare che IIS sia configurato correttamente quando avrai finito.

<!DOCTYPE html>
<html>
    <head>
         <title>IIS Administration With PowerShell Demo</title>
    </head>
    <body>
        <h1>IIS Administration with PowerShell Demo</h1>
        <p>Thank you for reading this post on how to administer IIS with PowerShell!</p>

        <p>This page was created using the newer IISAdministration PowerShell module.</p>
        <h2>First Steps</h2>
        <p>Keep calm and learn PowerShell.</p>
    </body>
</html>

Creazione di un sito web IIS

È ora il momento di rendere la pagina web appena creata disponibile per il mondo. Per farlo, dovrai creare una directory virtuale. La directory virtuale contiene tutte le risorse e gli asset utilizzati per la pagina che viene servita.

Per impostazione predefinita, IIS crea una directory virtuale sotto C:\inetpub\wwwroot. La directory contiene tutte le risorse e gli asset predefiniti per le pagine web di IIS. È possibile utilizzare la directory predefinita C:\inetpub\wwwroot anche per archiviare i propri file, ma per questi esempi non verrà utilizzata al fine di mantenere i percorsi il più brevi possibile. Ecco perché si utilizzerà C:\MyWebsite.

Per creare una nuova directory virtuale (sito), utilizzare il cmdlet New-IISSite. Questo cmdlet consente di creare il sito web in IIS.

Per questo articolo, creare un sito web chiamato Mywebsite che punta alla directory C:\MyWebsite e che è in ascolto sulla porta 8088. Nell’esempio di codice riportato di seguito, è possibile vedere come fare ciò utilizzando il cmdlet New-IISSite.

L’unica parte che potrebbe essere confusa è il parametro BindingInformation. Questo parametro accetta solo una sintassi di binding. In questo esempio, New-IISSite creerà un sito web collegato a un indirizzo IP (* corrisponde a 127.0.0.1), la porta TCP su cui ascoltare e qualsiasi intestazione HTTP.

La sintassi di binding può essere spiegata come protocollo, seguito da origine:porta:destinazione. In questo esempio, si è configurato IIS per ascoltare le richieste HTTP da QUALSIASI () indirizzo IP sulla porta 8088 e la destinazione è il localhost.*.

PS> New-IISSite -Name 'MyWebsite' -PhysicalPath 'C:\MyWebsite\' -BindingInformation "*:8088:"

Una volta creato il sito, puoi eseguire Get-IISSite per ispezionare come appare, come mostrato di seguito.

Creating a New Website in IIS

Per impostazione predefinita, la configurazione del sito web viene avviata e il tuo host web inizia a servire le richieste HTTP. Apri il browser di tua scelta e vai all’indirizzo locale puntando alla porta 8088. Ora dovresti vedere la pagina web che hai creato in precedenza.

MyWebSite IIS site in a web browser

Congratulazioni! Hai appena configurato il tuo primo sito web su IIS utilizzando PowerShell!

Ora che hai un sito web in esecuzione, è il momento di imparare come gestire il tuo sito web e il server IIS che lo ospita.

Gestire il sito web IIS

Una volta che un sito web è in esecuzione, probabilmente avrai bisogno di eseguire azioni comuni come interrompere e avviare il sito. Ad esempio, se il sito richiede modifiche, a volte dovrai riavviare il sito.

Per gestire il sito in PowerShell, hai due cmdlet con cui lavorare: Start-IISSite e Stop-IISSite. Questi due cmdlet funzionano in modo simile ai cmdlet Stop-Service e Start-Service.

Interrompere un sito web è simile all’arresto di un servizio di Windows. Stai impedendo o consentendo l’accesso al sito accessibile da un protocollo servito su una porta univoca da IIS. Tuttavia, non stai arrestando l’host IIS. I siti possono essere interrotti e avviati su base individuale.

Arrestare un singolo sito

Per arrestare un sito IIS, userai il cmdlet Stop-IISSite. Per impostazione predefinita, il sito che hai creato in precedenza dovrebbe essere in uno stato Started. Se arresti il sito e quindi impedi l’accesso a MyWebsite, esegui Stop-IISSite fornendo il nome come mostrato di seguito. Questo codice arresta il sito MyWebsite in modo che non venga servito da IIS. Dopo aver arrestato il sito, non sarai più in grado di accedervi.

PS> Stop-IISSite -Name "MyWebsite"

Di seguito è mostrato un esempio di ispezione dello stato del sito web come Started, di arresto e di ispezione dello stato nuovamente. In questo esempio, stai:

  1. Ottenendo lo stato del sito MyWebsite utilizzando Get-IISSite.
  2. Eseguendo il cmdlet Stop-IISSite sul sito MyWebsite. Questo cmdlet interrompe l’accesso al sito web. Poiché questa azione comporta modifiche operative, ti verrà chiesta conferma.
  3. Eseguendo nuovamente Get-IISSite per verificare che il sito MyWebsite sia stato arrestato notando lo stato Stopped.
Getting, stopping, and confirming MyWebsite state

Arrestare tutti i siti

In precedenza hai arrestato un singolo sito, ma puoi anche arrestare tutti i siti con la stessa facilità. Utilizzando il pipeline e inviando l’output di Get-IISSite a Stop-IISSite, PowerShell elencherà tutti i siti e li arresterà tutti. Nell’esempio di codice seguente, viene utilizzato l’opzionale parametro switch Verbose per mostrare ulteriori informazioni.

Get-IISSite | Stop-IISSite -Verbose
Stopping all IIS sites with PowerShell

Puoi anche interrompere tutti i siti in IIS interrompendo il W3SVC o il servizio di pubblicazione del World Wide Web. L’arresto del servizio di Windows spegne IIS e impedisce la pubblicazione di tutti i siti. Tuttavia, se lo fai, i siti potrebbero comunque risultare avviati.

Avvio di un singolo sito

Supponiamo che tu abbia apportato alcune modifiche al sito MyWebsite e che tu debba riavviarlo. È ora di utilizzare il comando Start-IISSite. Per farlo, specifica semplicemente il nome come hai fatto utilizzando il cmdlet Stop-IISSite.

PS> Start-IISSite -Name 'MyWebsite'

Quando viene eseguito, puoi quindi verificare nuovamente lo stato utilizzando Get-IISSite. In questo modo, dovresti vedere un output simile a quello dello screenshot riportato di seguito.

Checking the status of MyWebsite using Get-IISSite and starting the site with Start-IISSite

E ora il tuo sito dovrebbe essere di nuovo disponibile all’indirizzo http://localhost:8088 se aggiorni il tuo browser.

Avvio di tutti i siti

Similmente a come hai interrotto la pubblicazione di tutti i siti, puoi utilizzare il pipeline per avviare tutti i siti web sul tuo host IIS.

PS> Get-IISSite | Start-IISSite

Ancora una volta, stai ottenendo tutti i siti IIS in servizio e li stai avviando utilizzando la pipeline. Il tuo output dovrebbe essere simile a quello dello screenshot riportato di seguito.

Using the pipeline to start all sites on host

Gestione dei collegamenti web

È ora il momento di iniziare a eseguire alcune operazioni amministrative comuni sul sito MyWebsite. Una delle operazioni più comuni è la modifica dei collegamenti web.

Quando hai creato il sito MyWebsite, hai utilizzato la sintassi di binding *:8088:. Questa sintassi rappresenta l’ascolto sull’indirizzo IP 127.0.0.1, sulla porta 80 senza intestazioni HTTP. Supponiamo ora che tu abbia deciso di far ascoltare il sito sulla porta 9000. Per fare ciò, dovrai modificare i binding del sito.

Ispezione dei binding esistenti

Prima di poter modificare i binding del sito, dovresti prima ispezionare la configurazione corrente. Un modo per farlo è ispezionare la proprietà Binding restituita da Get-IISSite. Nota nel prossimo frammento di codice come fare ciò. Nel frammento, Get-IISSite interroga il sito MyWebSite e restituisce solo la proprietà Bindings.

PS> (Get-IISSite -Name 'MyWebsite').Bindings

Quando ispezioni solo la proprietà Bindings, PowerShell restituirà un oggetto con diverse informazioni, come mostrato di seguito.

Example 1: Finding binding information

Se desideri vedere solo le informazioni del binding, puoi fare riferimento specificamente alla proprietà bindingInformation come mostrato di seguito.

Example 2: Finding binding information

Rimozione dei binding

Se desideri modificare la porta su cui un sito ascolta, devi prima rimuovere il binding esistente che lo collega a quella porta. Per rimuovere il binding, devi prima fermare il sito.

PS> Stop-IISSite -Name 'MyWebsite'

Una volta fermato il sito, puoi ora rimuovere il binding esistente che collega il sito MyWebsite alla porta 8088. Per farlo, puoi utilizzare il cmdlet Remove-IISSiteBinding.

Per rimuovere il binding per MyWebsite come definito in precedenza, di seguito puoi vedere un esempio dell’utilizzo di Remove-IISSiteBinding per fare proprio questo. Di seguito, fornisci il nome del sito e specifica la sintassi del binding scoperta in precedenza.

PS> Remove-IISSiteBinding -Name 'MyWebsite' -BindingInformation "*:8088:"

Quando esegui il codice, ti verrà chiesta conferma della tua decisione poiché stai facendo qualcosa di distruttivo come mostrato di seguito.

Removing site binding using Verbose parameter

Non c’è limite al numero di binding che puoi avere. Puoi facilmente mantenere il binding originale e aggiungere la porta TCP 9000 come nuovo binding.

Ora puoi eseguire nuovamente Get-IISSite -Name 'MyWebsite'. Vedrai ora che le informazioni sul binding sono state rimosse come mostrato dal valore vuoto sotto Bindings.

Confirming the old bindings were removed

Anche se il sito è pubblicato, IIS non ha modo di sapere come instradare il traffico al tuo sito.

È importante avere almeno un binding assegnato al tuo sito. Per mostrarti l’importanza, prova a navigare nuovamente su http://localhost:8088/index.html. Se stavi usando il browser web Mozilla Firefox, potresti vedere questo messaggio qui sotto.

Can’t establish a connection

Creazione di nuovi binding

Nella sezione precedente, hai rimosso l’unico binding del sito MyWebsite. Anche se questo ha interrotto il sito, è solo un problema temporaneo. È ora il momento di correggere questo problema creando un nuovo binding.

Per creare un nuovo binding, utilizza il cmdlet New-IISSiteBinding. Poiché devi associare la porta 9000 al sito MyWebsite, specifica la sintassi del binding corretta come mostrato di seguito.

PS> New-IISSiteBinding -Name 'MyWebsite' -BindingInformation "*:9000:"

Una volta creato il nuovo binding, avvia nuovamente il sito con Start-IISSite. Ricorda che per creare questo nuovo binding, IIS richiede che il sito venga interrotto.

Quando il sito riparte, dovresti essere in grado di accedervi sulla porta 9000. Per verificare ciò, apri il tuo browser preferito e vai su http://localhost:9000. Ora dovresti vedere che la pagina web funziona nuovamente sulla porta 9000.

Same page, different TCP port

Rimozione di un sito

Se hai appena seguito un tutorial e non intendi tenere il sito MyWebsite in modo permanente, è ora di pulirlo. Per rimuovere un sito, utilizza il cmdlet Remove-IISSite.

La rimozione di un sito IIS può essere un’operazione rischiosa, soprattutto se si sta rimuovendo un sito su IIS che ospita altri siti web in produzione. Per verificare che si stia rimuovendo il sito corretto, si consiglia di utilizzare il parametro comune WhatIf di PowerShell. Questo parametro consente di verificare cosa sarebbe successo se il comando fosse stato effettivamente eseguito.

Puoi vedere un esempio di rimozione del sito MyWebsite utilizzando il parametro WhatIf di seguito.

Remove-IISSite -Name 'MyWebSite' -WhatIf
Being careful with destructive cmdlets by using -WhatIf !

Se tutto sembra corretto, lascia la barra di sicurezza e esegui di nuovo il codice, questa volta senza il parametro -WhatIf.

Quando si utilizza il cmdlet Remove-IISSite, il sito non viene eliminato. Viene rimosso dalla configurazione di IIS. I file del sito web rimangono intatti.

Riepilogo

In questo articolo, hai imparato a creare un sito web utilizzando il modulo IISAdministration. Hai visto come eseguire operazioni amministrative necessarie per mantenere un sito web. Ora hai abbastanza conoscenze di base per lavorare con qualsiasi host IIS moderno utilizzando PowerShell!

Ulteriori letture

Source:
https://adamtheautomator.com/powershell-iis/