我具有以下Powershell脚本,用于在IIS中创建应用程序池和网站。该脚本是我第一次运行时添加的应用程序池(当该应用程序池不存在时),但是当我第二次运行该脚本时,尽管该应用程序池存在,但脚本找不到它并尝试再次创建它。导致异常!
$WebsiteName="search-api"
$AppPoolName="search-api"
$Runtime="" # Empty = Not Managed
$Port = 3050
$PhysicalPath="C:\Applications\SearchApi"
import-module WebAdministration
clear
New-Item -Path $PhysicalPath -Force
$AppPool = Get-IISAppPool -Name $AppPoolName
If ($AppPool.Length -eq 0)
{
$AppPool = New-WebAppPool -Name $AppPoolName -Force
$appPool | Set-ItemProperty -Name "managedRuntimeVersion" -Value $Runtime
}
$TheWebSite = Get-Website -Name $WebsiteName
If ($TheWebSite -eq $null)
{
New-Website -Name $WebsiteName -Port $Port -IPAddress "*" -ApplicationPool $AppPoolName -PhysicalPath $PhysicalPath -Force
}
答案 0 :(得分:0)
第一个:避免 PropertyNotFoundException :
If ( $AppPool.Length -eq 0 ) { }
在此对象上找不到属性“长度”。验证该属性是否存在。
改为使用If ( $null -eq $AppPool ) { }
。
第二:阅读AdminOfThings的 Odd issue when using Get-IISAppPool and creating a new app pool in the same session '答案。
要么应用Reset-IISServerManager
(可能需要确认),
或者使用
代替Get-IISAppPool -Name $AppPoolName
Get-ChildItem IIS:\AppPools | Where-Object Name -eq $AppPoolName
第三届:New-WebSite
docs说说-PhysicalPath
参数:
指定新站点的物理路径。指定的文件夹 必须已经存在。
使用New-Item -Path $PhysicalPath -Force -ItemType Directory
答案 1 :(得分:0)
您可以尝试使用以下脚本在iis中创建网站:
Import-Module WebAdministration
$iisAppPoolName = "my-test-app"
$iisAppPoolDotNetVersion = "v4.0"
$iisAppName = "mytest"
$directoryPath = "C:\s2"
#navigate to the app pools root
cd IIS:\AppPools\
#check if the app pool exists
if (!(Test-Path $iisAppPoolName -pathType container))
{
#create the app pool
$appPool = New-Item $iisAppPoolName
$appPool | Set-ItemProperty -Name "managedRuntimeVersion" -Value $iisAppPoolDotNetVersion
}
#navigate to the root of the site
cd IIS:\Sites\
#check if the site exists
if (Test-Path $iisAppName -pathType container)
{
return
}
#create the site
$iisApp = New-Item $iisAppName -bindings @{protocol="http";bindingInformation=":87:"} -physicalPath $directoryPath
$iisApp | Set-ItemProperty -Name "applicationPool" -Value $iisAppPoolName