Windows PowerShell 对IIS网站以及应用程序池的新增和删除

添加网站以及对应应用程序池

# 检查当前是否以管理员身份运行
function Is-Administrator {
    $currentUser = [Security.Principal.WindowsIdentity]::GetCurrent()
    $principal = New-Object Security.Principal.WindowsPrincipal($currentUser)
    return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}

# 获取当前脚本的完整路径
$scriptPath = $MyInvocation.MyCommand.Path

# 如果不是管理员身份,则以管理员权限重新启动 PowerShell 并运行脚本
if (-not (Is-Administrator)) {
    # 以管理员身份重新启动 PowerShell 并运行脚本
    Start-Process -FilePath "powershell.exe" `
    -ArgumentList "-NoExit", "-ExecutionPolicy Bypass", "-File", "`"$scriptPath`"" `
    -Verb RunAs
    exit  # 退出当前脚本,避免在当前窗口执行以下操作
}

Import-Module WebAdministration

# 获取脚本路径作为网站目录
$rootPath = $PSScriptRoot
$siteName = "Cloud"
$port = 800

# 创建网站
if (-not (Test-Path "IIS:\Sites\$siteName")) {
    New-Website -Name $siteName -Port $port -PhysicalPath $rootPath -Force
    Write-Host "创建网站:$siteName"
} else {
    Write-Host "网站 $siteName 已存在"
}

# 创建应用程序池(如不存在)
$appPoolNames = @("API", "APP")
foreach ($appPoolName in $appPoolNames) {
    $appPoolPath = "IIS:\AppPools\$appPoolName"
    
    # 检查应用程序池是否存在
    if (-not (Test-Path $appPoolPath)) {
        # 如果应用程序池不存在,则创建
        New-WebAppPool -Name $appPoolName
        Set-ItemProperty IIS:\AppPools\$appPoolName managedRuntimeVersion ""  # 清空托管代码版本
        Write-Host "创建应用程序池:$appPoolName"
    } else {
        Write-Host "应用程序池已存在:$appPoolName"
    }
}

# Cloud 使用单独的 v4.0 应用程序池
$CloudAppPool = "Cloud"
if (-not (Test-Path "IIS:\AppPools\$CloudAppPool")) {
    # 创建 NSCloud 专用的应用程序池,使用 .NET Framework v4.0
    New-WebAppPool -Name $CloudAppPool
    Set-ItemProperty IIS:\AppPools\$CloudAppPool managedRuntimeVersion "v4.0"  # 设置为 v4.0
    Write-Host "创建 NSCloud 专用应用程序池:$CloudAppPool"
} else {
    Write-Host "Cloud 专用应用程序池已存在"
}

# 将目录转化为网站应用程序
$appPoolNames | ForEach-Object {
    $appPoolName = $_
    $appPath = "IIS:\Sites\$siteName\$appPoolName"
    $physicalPath = Join-Path $rootPath $appPoolName

    # 确保文件夹存在
    if (-not (Test-Path $physicalPath)) {
        New-Item -ItemType Directory -Path $physicalPath
        Write-Host "创建目录:$physicalPath"
    }

    # 确保应用程序已绑定到网站,并设置应用程序池
    New-WebApplication -Site $siteName -Name $appPoolName -PhysicalPath $physicalPath -ApplicationPool $appPoolName
    Write-Host "为网站 $siteName 创建或更新子应用程序:$appPoolName"
}

# 将 Cloud 网站的应用程序池设置为专用的 v4.0 应用程序池
Set-ItemProperty IIS:\Sites\$siteName applicationPool $CloudAppPool
Write-Host "将网站 $siteName 绑定到专用的 v4.0 应用程序池:$CloudAppPool"

Write-Host "所有应用程序池和应用程序已设置完成。"


删除网站以及对应应用程序池

# 检查当前是否以管理员身份运行
function Is-Administrator {
    $currentUser = [Security.Principal.WindowsIdentity]::GetCurrent()
    $principal = New-Object Security.Principal.WindowsPrincipal($currentUser)
    return $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
}

# 获取当前脚本的完整路径
$scriptPath = $MyInvocation.MyCommand.Path

# 如果不是管理员身份,则以管理员权限重新启动 PowerShell 并运行脚本
if (-not (Is-Administrator)) {
    # 以管理员身份重新启动 PowerShell 并运行脚本
    Start-Process -FilePath "powershell.exe" `
    -ArgumentList "-NoExit", "-ExecutionPolicy Bypass", "-File", "`"$scriptPath`"" `
    -Verb RunAs
    exit  # 退出当前脚本,避免在当前窗口执行以下操作
}

Import-Module WebAdministration

$siteName = "Cloud"
$appPoolNames = @("Cloud","API", "APP")

# 删除网站
if (Test-Path "IIS:\Sites\$siteName") {
    Remove-Website -Name $siteName
}

# 删除应用程序池
foreach ($appPoolName in $appPoolNames) {
    if (Test-Path "IIS:\AppPools\$appPoolName") {
        Remove-WebAppPool -Name $appPoolName
    }
}

Write-Host "所有应用程序池和应用程序已删除完成。"
posted @ 2025-04-09 18:26  HookDing  阅读(90)  评论(0)    收藏  举报