Tutorial :How to update existing IIS 6 Web Site using PowerShell



Question:

I am trying to create a PowerShell script that creates a new IIS 6 web site and sets things like App Pool, Wildcard application maps, ASP.NET version, etc.

After extensive search on the Internet I found a script that allows me to create a new Web Site but not to modify all the properties I need.

$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)    

Any help on how to expand example above is greatly appreciated.


Solution:1

The $result object contains the path to the newly created IIsWebServer object. You can get access to the virtual directory, where you can configure more properties, by doing the following:

$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();  


Solution:2

First of all, big thanks to jrista for pointing me in the right direction.

I also found this article very useful.

What follows here is a powershell script to create Application pool, Website and a SelfSsl certificate:

    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  


Solution:3

This is a useful PowerShell snippet.

I tried running this and I get problems with the delete tests. Delete does not work against the app pool when the site still exists. Surely you should run website delete test first.

# 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()}  

Run this first, then run the app pool deletion test.
I realise you have marked these as tests but surely it is useful to exit or delete if webs site exists.


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »