153 lines
5.0 KiB
PowerShell
153 lines
5.0 KiB
PowerShell
|
|
trap {
|
|
&$TrapHandler
|
|
}
|
|
|
|
|
|
Function Register-WebApp {
|
|
<#
|
|
.LINKS
|
|
|
|
http://www.iis.net/learn/manage/powershell/powershell-snap-in-creating-web-sites-web-applications-virtual-directories-and-application-pools
|
|
#>
|
|
param (
|
|
[String] $Source,
|
|
[String] $Path = "C:\inetpub\wwwroot",
|
|
[String] $Name = "",
|
|
[String] $Username = "",
|
|
[String] $Password = ""
|
|
)
|
|
begin {
|
|
Show-InvocationInfo $MyInvocation
|
|
}
|
|
end {
|
|
Show-InvocationInfo $MyInvocation -End
|
|
}
|
|
process {
|
|
trap {
|
|
&$TrapHandler
|
|
}
|
|
|
|
Import-Module WebAdministration
|
|
|
|
if ($Name -eq "") {
|
|
$Name = @([IO.Path]::GetDirectoryName($Source) -split '\\')[-1]
|
|
if ($Name -eq "wwwroot") {
|
|
throw("Application pool name couldn't be 'wwwroot'.")
|
|
}
|
|
}
|
|
else {
|
|
$Path = [IO.Path]::Combine($Path, $Name)
|
|
}
|
|
|
|
$null = Copy-Item -Path $Source -Destination $Path -Recurse -Force
|
|
|
|
# Create new application pool
|
|
$AppPool = New-WebAppPool -Name $Name -Force
|
|
#$AppPool = Get-Item "IIS:\AppPools\$Name"
|
|
$AppPool.managedRuntimeVersion = 'v4.0'
|
|
$AppPool.managedPipelineMode = 'Classic'
|
|
$AppPool.processModel.loadUserProfile = $true
|
|
$AppPool.processModel.logonType = 'LogonBatch'
|
|
|
|
#Set Identity type
|
|
if ($Username -eq "") {
|
|
$AppPool.processModel.identityType = 'ApplicationPoolIdentity'
|
|
}
|
|
else {
|
|
$AppPool.processModel.identityType = 'SpecificUser'
|
|
$AppPool.processModel.userName = $Username
|
|
$AppPool.processModel.password = $Password
|
|
$null = $AppPool | Set-Item
|
|
}
|
|
|
|
|
|
# Create Website
|
|
$WebSite = New-WebSite -Name $Name -Port 80 -HostHeader $Name -PhysicalPath $Path -Force
|
|
#$WebSite = Get-Item "IIS:\Sites\$Name"
|
|
|
|
# Set the Application Pool
|
|
$null = Set-ItemProperty "IIS:\Sites\$Name" 'ApplicationPool' $Name
|
|
|
|
#Turn on Directory Browsing
|
|
#Set-WebConfigurationProperty -Filter '/system.webServer/directoryBrowse' -Name 'enabled' -Value $true -PSPath "IIS:\Sites\$Name"
|
|
|
|
# Update Authentication
|
|
#Set-WebConfigurationProperty -Filter '/system.WebServer/security/authentication/AnonymousAuthentication' -Name 'enabled' -Value $true -Location $name
|
|
#Set-WebConfigurationProperty -Filter '/system.WebServer/security/authentication/windowsAuthentication' -Name 'enabled' -Value $false -Location $Name
|
|
#Set-WebConfigurationProperty -Filter '/system.WebServer/security/authentication/basicAuthentication' -Name 'enabled' -Value $false -Location $Name
|
|
|
|
$null = $WebSite.Start()
|
|
|
|
$null = Add-Content -Path "C:\Windows\System32\Drivers\etc\hosts" -Value "127.0.0.1 $Name"
|
|
|
|
# Remove standard IIS 'Hello World' application from localhost:80
|
|
$null = Get-WebBinding 'Default Web Site' | Remove-WebBinding
|
|
# Add new application on http://localhost:80
|
|
$null = New-WebBinding -Name "$Name" -IP "*" -Port 80 -Protocol http
|
|
}
|
|
}
|
|
|
|
|
|
|
|
Function Deploy-WebAppFromGit {
|
|
param (
|
|
[String] $URL,
|
|
[String] $TempPath = [IO.Path]::Combine([IO.Path]::GetTempPath(), [IO.Path]::GetRandomFileName()),
|
|
[String] $OutputPath = [IO.Path]::Combine([IO.Path]::GetTempPath(), [IO.Path]::GetRandomFileName())
|
|
)
|
|
begin {
|
|
Show-InvocationInfo $MyInvocation
|
|
}
|
|
end {
|
|
Show-InvocationInfo $MyInvocation -End
|
|
}
|
|
process {
|
|
trap {
|
|
&$TrapHandler
|
|
}
|
|
|
|
Write-Log "TempPath = '$TempPath'"
|
|
Write-Log "OutputPath = '$OutputPath'"
|
|
|
|
|
|
# Fetch web application
|
|
#----------------------
|
|
Write-Log "Fetching sources from Git ..."
|
|
|
|
$null = New-Item -Path $TempPath -ItemType Container
|
|
$null = Exec -FilePath 'git.exe' -ArgumentList @('clone', $URL) -WorkingDir $TempPath -RedirectStreams
|
|
|
|
$Path = @(Get-ChildItem $TempPath)[0].FullName
|
|
#----------------------
|
|
|
|
|
|
# Build web application
|
|
#----------------------
|
|
Write-Log "Building sources ..."
|
|
|
|
$msbuild = "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe"
|
|
|
|
$null = New-Item -Path $OutputPath -ItemType Container
|
|
|
|
$SlnFiles = @(Get-ChildItem -Path $Path -Filter *.sln -Recurse)
|
|
|
|
# Start new processs with additional env variables:
|
|
#* VisualStudioVersion = "10.0"
|
|
#* EnableNuGetPackageRestore = "true"
|
|
$null = Exec -FilePath $msbuild `
|
|
-ArgumentList @($SlnFiles[0].FullName, "/p:OutputPath=$OutputPath") `
|
|
-Environment @{'VisualStudioVersion' = '10.0'; 'EnableNuGetPackageRestore' = 'true'} `
|
|
-RedirectStreams
|
|
|
|
$AppFolder = @(Get-ChildItem ([IO.Path]::Combine($OutputPath, '_PublishedWebsites')))[0]
|
|
#----------------------
|
|
|
|
|
|
# Install web application
|
|
#------------------------
|
|
$null = Register-WebApp -Source $AppFolder.FullName -Name $AppFolder.Name
|
|
#------------------------
|
|
}
|
|
}
|