2014-06-24 6 views
27

Ho scritto uno script PowerShell per distribuire automaticamente IIS sito web, ma quando passo parametri allo script ottengo il seguente errore:Ottenere "Impossibile trovare l'unità. L'unità denominata 'IIS' non esiste."

Cannot find the drive. The drive called 'IIS' does not exist.

Il mio script (iss_website_version_update.ps1) è come sotto, ma nota che non è finito ancora:

param(
[array]$iishostlist=$(throw "Parameter missing: -name iishostlist"), 
[array]$websiteName=$(throw "Parameter missing: -name websiteName") 
) 

For($i=0;$i -lt $iishostlist.Count; $i++){ 
For($j=0;$j -lt $websiteName.Count; $j++){ 
    $start = get-date 
    $tempSession = new-pssession -ComputerName $($iishostlist[$i]) 
    Invoke-Command -Session $tempSession -ScriptBlock { 
     C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -command Import-Module WebAdministration;set-location IIS:\;(Stop-Website $($websiteName[$j])) 
     } 
    ....... 

Fatemelo sapere il motivo per cui il sub-comando di set-location IIS:\; nel comando Invoke-Command non viene riconosciuto?

risposta

53

Drive, non Drive r. L'unità è fornita dal modulo WebAdministration, quindi è necessario prima installare/importare quel modulo.

Il modo in cui si installa il modulo dipende dal sistema attuale e dall'utilizzo di GUI o PowerShell. Su un Windows Server 2008 R2 per esempio che ci si installare il modulo con il seguente comandi PowerShell:

Import-Module ServerManager 
Add-WindowsFeature Web-Scripting-Tools 

Dopo l'installazione del modulo è possibile caricare nel vostro script come questo:

Import-Module WebAdministration 
+0

Avevo installato lo snap-in IIS.E il comando include tre sottocomandi: "Importa-modulo WebAdministration; set-location IIS: \; (Stop-Sito Web $ ($ websiteName [$ j]))" che era diviso con punto e virgola.Ora la domanda è "set-location IIS: \" non può essere riconosciuto. – user3772170

+0

Ciò significa che se U inserisce il seguente comando, U riceverà lo stesso errore: Invoke-Command -ComputerName xx.xx.xx.xx -ScriptBlock {C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe - comando Import-Module WebAdministration; set-location IIS: \; Sito di prova Sito Web Stop} – user3772170

+0

@ user3772170: i comandi vengono eseguiti su un host remoto, pertanto il modulo deve essere installato su quell'host. Inoltre, il tuo codice è già in esecuzione in PowerShell, quindi non c'è bisogno di 'C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe -comando' nel blocco di script. Rimuovi quello. –

25

I ha avuto un problema similare L'errore era che non stavo eseguendo lo script in modalità Admin.

+1

Amico, tu rock! – Quantium

+1

Lo stesso vale per PowerShell ISE se si sta sviluppando lo script. – PhilDulac

1

Su Windows Server 2008 a 32 bit, ho dovuto scaricare e installare in modo esplicito "IIS Powershell Snap-in (x86)" dal sito Web di Microsoft.