使用powershell创建应用池时,将“立即启动应用程序池”设置为true并设置用户名密码

yx2lnoni  于 2023-04-30  发布在  Shell
关注(0)|答案(2)|浏览(133)

我正在通过Power Shell脚本创建应用程序池。
1.即使在环顾四周后,我也找不到如何将“立即启动应用程序池”设置为true。我该怎么做?
1.此外,如果提供了userName/password,那么我希望设置它,否则它应该是Application Pool Identity。我做的对吗?
下面是函数

Function Create-AppPools($appPoolName, $appPoolDotNetVersion, $managedPipelineMode, $startMode, $userName, $password) {
    if(!$appPoolName){
        return;
    }

    Write-Host " "

    #navigate to the app pools root
    cd IIS:\AppPools\

    #check if the app pool exists
    if (!(Test-Path $appPoolName -pathType container))
    {
        Write-Host "`t Creating AppPool: " + $appPoolName
        #create the app pool
        $appPool = New-Item $appPoolName
        if($appPoolDotNetVersion){
            $appPool | Set-ItemProperty -Name "managedRuntimeVersion" -Value $appPoolDotNetVersion
        }
        if(@managedPipelineMode){
            $appPool | Set-ItemProperty -Name "managedPipelineMode" -Value $managedPipelineMode
        }
        if($startMode){
            $appPool | Set-ItemProperty -Name "startMode" -Value $startMode
        }
        if($userName -and $password){
            $apppool | Set-ItemProperty -Name processmodel -value @{userName = $userName;password=$password;identitytype=3}
        }
        else{
            $apppool | Set-ItemProperty -Name "ProcessModel.IdentityType" -value  3
        }
        Write-Host "`t`t AppPool: " + $appPoolName + " created successfully" -ForegroundColor Green
    }
    else{
        Write-Host "`t AppPool " + $appPoolName + " already exists" -ForegroundColor Blue
    }
}

更新1:在我得到了我的问题回答后,检查github的示例脚本。

uajslkp6

uajslkp61#

您在第四个if()中有一个打印错误。
除此之外,您的代码按预期工作。

  • 它会立即启动应用程序池。这可以通过CLI和IIS管理GUI进行验证。
  • 如果用户/密码参数正确,即用户存在且密码准确,则池的标识将设置为这些参数。这可以在IIS管理GUI中进行验证。

我建议通过#Requires语句指定代码所依赖的模块。

#Requires -RunAsAdministrator
#Requires -Modules WebAdministration

Function Create-AppPools(
    $appPoolName = "TestPool2", 
    $appPoolDotNetVersion = "v4.0", 
    $managedPipelineMode = "Integrated", 
    $startMode = "OnDemand", 
    $userName, 
    $password
) {
    if (!$appPoolName) {
        return;
    }

    Write-Host " "

    #navigate to the app pools root
    cd IIS:\AppPools\

    #check if the app pool exists
    if (!(Test-Path $appPoolName -pathType container)) {
        Write-Host "`t Creating AppPool: " + $appPoolName
        #create the app pool
        $appPool = New-Item $appPoolName
        if ($appPoolDotNetVersion) {
            $appPool | Set-ItemProperty -Name "managedRuntimeVersion" -Value $appPoolDotNetVersion
        }
        if ($managedPipelineMode) {
            $appPool | Set-ItemProperty -Name "managedPipelineMode" -Value $managedPipelineMode
        }
        if ($startMode) {
            $appPool | Set-ItemProperty -Name "startMode" -Value $startMode
        }
        if ($userName -and $password) {
            $apppool | Set-ItemProperty -Name processmodel -value @{userName = $userName; password = $password; identitytype = 3 }
        }
        else {
            $apppool | Set-ItemProperty -Name "ProcessModel.IdentityType" -value  3
        }
        Write-Host "`t`t AppPool: " + $appPoolName + " created successfully" -ForegroundColor Green
    }
    else {
        Write-Host "`t AppPool " + $appPoolName + " already exists" -ForegroundColor Blue
    }
}

Create-AppPools
9udxz4iz

9udxz4iz2#

公认的答案并没有完全解决标题问题:
如何将AppPool复选框设置为“立即启动应用程序池”?“
如本文所述:https://serverfault.com/questions/828200/difference-between-start-application-pool-immediately-and-start-mode-alwaysrun,“基本设置”上的“立即启动应用程序池”复选框与“高级设置”中的“启动模式”设置完全无关。IIS似乎将该复选框称为AppPool的autoStart设置。
您提供的脚本主动设置StartMode,但将autoStart保留为默认值。碰巧New-WebAppPoolNew-Item(在IIS驱动器中调用时)的默认值都是autoStart = "true",所以它恰好是您最初想要的。:)
但是如果你想将它设置为false,或者有一个脚本在一个状态未知的现有应用池上主动设置该值,那么你可以这样做:

IIS:\> $newAppPool = New-WebAppPool -Name "NewAppPool"
IIS:\> $newAppPool.autoStart = "false"
IIS:\> $newAppPool | Set-Item
IIS:\> # ... later ....
IIS:\> cd IIS:/AppPools
IIS:\> $appPoolIJustCreated = Get-Item "NewAppPool"
IIS:\> $appPoolIJustCreated.autoStart = "true"
IIS:\> $appPoolIJustCreated | Set-Item
  • 警告:当在cmd行上创建AppPool时,IIS在其旁边打开。您必须刷新树的节点才能看到新的池。..而不是“ApplicationPools”节点。* 文件:
  • 默认值为true。
  • 如何在创建过程中设置值。
  • How to set the value on an existing Pool

相关问题