2010-02-11 4 views
6

Ich versuche, einen Powershell-Skript zu erstellen, die eine neue IIS 6-Website erstellt und setzen Dinge wie App-Pool, Wildcard Applikationskarten, ASP.NET-Version usw.Wie vorhandene IIS 6 Web-Site aktualisieren Powershell mit

Nach umfangreicher Suche im Internet habe ich ein Skript gefunden, mit dem ich eine neue Website erstellen, aber nicht alle Eigenschaften ändern kann, die ich brauche.

$newWebsiteName = "WebSiteName" 
$newWebsiteIpAddress = "192.168.1.100" 
$newWebSiteDirPath = "c:\inetpub\wwwroot\WebSiteName" 
$iisWebService = Get-WmiObject -namespace "root\MicrosoftIISv2" 
           -class "IIsWebService" 
$bindingClass = [wmiclass]'root\MicrosoftIISv2:ServerBinding' 
$bindings = $bindingClass.CreateInstance() 
$bindings.IP = $newWebsiteIpAddress 
$bindings.Port = "80" 
$bindings.Hostname = "" 
$result = $iisWebService.CreateNewSite 
       ($newWebsiteName, $bindings, $newWebSiteDirPath) 

Jede Hilfe auf, wie man Beispiel oben erweitert, wird sehr geschätzt.

+0

Entschuldigung, welche Eigenschaften müssen Sie speziell ändern? –

Antwort

1

Das $ result-Objekt enthält den Pfad zum neu erstellten IIsWebServer-Objekt. Sie können den Zugriff auf das virtuelle Verzeichnis, wo Sie mehr Eigenschaften konfigurieren können, indem Sie folgendermaßen vorgehen:

$w3svcID = $result.ReturnValue -replace "IIsWebServer=", "" 
$w3svcID = $w3svcID -replace "'", "" 
$vdirName = $w3svcID + "/ROOT"; 

$vdir = gwmi -namespace "root\MicrosoftIISv2" 
      -class "IISWebVirtualDir" 
      -filter "Name = '$vdirName'"; 
# do stuff with $vdir 
$vdir.Put(); 
9

Zunächst einmal vielen Dank an jrista für mich in der richtigen Richtung.

Ich fand auch diese article sehr nützlich.

Was hier folgt, ist ein Powershell-Skript Anwendungspool, Website und ein SelfSSL Zertifikat zu erstellen:

 

function CreateAppPool ([string]$name, [string]$user, [string]$password) 
{ 
    # check if pool exists and delete it - for testing purposes 
    $tempPool = gwmi -namespace "root\MicrosoftIISv2" -class "IISApplicationPoolSetting" -filter "Name like '%$name%'" 
    if (!($tempPool -eq $NULL)) {$tempPool.delete()} 

    # create Application Pool 
    $appPoolSettings = [wmiclass] "root\MicrosoftIISv2:IISApplicationPoolSetting" 
    $newPool = $appPoolSettings.CreateInstance() 

    $newPool.Name = "W3SVC/AppPools/" + $name 
    $newPool.WAMUsername = $user 
    $newPool.WAMUserPass = $password 

    $newPool.PeriodicRestartTime = 1740 
    $newPool.IdleTimeout = 20 
    $newPool.MaxProcesses = 1 
    $newPool.AppPoolIdentityType = 3 

    $newPool.Put() 
} 

function CreateWebSite ([string]$name, [string]$ipAddress, [string]$localPath, [string] $appPoolName, [string] $applicationName) 
{ 
    # check if web site exists and delete it - for testing purposes 
    $tempWebsite = gwmi -namespace "root\MicrosoftIISv2" -class "IISWebServerSetting" -filter "ServerComment like '%$name%'" 
    if (!($tempWebsite -eq $NULL)) {$tempWebsite.delete()} 

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

    $iisWebService = gwmi -namespace "root\MicrosoftIISv2" -class "IIsWebService" 

    $bindingClass = [wmiclass]'root\MicrosoftIISv2:ServerBinding' 
    $bindings = $bindingClass.CreateInstance() 
    $bindings.IP = $ipAddress 
    $bindings.Port = "80" 
    $bindings.Hostname = "" 

    $iisWebService.CreateNewSite($name, $bindings, $localPath) 

    # Assign App Pool 
    $webServerSettings = gwmi -namespace "root\MicrosoftIISv2" -class "IISWebServerSetting" -filter "ServerComment like '%$name%'" 
    $webServerSettings.AppPoolId = $appPoolName 
    $webServerSettings.put() 

    # Add wildcard map 
    $wildcardMap = "*, c:\somewildcardfile.dll, 0, All" 
    $iis = [ADSI]"IIS://localhost/W3SVC" 
    $webServer = $iis.psbase.children | where { $_.keyType -eq "IIsWebServer" -AND $_.ServerComment -eq $name } 
    $webVirtualDir = $webServer.children | where { $_.keyType -eq "IIsWebVirtualDir" } 
    $webVirtualDir.ScriptMaps.Add($wildcardMap) 

    # Set Application name 
    $webVirtualDir.AppFriendlyName = $applicationName 

    # Save changes 
    $webVirtualDir.CommitChanges() 

    # Start the newly create web site 
    if (!($webServer -eq $NULL)) {$webServer.start()} 
} 

function AddSslCertificate ([string] $websiteName, [string] $certificateCommonName) 
{ 
    # This method requires for you to have selfssl on your machine 
    $selfSslPath = "\program files\iis resources\selfssl" 

    $certificateCommonName = "/N:cn=" + $certificateCommonName 

    $certificateValidityDays = "/V:3650" 
    $websitePort = "/P:443" 
    $addToTrusted = "/T" 
    $quietMode = "/Q" 


    $webServerSetting = gwmi -namespace "root\MicrosoftIISv2" -class "IISWebServerSetting" -filter "ServerComment like '$websiteName'" 
    $websiteId ="/S:" + $webServerSetting.name.substring($webServerSetting.name.lastindexof('/')+1) 

    cd -path $selfSslPath 
    .\selfssl.exe $addToTrusted $certificateCommonName $certificateValidityDays $websitePort $websiteId $quietMode 
} 

$myNewWebsiteName = "TestWebsite" 
$myNewWebsiteIp = "192.168.0.1" 
$myNewWebsiteLocalPath = "c:\inetpub\wwwroot\"+$myNewWebsiteName 
$appPoolName = $myNewWebsiteName + "AppPool" 
$myNewWebsiteApplicationName = "/" 
$myNewWebsiteCertificateCommonName = "mynewwebsite.dev" 

CreateAppPool $appPoolName "Administrator" "password" 
CreateWebSite $myNewWebsiteName $myNewWebsiteIp $myNewWebsiteLocalPath $appPoolName $myNewWebsiteApplicationName 
AddSslCertificate $myNewWebsiteName $myNewWebsiteCertificateCommonName 
+0

genial. würde 10x upvote wenn ich könnte ... – mwjackson

+0

nur ändern, um zu machen ist die Website zu löschen, bevor Sie den App-Pool löschen, sonst es Fehler (brechen Sie die Löschungen in ihre eigenen Funktionen) – mwjackson

1

Dies ist ein nützlicher Powershell-Schnipsel.

Ich habe versucht, dies auszuführen, und ich bekomme Probleme mit den Lösch-Tests. Löschen funktioniert nicht gegen den App-Pool, wenn die Site noch vorhanden ist. Sicher sollten Sie zuerst den Website-Lösch-Test durchführen.

# check if web site exists and delete it - for testing purposes 
$tempWebsite = gwmi -namespace "root\MicrosoftIISv2" 
        -class "IISWebServerSetting" 
        -filter "ServerComment like '%$name%'" 
if (!($tempWebsite -eq $NULL)) {$tempWebsite.delete()} 

Führen Sie dies zuerst aus und führen Sie dann den Löschvorgang für den App-Pool aus.
Ich weiß, dass Sie diese als Tests markiert haben, aber sicherlich ist es sinnvoll, zu beenden oder zu löschen, wenn Webs Website existiert.

Verwandte Themen