使用PowerShell创建AppPool不会设置AppPool标识

时间:2013-02-14 21:05:10

标签: windows iis powershell application-pool

我正在尝试使用PowerShell在IIS中创建应用程序池。搜索完网络后,我创建了以下测试脚本:

Import-Module WebAdministration

$siteName = "TestAppPool"
$userAccountName = "Domain\UserName"
$userAccountPassword = "MyPassword"

if(!(Test-Path ("IIS:\AppPools\" + $siteName)))
{
     $appPool = New-Item ("IIS:\AppPools\" + $siteName)

     #Display Default AppPool Settings
     "AppPool = " + $appPool
     "UserName = " + $appPool.processModel.userName
     "Password = " + $appPool.processModel.password
     "Runtime = " + $appPool.managedRuntimeVersion

     $appPool.processModel.userName = $userAccountName
     $appPool.processModel.password = $userAccountPassword
     $appPool.managedRuntimeVersion = "v4.0"
     $appPool | Set-Item

     #Display Updated AppPool Settings
     "AppPool = " +$appPool
     "UserName = " + $appPool.processModel.userName
     "Password = " + $appPool.processModel.password
     "Runtime = " + $appPool.managedRuntimeVersion
}

当我运行脚本时,用户名和密码不会更新为我设置的值。

以下是两个打印块的结果

#Display Default AppPool Settings
AppPool = Microsoft.IIs.PowerShell.Framework.ConfigurationElement
UserName = 
Password = 
Runtime = v2.0

#Display Updated AppPool Settings
AppPool = Microsoft.IIs.PowerShell.Framework.ConfigurationElement
UserName = 
Password = 
Runtime = v2.0

在IIS中,应用程序池显示.Net Framework已更新,但Identity仍设置为ApplicationPoolIdentity。它应该是Domain \ UserName。

enter image description here

我是该计算机的管理员,我在管理员模式下运行PowerShell。关于我可能缺少什么想法才能让它发挥作用?

5 个答案:

答案 0 :(得分:25)

您需要更改流程模型标识类型以接受用户帐户而不是默认的ApplicationPoolIdentity,这可以按如下方式完成:

Set-ItemProperty -Path IIS:\AppPools\TestAppPool -Name processmodel.identityType -Value 3
Set-ItemProperty -Path IIS:\AppPools\TestAppPool -Name processmodel.username -Value Domain\UserName
Set-ItemProperty -Path IIS:\AppPools\TestAppPool -Name processmodel.password -Value MyPassword

我希望这会有所帮助。

答案 1 :(得分:6)

我需要将appPool设置为NetworkService并且对于其他需要执行此操作的人,我遇到了这个问题,这里是IIS 7.5将appPool设置为NetworkService的语法

$pool = get-item("IIS:\AppPools\YOURAPPPOOLNAME");
$pool | Set-ItemProperty -Name "ProcessModel.IdentityType" -Value 2

注意:在IIS 7.5中,NetworkService已从值3切换为值2.

有关Process Model的更多信息,请访问:http://www.iis.net/configreference/system.applicationhost/applicationpools/add/processmodel

答案 2 :(得分:2)

以上从来没有对我有用,这样做了:

import-module webadministration
$pool = Get-Item "IIS:\AppPools\apppoolname"
$pool.processmodel.identityType = 3
$pool.processmodel.username  = "username"
$pool.processmodel.password = "password"
$pool | set-item

答案 3 :(得分:0)

我在设置身份方面遇到了类似的问题。最后,我查看了将密码设置为:

Get-ItemProperty $appPool -name "processmodel.password"

只看到一个部分密码。事实证明我使用双引号作为密码字符串参数,密码以' $'开头。这导致它被解析为变量。

我将双引号更改为单引号并且有效。

答案 4 :(得分:0)

在我的环境中,这些答案对我不起作用。我正在尝试使用MSA作为我的应用程序池的标识。我可以在控制台中运行所有命令(@ musaab-al-okaidi的答案)而没有任何错误,但经过进一步检查,没有用户名与应用程序池关联。

我最终直接修改applicationHost.config文件(先备份!)为应用池添加正确的标识。

对于那些不知道的人,可以在以下位置找到applicationHost.config:c:\Windows32\inetsrv\config

applicationHost.config文件中,查找您的应用池条目,并添加“用户名”属性,如下所示:

<system.applicationHost>
    <applicationPools>
        <add name="someAppPool" autoStart="true" managedRuntimeVersion="4.0" startMode="AlwaysRunning">
            <processModel identityType="SpecificUser" userName="domain\username$" idleTimeout="00:00:00" />
        </add>
    </applicationPools>
</system.applicationHost>

您也可以以类似的方式设置密码(因为我使用的是MSA,因此无需在此处设置密码,因为MSA在AD中是“托管”并安装在IIS框中)。

我也停止/启动了IIS服务器,只是为了确保加载了新的配置。

希望这有帮助。