2008-11-04 12 views

risposta

6

Non è il processo più ovvio, ma qui è ciò che ha funzionato per me ..

$AppPoolSettings = [wmiclass]'root\MicrosoftIISv2:IISApplicationPoolSetting' 
$NewPool = $AppPoolSettings.CreateInstance() 
$NewPool.Name = 'W3SVC/AppPools/MyAppPool' 
$Result = $NewPool.Put() 

Potresti ricevere un errore con la chiamata a Put(), ma chiamarla una seconda (o terza) volta dovrebbe farlo funzionare. Ciò è dovuto a un problema con PowerShell V1 e WMI.

+0

Grazie, funziona molto bene. Penso di averlo provato, ma sono stato rimandato da quell'errore. –

+0

Felice che abbia funzionato per te. Questo errore è un po 'distratto, ma questo è solo V1 di PowerShell. –

7

Pensavo che potrei condividere la sceneggiatura che ho inventato. Grazie per andare a Steven e Leon.

# Settings 
$newApplication = "MaxSys.Services" 
$poolUserName = "BRISBANE\svcMaxSysTest" 
$poolPassword = "ThisisforT3sting" 

$newVDirName = "W3SVC/1/ROOT/" + $newApplication 
$newVDirPath = "C:\" + $newApplication 
$newPoolName = $newApplication + "Pool" 

#Switch the Website to .NET 2.0 
C:\windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -sn W3SVC/ 

# Create Application Pool 
$appPoolSettings = [wmiclass] "root\MicrosoftIISv2:IISApplicationPoolSetting" 
$newPool = $appPoolSettings.CreateInstance() 
$newPool.Name = "W3SVC/AppPools/" + $newPoolName 
$newPool.PeriodicRestartTime = 0 
$newPool.IdleTimeout = 0 
$newPool.MaxProcesses = 2 
$newPool.WAMUsername = $poolUserName 
$newPool.WAMUserPass = $poolPassword 
$newPool.AppPoolIdentityType = 3 
$newPool.Put() 
# Do it again if it fails as there is a bug with Powershell/WMI 
if (!$?) 
{ 
    $newPool.Put() 
} 

# Create the virtual directory 
mkdir $newVDirPath 

$virtualDirSettings = [wmiclass] "root\MicrosoftIISv2:IIsWebVirtualDirSetting" 
$newVDir = $virtualDirSettings.CreateInstance() 
$newVDir.Name = $newVDirName 
$newVDir.Path = $newVDirPath 
$newVDir.EnableDefaultDoc = $False 
$newVDir.Put() 
# Do it a few times if it fails as there is a bug with Powershell/WMI 
if (!$?) 
{ 
    $newVDir.Put() 
} 

# Create the application on the virtual directory 
$vdir = Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IISWebVirtualDir" -filter "Name = '$newVDirName'" 
$vdir.AppCreate3(2, $newPoolName) 

# Updated the Friendly Name of the application 
$newVDir.AppFriendlyName = $newApplication 
$newVDir.Put() 
+0

@robert wagner - Vorrei modificare la gestione degli errori in DO {$ newVDir.Put()} WHILE (! $?) Quindi non sarà necessario avere il primo Put(). Il ciclo do/while continuerà a eseguire il put fino a quando non ci saranno errori. Solo un suggerimento. –

+0

Potrebbe rimanere bloccato in un ciclo infinito, ma è un pensiero. –

+0

si potrebbe sempre avere un piccolo contatore, un solo tentativo fino a un numero massimo di volte. – jrista

0

Tutto va bene! Ho modificato il codice in modo che sia presente una chiamata esplicita al comando $ newPool.Put() dopo l'errore iniziale. Grazie per l'aiuto!

Problemi correlati