applications/clouddemo/net4/deployment.ps1 (109 lines of code) (raw):

# # Copyright 2020 Google LLC # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # # # This file contains a collection of functions for automating # common deployment tasks. # #Requires -RunAsAdministrator #Requires -version 4 Set-StrictMode -Version Latest $ErrorActionPreference = "stop" $_DefaultWebRoot = "c:\inetpub\wwwroot" <#----------------------------------------------------------------------------- # .SYNOPSIS # Install IIS and dependencies requires to run ASP.NET 4.5 # web applications. # #> function Install-Iis() { [CmdletBinding()] Param() $WindowsFeatures = @( "Web-Server", "NET-FRAMEWORK-45-Core", "NET-FRAMEWORK-45-ASPNET", "Web-HTTP-Logging", "Web-NET-Ext45", "Web-ASP-Net45" ) Add-WindowsFeature $WindowsFeatures } <#----------------------------------------------------------------------------- # .SYNOPSIS # Extract a WebDeploy (.zip) package to a target directory, stripping # intermediate directories. # # .PARAMETER DeploymentPackage # Path to the package (.zip) file. # # .PARAMETER TargetPath # Path to extract to, typically the web root. #> function Install-WebDeployPackage { [CmdletBinding()] Param( [Parameter(Mandatory=$True)][string] $DeploymentPackage, [Parameter(Mandatory=$False)][string] $TargetPath = $_DefaultWebRoot ) # # WebDeploy zip files contains a deeply nested directory structure. # Extract Zip to a temporary folder first to strip unnecessary folders. # Remove-Item -Recurse -Force -ErrorAction Ignore $env:TEMP\app Remove-Item -Recurse -Force $TargetPath\* New-Item -ItemType directory -Force $TargetPath | Out-Null $TempDir = New-Item -ItemType directory -Force -Path $env:TEMP\app Add-Type -AssemblyName System.IO.Compression.FileSystem [System.IO.Compression.ZipFile]::ExtractToDirectory($DeploymentPackage, $TempDir.FullName) $PackageTmpPath = (dir -recurse "$env:TEMP\app\**\PackageTmp" | % { $_.FullName }) Move-Item -Path "$PackageTmpPath/*" -Destination $TargetPath -Force } <#----------------------------------------------------------------------------- # .SYNOPSIS # Create a web application and pool in IIS. # # .PARAMETER AppName # Name of the web application. # # .PARAMETER TargetPath # Path on disk where the application files reside. #> function Register-WebApplication { [CmdletBinding()] Param( [Parameter(Mandatory=$True)][string] $AppName, [Parameter(Mandatory=$False)][string] $TargetPath = $_DefaultWebRoot ) # # Configure IIS web application pool and application # Import-Module WebAdministration if (-not (Test-Path IIS:\AppPools\$AppName)) { New-WebAppPool -Force $AppName New-WebApplication -Name $AppName -Site 'Default Web Site' -PhysicalPath $TargetPath -ApplicationPool $AppName } Set-ItemProperty "IIS:\AppPools\$AppName" "managedRuntimeVersion" "v4.0" # # Grant read/execute access to the application pool user. # & icacls $TargetPath /T /Q /C /reset & icacls $TargetPath /grant "IIS AppPool\${AppName}:(OI)(CI)(RX)" }