AzureCT/ServerSide/IISBuild.ps1 (83 lines of code) (raw):
# IIS Server Post Build Config Script
# To kick me off from a URL run the following:
# (new-object Net.WebClient).DownloadString("https://github.com/tracsman/AzureCT/raw/master/ServerSide/IISBuild.ps1") | Invoke-Expression
$GitHubBranch = "master"
$GitHUbRepo = "https://raw.githubusercontent.com/Azure/NetworkMonitoring/$GitHubBranch/AzureCT/ServerSide/"
# Must be run from an elevated PS prompt!
If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
Write-Warning "This script must be run As Administrator, please open a new PowerShell prompt using the Run As Administrator option and re-run this script."
Break}
# Turn On ICMPv4
Write-Host
Write-Host "Creating ICMP Rule in Windows Firewall" -ForegroundColor Cyan
New-NetFirewallRule -Name Allow_ICMPv4 -DisplayName "Allow ICMPv4" -Protocol ICMPv4 -Enabled True -Profile Any -Action Allow -ErrorAction SilentlyContinue
# Install IIS
Write-Host
Write-Host "Installing IIS and .Net 4.5, this can take some time (up to 15+ minutes)..." -ForegroundColor Cyan
add-windowsfeature Web-Server, Web-WebServer, Web-Common-Http, Web-Default-Doc, Web-Dir-Browsing, Web-Http-Errors, Web-Static-Content, Web-Health, Web-Http-Logging, Web-Performance, Web-Stat-Compression, Web-Security, Web-Filtering, Web-App-Dev, Web-ISAPI-Ext, Web-ISAPI-Filter, Web-Net-Ext, Web-Net-Ext45, Web-Asp-Net45, Web-Mgmt-Tools, Web-Mgmt-Console
# Create Web App Pages
# Create FileName Array
$FileName = @()
# Stuff Array with FileNames
$FileName += "AvailabilityDetail.xml"
$FileName += "AvailabilityHeader.xml"
$FileName += "AvailabilityTrace.xml"
$FileName += "ClearHistory.aspx"
$FileName += "DisplayAvailability.css"
$FileName += "DisplayAvailability.html"
$FileName += "DisplayAvailability.js"
$FileName += "jquery.js"
$FileName += "TemplateAvailabilityDetail.xml"
$FileName += "TemplateAvailabilityHeader.xml"
$FileName += "TemplateAvailabilityTrace.xml"
$FileName += "Upload.aspx"
$FileName += "Web.config"
$FileName += "WebTest.aspx"
# Loop through the array and pull files from GitHub to the Server
Write-Host
Write-Host "Pulling Web pages from GitHub" -ForegroundColor Cyan
Write-Host "Coping files from the 'ServerSide' directory on GitHub to the local 'c:\inetpub\wwwroot\' directory."
$Issues = $false
$i=0
$FileName | ForEach{
Try {
$webClient = new-object System.Net.WebClient
$webClient.DownloadFile($GitHUbRepo + $FileName[$i], "c:\inetpub\wwwroot\" + $FileName[$i] )
Write-Host "Copied successfully:" $FileName[$i]
}
Catch {
$Issues = $true
Write-Warning "Download Error:" $FileName[$i] "was not downloaded. Copy this file manually, or rerun this script."}
$i++
}
# Update File Permmisions to Allow writing access on XML files
# Create Array
$FileName = @()
# Stuff Array with XML files
$FileName += "C:\inetpub\wwwroot\AvailabilityDetail.xml"
$FileName += "C:\inetpub\wwwroot\AvailabilityHeader.xml"
$FileName += "C:\inetpub\wwwroot\AvailabilityTrace.xml"
$FileName += "C:\inetpub\wwwroot\TemplateAvailabilityDetail.xml"
$FileName += "C:\inetpub\wwwroot\TemplateAvailabilityHeader.xml"
$FileName += "C:\inetpub\wwwroot\TemplateAvailabilityTrace.xml"
# Loop through array and set file permissions
$i=0
$ar = New-Object System.Security.AccessControl.FileSystemAccessRule("IIS_IUSRS", "FullControl", "Allow")
$FileName | ForEach {
Try {
$acl = Get-Acl $FileName[$i]
$acl.SetAccessRule($ar)
Set-Acl $FileName[$i] $Acl}
Catch {
$Issues = $true
Write-Warning "An error occured applying write ACLs to the $FileName[$i] file."
Write-Warning "Rerun this command or you can manualy apply 'Full Control' permissions to the IIS_IUSRS account on the xml file in the 'c:\inetpub\www\' directory."}
$i++
}
# Say our good-byes and close up shop
Write-Host
If ($Issues) {
Write-Warning "Issues encountered, please see statement(s) above in red for details!"
}
Else {Write-Host "Web App Creation Successfull!" -ForegroundColor Green}
Write-Host