This script relies on this post currently as it gets a test ASPX site to make sure everything was setup correctly.
.\IIS-Create.ps1 <Site/App Name> <Site Root Path> <Site Port> <Domain User Account> <Domain User Password>
clear Function Load-WebAdmin { $webAdminModule = get-module -ListAvailable | ? { $_.Name -eq "webadministration" } If ($webAdminModule -ne $null) { import-module WebAdministration } } # Variables - Start #$appName = "DemoSite" $appName = $args[0] #$physicalPath = "C:\inetpub\wwwroot\"; $physicalPath = $args[1] $servername = $env:COMPUTERNAME $sitePort = $args[2] $appPoolUsername = $args[3] $appPoolPassword = $args[4] $appPoolNETVersion = $args[5] #$appPoolNETVersion = "v4.0" #$appPoolPeriodicRestart = $args[6] #$appPoolPeriodicRestart = 100000 $appPoolPath = $("IIS:\AppPools\" + $appName) $sitePath = $("IIS:\Sites\" + $appName) $runscript = 1 # Variables - Stop # Check Parameter Input - Start if($appName -eq $null) { write-host "Error: App/Site Name, Argument is missing" $runscript = 0 } if($physicalPath -eq $null) { write-host "Error: Physical Path, Argument is missing" $runscript = 0 } if($sitePort -eq $null) { write-host "Error: Site Port, Argument is missing" $runscript = 0 } if($appPoolUsername -eq $null) { write-host "Error: App Pool Username, Argument is missing" $runscript = 0 } if($appPoolPassword -eq $null) { write-host "Error: App Pool Password, Argument is missing" $runscript = 0 } if($appPoolNETVersion -eq $null) { write-host "Error: App Pool .NET Framework Version, Argument is missing" $runscript = 0 } #if($appPoolPeriodicRestart -eq $null) { #write-host "Error: App Pool Periodic Restart, Argument is missing" #$runscript = 0 #} # Check Parameter Input - Stop # If appName was not passed show instructions if (!($runscript -eq 1)) { write-host "`nMissing Parameters" write-host "`n .\IIS-Create.ps1 <Site/App Name> <Site Root Path> <Site Port> <App Pool Username> <App Pool Password> <App Pool .NET Version>`n" } else { # Make sure the last character in the Physical Path is a \, if it isn't add a \ if(($physicalPath.EndsWith("\")) -ne "True") { write-host $physicalPath $physicalPath = $physicalPath + "\" write-host $physicalPath } $sitePhysicalPath = $($physicalPath + $appName) $currentdirectorypath = Split-Path (Get-Variable MyInvocation).Value.MyCommand.Path if((Test-Path $appPoolPath$appName) -eq 0 -and (Get-WebApplication -Name $appName) -eq $null) { # Create Directories - Start if ( ! (test-path -pathtype container $physicalPath)) { New-Item -ItemType directory -Path $physicalPath } if ( ! (test-path -pathtype container $physicalPath$appName)) { New-Item -ItemType directory -Path $physicalPath$appName } # Create Directories - Stop # Default Page Creation - Start # cd $sitePhysicalPath # Set-Content default.htm "DemoSite Default Page" .\DownloadFileExtract.ps1 http://www.kittell.net/downloads/ASPX_Site_Test.zip $sitePhysicalPath 1 $sitePhysicalPath Remove-Item $($sitePhysicalPath + "ASPX_Site_Test.zip") # Default Page Creation - Stop # Create Application Pool - Start #write-host $appName New-WebAppPool -Name $appName -Force; #Display Default AppPool Settings #get-ItemProperty -Path IIS:\AppPools\DemoSite.processModel | fl * $appPool = get-item $appPoolPath $appPool.processModel.username = $appPoolUsername $appPool.processModel.password = $appPoolPassword $appPool.processModel.identityType = 3 $appPool | set-item Set-ItemProperty -Path $appPoolPath managedRuntimeVersion $appPoolNETVersion #Set-ItemProperty -Path $appPoolPath -Name recycling.periodicRestart.requests -Value $appPoolPeriodicRestart $appPool.Stop(); $appPool.Start(); # Create Application Pool - Stop # Check Application Pool - Start if ((Get-WebAppPoolState -Name $appName).Value -ne "Started") { # Application Pool failed to start, throw error message and stop the script write-host "App pool $appName was created but did not start automatically." } # Check Application Pool - Stop else { # Application Pool started, continue with the script # Create New Site - Start $bindingInformation = $(":" + $sitePort +":"+$servername) # cd $appPoolPath New-Item $sitePath -bindings @{protocol="http";bindingInformation=$bindingInformation} -physicalPath $sitePhysicalPath # Create New Site - Stop # Check Web Site - Start if ((Get-WebsiteState -Name $appName).Value -ne "Started") { Write-Host "Website $appName was created but did not start automatically." } # Check Web Site - Stop # IIS Site(s) - Get Status Write-Host "IIS Web Sites" get-website | select name,id,state,physicalpath, @{n="Bindings"; e= { ($_.bindings | select -expa collection) -join ';' }} , @{n="LogFile";e={ $_.logfile | select -expa directory}}, @{n="attributes"; e={($_.attributes | % { $_.name + "=" + $_.value }) -join ';' }} # IIS Site(s) - Get Status #Assign Site to App Pool - Start New-WebApplication -Name $appName -ApplicationPool $appName -Site $appName -PhysicalPath $sitePhysicalPath; #Assign Site to App Pool - Stop Start $("http://" + $servername + ":" + $sitePort) cd $currentdirectorypath } } else { Write-Host "$appName already exists"; } }
Last Updated on November 17, 2015