使用 PowerShell 自动化创建和配置 IIS 应用程序池(附完整脚本)

在部署 ASP.NET Web 项目时,正确配置 IIS 应用程序池(Application Pool)是确保服务稳定运行的重要一环。本文将介绍如何使用 PowerShell 脚本,在 Windows Server 上自动化创建并配置一个应用程序池,包括设置 .NET 版本、集成模式、定时回收计划等。

场景背景

假设我们要部署一个站点 store.fictivesite.com,其物理路径为:

D:\Websites\store.fictivesite.com\wwwroot

为了确保网站在高负载或资源泄露时能自动恢复,我们希望配置以下内容:

  • 使用 .NET CLR v4.0

  • 使用 集成模式(Integrated Pipeline)

  • 应用程序池自动启动并保持运行

  • 每天在多个时间点进行回收:02:0008:0012:0019:30

  • 请求队列最大长度为 1000

  • 最大并发进程数为 1

  • 禁用 CPU 限制,但启用快速失败保护


1. PowerShell 脚本准备

以下是完整的 PowerShell 脚本,可直接运行,自动完成应用程序池的创建与配置:

Import-Module WebAdministration

# 定义应用程序池名称
$appPool = "store.fictivesite.com"

# 如果已存在则先删除
if (Test-Path IIS:\AppPools\$appPool) {
    Remove-WebAppPool -Name $appPool
}

# 创建新的应用程序池
New-WebAppPool -Name $appPool

# 基本设置
Set-ItemProperty IIS:\AppPools\$appPool -Name managedRuntimeVersion -Value "v4.0"
Set-ItemProperty IIS:\AppPools\$appPool -Name managedPipelineMode -Value "Integrated"
Set-ItemProperty IIS:\AppPools\$appPool -Name autoStart -Value $true
Set-ItemProperty IIS:\AppPools\$appPool -Name startMode -Value "AlwaysRunning"
Set-ItemProperty IIS:\AppPools\$appPool -Name queueLength -Value 1000
Set-ItemProperty IIS:\AppPools\$appPool -Name "processModel.maxProcesses" -Value 1
Set-ItemProperty IIS:\AppPools\$appPool -Name "failure.rapidFailProtectionInterval" -Value "00:05:00"
Set-ItemProperty IIS:\AppPools\$appPool -Name "cpu.limit" -Value 0
Set-ItemProperty IIS:\AppPools\$appPool -Name "cpu.action" -Value "NoAction"

# 添加 periodicRestart schedule(定时回收时间)
$times = @("02:00:00", "08:00:00", "12:00:00", "19:30:00")
foreach ($time in $times) {
    Add-WebConfigurationProperty `
        -pspath "MACHINE/WEBROOT/APPHOST" `
        -filter "system.applicationHost/applicationPools/add[@name='$appPool']/recycling/periodicRestart/schedule" `
        -name "." -value @{value=$time}
}

Write-Host "应用程序池 $appPool 已创建并配置完成。" -ForegroundColor Green

执行步骤:

  1. 保存脚本为 Create-AppPool.ps1

  2. 以管理员身份打开 PowerShell

  3. 执行:

    Set-ExecutionPolicy RemoteSigned -Scope Process
    .\Create-AppPool.ps1
    

2. 执行结果示例

当脚本执行成功后,PowerShell 输出如下:

Name                     State        Applications
----                     -----        ------------
store.fictivesite.com    Started
应用程序池 store.fictivesite.com 已创建并配置完成。

此时,我们的应用程序池已经成功启用,并具备了指定的配置参数。


3. 常见错误及排查

在设置 recycling/periodicRestart/schedule 属性时,部分用户可能会遇到如下错误:

Add-WebConfigurationProperty : 没有为路径 IIS:\AppPools\xxx 处的对象定义配置。

这是因为 AppPools:\xxx 路径无法访问 applicationHost.config 中的深层配置。应使用以下方式:

-pspath "MACHINE/WEBROOT/APPHOST"

才能正确添加定时回收的时间点。


结语

通过 PowerShell 自动化配置 IIS 应用程序池,不仅提升了部署效率,也避免了 GUI 操作的遗漏与不一致性。你可以将本脚本作为标准化流程的一部分,重复用于不同的站点部署。

如需进一步自动化网站创建(如 New-Website、站点绑定等),也可拓展脚本集成。

No comments

公司简介

 

自1996年以来,公司一直专注于域名注册、虚拟主机、服务器托管、网站建设、电子商务等互联网服务,不断践行"提供企业级解决方案,奉献个性化服务支持"的理念。作为戴尔"授权解决方案提供商",同时提供与公司服务相关联的硬件产品解决方案。
备案号: 豫ICP备05004936号-1

联系方式

地址:河南省郑州市经五路2号

电话:0371-63520088

QQ:76257322

网站:800188.com

电邮:该邮件地址已受到反垃圾邮件插件保护。要显示它需要在浏览器中启用 JavaScript。