init
This commit is contained in:
@@ -0,0 +1,297 @@
|
||||
#region Private variables
|
||||
|
||||
$loggingDirectory = "C:\Temp"
|
||||
$loggingFile = "Install.log"
|
||||
$logFile = Join-Path $loggingDirectory $loggingFile
|
||||
|
||||
#endregion
|
||||
|
||||
#region Public methods
|
||||
|
||||
function CheckCredentials
|
||||
{
|
||||
If (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
|
||||
[Security.Principal.WindowsBuiltInRole] "Administrator"))
|
||||
{
|
||||
Write-Warning "You do not have Administrator rights to run this script!`nPlease re-run this script as an Administrator!"
|
||||
return $false
|
||||
}
|
||||
|
||||
Write-Host "Done."
|
||||
return $true
|
||||
}
|
||||
|
||||
function EnableEmbeddedIISFeatures
|
||||
{
|
||||
cd $PSScriptRoot
|
||||
|
||||
$featureList = @("IIS-WebServerRole",
|
||||
"IIS-WebServer",
|
||||
"IIS-CommonHttpFeatures",
|
||||
"IIS-HttpErrors",
|
||||
"IIS-HttpRedirect",
|
||||
"IIS-ApplicationDevelopment",
|
||||
"IIS-NetFxExtensibility",
|
||||
"IIS-NetFxExtensibility45",
|
||||
"IIS-HealthAndDiagnostics",
|
||||
"IIS-HttpLogging",
|
||||
"IIS-LoggingLibraries",
|
||||
"IIS-RequestMonitor",
|
||||
"IIS-HttpTracing",
|
||||
"IIS-Security",
|
||||
"IIS-URLAuthorization",
|
||||
"IIS-RequestFiltering",
|
||||
"IIS-IPSecurity",
|
||||
"IIS-Performance",
|
||||
"IIS-HttpCompressionDynamic",
|
||||
"IIS-WebServerManagementTools",
|
||||
"IIS-ManagementScriptingTools",
|
||||
"IIS-IIS6ManagementCompatibility",
|
||||
"IIS-Metabase",
|
||||
"IIS-CertProvider",
|
||||
"IIS-WindowsAuthentication",
|
||||
"IIS-DigestAuthentication",
|
||||
"IIS-ClientCertificateMappingAuthentication",
|
||||
"IIS-IISCertificateMappingAuthentication",
|
||||
"IIS-StaticContent",
|
||||
"IIS-DefaultDocument",
|
||||
"IIS-DirectoryBrowsing",
|
||||
"IIS-WebSockets",
|
||||
"IIS-ApplicationInit",
|
||||
"IIS-ASPNET",
|
||||
"IIS-ASPNET45",
|
||||
"IIS-ASP",
|
||||
"IIS-CGI",
|
||||
"IIS-ISAPIExtensions",
|
||||
"IIS-ISAPIFilter",
|
||||
"IIS-ServerSideIncludes",
|
||||
"IIS-CustomLogging",
|
||||
"IIS-BasicAuthentication",
|
||||
"IIS-HttpCompressionStatic",
|
||||
"IIS-ManagementConsole",
|
||||
"IIS-ManagementService")
|
||||
|
||||
Enable-WindowsOptionalFeature -FeatureName $featureList -Online > $null
|
||||
|
||||
Write-Host "Done."
|
||||
}
|
||||
|
||||
function ScaffoldIIS($hostName, $hostIp, $iisApplication, $iisVirtualApplications)
|
||||
{
|
||||
SetHostsFile $hostName $hostIp
|
||||
|
||||
CreateApplicationPool $iisApplication
|
||||
|
||||
if($iisVirtualApplications -ne $null)
|
||||
{
|
||||
CreateApplicationPool $iisVirtualApplications
|
||||
}
|
||||
|
||||
CreateSite $iisApplication $iisVirtualApplications
|
||||
|
||||
GrantPermissionToApplicationPool $iisApplication
|
||||
|
||||
AddSslBindingToIdpAndAddAsTrustedCert $iisApplication $hostName
|
||||
|
||||
if($iisVirtualApplications -ne $null)
|
||||
{
|
||||
GrantPermissionToApplicationPool $iisVirtualApplications
|
||||
}
|
||||
|
||||
Write-Host "IIS scaffolding has been successfully completed!"
|
||||
}
|
||||
|
||||
function ResetIIS
|
||||
{
|
||||
& {iisreset} > $null
|
||||
Write-Host "Done."
|
||||
}
|
||||
|
||||
function ResetEnvironment
|
||||
{
|
||||
cd $PSScriptRoot
|
||||
Write-Host "Done."
|
||||
}
|
||||
|
||||
function StartLogging
|
||||
{
|
||||
ScaffoldLoggingContainer
|
||||
|
||||
try { Stop-Transcript } catch {}
|
||||
Start-Transcript -path $logFile -append
|
||||
}
|
||||
|
||||
function StopLogging
|
||||
{
|
||||
try { Stop-Transcript } catch {}
|
||||
}
|
||||
|
||||
#endregion Public methods
|
||||
|
||||
#region Private methods
|
||||
|
||||
function SetHostsFile($hostName, $ip)
|
||||
{
|
||||
$hostsPath = "$env:windir\System32\drivers\etc\hosts"
|
||||
$measure = Get-Content $hostsPath | Select-String $hostName | measure | select -Property Count
|
||||
|
||||
if($measure.Count -eq 0)
|
||||
{
|
||||
"`r`n" + $ip + "`t" + $hostName | Out-File -encoding ASCII -append $hostsPath
|
||||
Write-Host $hostsPath "Host file has been successfully updated!"
|
||||
}
|
||||
}
|
||||
|
||||
function CreateApplicationPool($iisApplication)
|
||||
{
|
||||
#navigate to the app pools root
|
||||
cd IIS:\AppPools\
|
||||
|
||||
foreach($iisApplicationPool in $iisApplication)
|
||||
{
|
||||
$iisApplicationPoolName = $iisApplicationPool.poolName
|
||||
|
||||
#check if the app pool exists
|
||||
if (!(Test-Path $iisApplicationPoolName -pathType container))
|
||||
{
|
||||
#create the app pool
|
||||
$appPool = New-Item $iisApplicationPoolName
|
||||
|
||||
foreach($iisApplicationPoolProperty in $iisApplicationPool.property)
|
||||
{
|
||||
$appPool | Set-ItemProperty -Name $iisApplicationPoolProperty.name -Value $iisApplicationPoolProperty.value
|
||||
}
|
||||
|
||||
Write-Host "$iisApplicationPoolName (application pool) has been successfully created!"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function GrantPermissionToApplicationPool($iisApplicationPoolName, $containerDirectoryPath)
|
||||
{
|
||||
foreach($iisApp in $iisApplication)
|
||||
{
|
||||
Write-Host "Grant RW directory level permission for" $iisApp.poolName "(" $iisApp.applicationPath ")"
|
||||
$fullApplicationPoolName = "IIS AppPool\" + $iisApp.poolName
|
||||
|
||||
GrantModifyPermissionToFolder $fullApplicationPoolName $iisApp.applicationPath "Modify"
|
||||
|
||||
Write-Host "Grant R directory level permission for IUSR" "(" $iisApp.applicationPath ")"
|
||||
GrantModifyPermissionToFolder "IUSR" $iisApp.applicationPath "Read"
|
||||
}
|
||||
}
|
||||
|
||||
function GrantModifyPermissionToFolder($userName, $path, $accessLevel)
|
||||
{
|
||||
$acl = Get-Acl $path
|
||||
$ar = New-Object System.Security.AccessControl.FileSystemAccessRule($userName, $accessLevel, "ContainerInherit,ObjectInherit", "None", "Allow")
|
||||
|
||||
$acl.SetAccessRule($ar)
|
||||
Set-Acl $path $acl
|
||||
}
|
||||
|
||||
function CreateSite($iisApplication, $iisVirtualApplication)
|
||||
{
|
||||
#navigate to the sites root
|
||||
cd IIS:\Sites\
|
||||
|
||||
$iisApplicationName
|
||||
|
||||
foreach($iisApp in $iisApplication)
|
||||
{
|
||||
$iisApplicationName = $iisAppName = $iisApp.name
|
||||
|
||||
#check if the site exists
|
||||
if (Test-Path $iisAppName -pathType container)
|
||||
{
|
||||
$targetApplication = "IIS:\Sites\$iisAppName"
|
||||
$previousSite = Get-Item $targetApplication
|
||||
$previousSiteLocation = $previousSite.physicalPath
|
||||
|
||||
Remove-Item $targetApplication -Recurse -Force > $null
|
||||
|
||||
Write-Host "Previous $iisAppName (site) has been successfully deleted! Physical location: $previousSiteLocation"
|
||||
}
|
||||
|
||||
#create the site
|
||||
$application = New-Item $iisAppName -bindings $iisApp.bindings -physicalPath $iisApp.applicationPath
|
||||
$application | Set-ItemProperty -Name "applicationPool" -Value $iisApp.poolName
|
||||
|
||||
$newSite = Get-Item "IIS:\Sites\$iisAppName"
|
||||
$newSiteLocation = $newSite.physicalPath
|
||||
|
||||
Write-Host "$iisAppName (site) has been successfully created! Physical location: $newSiteLocation"
|
||||
}
|
||||
|
||||
if($iisVirtualApplication -ne $null)
|
||||
{
|
||||
foreach($iisVirtualApp in $iisVirtualApplication)
|
||||
{
|
||||
$iisVirtualAppName = $iisVirtualApp.name
|
||||
|
||||
#create the virtual application
|
||||
New-Item "IIS:\Sites\$iisApplicationName\$iisVirtualAppName" -physicalPath $iisVirtualApp.applicationPath -type Application
|
||||
Set-ItemProperty "IIS:\Sites\$iisApplicationName\$iisVirtualAppName" -Name "applicationPool" -Value $iisVirtualApp.poolName
|
||||
|
||||
$newSite = Get-Item "IIS:\Sites\$iisApplicationName\$iisVirtualAppName"
|
||||
$newSiteLocation = $newSite.physicalPath
|
||||
|
||||
Write-Host "$iisVirtualAppName (virtual application) has been successfully created! Physical location: $newSiteLocation"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function ScaffoldLoggingContainer
|
||||
{
|
||||
if(!(Test-Path $loggingDirectory))
|
||||
{
|
||||
New-Item $loggingDirectory -ItemType Directory > $null
|
||||
}
|
||||
|
||||
if((Test-Path $logFile))
|
||||
{
|
||||
Remove-Item $logFile -Force > $null
|
||||
}
|
||||
|
||||
New-Item $logFile -ItemType File > $null
|
||||
}
|
||||
|
||||
function AddSslBindingToIdpAndAddAsTrustedCert($iisApplication, $dnsName)
|
||||
{
|
||||
#TODO: meglehet csinálni paraméterezve a binding-ot, nem kell a foreach
|
||||
|
||||
foreach($iisApp in $iisApplication)
|
||||
{
|
||||
$newCert = New-SelfSignedCertificate -DnsName $dnsName -CertStoreLocation cert:\LocalMachine\My
|
||||
|
||||
##New-WebBinding -Name $iisApp.name -HostHeader $dnsName -Port 443 -Protocol https
|
||||
|
||||
$binding = Get-WebBinding -Name $iisApp.name -Protocol "https"
|
||||
|
||||
$binding.AddSslCertificate($newCert.GetCertHashString(), "my")
|
||||
|
||||
$tempCert = Join-Path "c:\Temp" $dnsName
|
||||
|
||||
Export-Certificate -Cert $newCert -FilePath $tempCert -Type SST
|
||||
|
||||
Import-Certificate -CertStoreLocation cert:\CurrentUser\Root -FilePath $tempCert
|
||||
|
||||
Remove-Item $tempCert
|
||||
|
||||
Write-Host "Done."
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Private methods
|
||||
|
||||
#region Exports
|
||||
|
||||
export-modulemember -function CheckCredentials
|
||||
export-modulemember -function EnableEmbeddedIISFeatures
|
||||
export-modulemember -function ScaffoldIIS
|
||||
export-modulemember -function ResetIIS
|
||||
export-modulemember -function ResetEnvironment
|
||||
export-modulemember -function StartLogging
|
||||
export-modulemember -function StopLogging
|
||||
|
||||
#endregion Exports
|
||||
Reference in New Issue
Block a user