Powershell添加重复的IIS应用程序池

时间:2019-07-07 07:29:35

标签: powershell iis

我具有以下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 
}

2 个答案:

答案 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

enter image description here