<#
.SYNOPSIS
Create and IIS Site
.DESCRIPTION
- This script creates and IIS based on the user input
- The script takes back up of the existing IIS configuration
Restores back to the the backed up IIS Configuration if something goes wrong
- This script is meant for education/demonstration purpose only and not meant for production use
- This script plays by the user inputs, you could take the inputs as aruguments. For instance,
#$siteName = Read-Host 'What is the name of your site'
could be
#$siteName = $args[0]
You could invoke the script as InstallIISSite.ps1 [WebsiteName] [AppPoolName] [Port] [Path] ([domain\user] [password])
.Note
- This scripts requires admin priviliges!
#>
# Add 'WebAdministration' modules to the current session.
# The modules must be installed on the local computer or a remote computer
Import-Module WebAdministration
#Suspends the activity in a script or session for the specified period of time in secods
Start-Sleep 2
# Get the user inputs for SiteName, AppPool, Port, Path for the site, user and password
$siteName = Read-Host 'What is the name of your site?'
$appPoolName = Read-Host 'What is the name of the application pool?'
$port = Read-Host 'Specify the port number'
$path = Read-Host 'Choose the path for your website'
$user = Read-Host 'Specify user in the followng fashion domain\username'
$password = Read-Host 'Enter password' -AsSecureString
<# Or you can have the following
$siteName = $args[0]
$appPoolName = $args[1]
$port = $args[2]
$path = $args[3]
$user = $args[4]
$password = $args[5]
You may invoke the script as
InstallIISSite.ps1 [WebsiteName] [AppPoolName] [Port] [Path] ([domain\user] [password])
#>
#Backup the IIS Configuration
#Create the name for back up folder
$backupName = "$(Get-date -format "yyyyMMdd-HHmmss")-$siteName"
#"Backing up IIS config to backup named $backupName"
# Backup will be created at C:\Windows\System32\inetsrv\backup
$backup = Backup-WebConfiguration $backupName
try {
# Delete the website & app pool if already existed
if (Test-Path "IIS:\Sites\$siteName") {
"Removing existing website $siteName"
Remove-Website -Name $siteName -Confirm
}
if (Test-Path "IIS:\AppPools\$appPoolName") {
"Removing existing AppPool $appPoolName"
Remove-WebAppPool -Name $appPoolName -Confirm
}
#Remove sites using the same port
foreach($site in Get-ChildItem IIS:\Sites) {
if( $site.Bindings.Collection.bindingInformation -eq ("*:" + $port + ":")){
"Warning: Found an existing site '$($site.Name)' already using port $port. Removing it..."
Remove-Website -Name $site.Name -Confirm
"Website $($site.Name) removed"
}
}
"Create an appPool named $appPoolName with v4.0 framework"
$pool = New-WebAppPool $appPoolName
$pool.managedRuntimeVersion = "v4.0"
if ($user -ne $null -AND $password -ne $null) {
"Setting Application Pool to run under the $user"
$pool.processmodel.identityType = 3
$pool.processmodel.username = [string] $user
$pool.processmodel.password = [string] $password
}
else
{
#If no user name is not specified, set the ID as NetworkService
$pool.processModel.identityType = 2
}
$pool | Set-Item
if ((Get-WebAppPoolState -Name $appPoolName).Value -ne "Started") {
throw "Application pool $appPoolName was created but did not start!"
}
"Create a website $siteName pointing at $path and create with port $port"
$website = New-Website -Name $siteName -PhysicalPath $path -ApplicationPool $appPoolName -Port $port
if ((Get-WebsiteState -Name $siteName).Value -ne "Started") {
throw "Website $siteName was created but did not start!"
}
"Website and Application Pool was created and started successfully"
}
catch
{
"Oops something went wrong! Rolling back web server to its initial state. Please wait..."
Start-Sleep 3
Restore-WebConfiguration $backupName
"IIS Restore complete."
throw
}
Like this:
Like Loading...
Related