使用 PowerShell 创建 AppPool 不设置 AppPool Identity
Posted
技术标签:
【中文标题】使用 PowerShell 创建 AppPool 不设置 AppPool Identity【英文标题】:Use PowerShell to Create AppPool does not set AppPool Identity 【发布时间】:2013-01-30 19:07:54 【问题描述】:我正在尝试使用 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 框架已更新,但身份仍设置为 ApplicationPoolIdentity。它应该是域\用户名。
我是机器上的管理员,我在管理员模式下运行 PowerShell。关于我可能缺少什么以使其正常工作的任何想法?
【问题讨论】:
【参考方案1】:您需要更改流程模型身份类型以接受用户帐户而不是默认的 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
我希望这会有所帮助。
【讨论】:
我必须使用-Name processmodel.userName
- 它似乎区分大小写(至少在 Server 2016 中)。【参考方案2】:
我在需要将 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
【讨论】:
感谢您提供文档链接...有助于识别“神奇数字”【参考方案3】:上面从来没有为我工作过,这确实有效:
import-module webadministration
$pool = Get-Item "IIS:\AppPools\apppoolname"
$pool.processmodel.identityType = 3
$pool.processmodel.username = "username"
$pool.processmodel.password = "password"
$pool | set-item
【讨论】:
【参考方案4】:我在设置身份时遇到了类似的问题。最后,我检查了它设置的密码:
Get-ItemProperty $appPool -name "processmodel.password"
并且只看到了部分密码。原来我在密码字符串参数中使用了双引号,而密码以 '$' 开头,这导致它被解析为变量。
我把双引号改成了单引号,效果很好。
【讨论】:
【参考方案5】:在我的环境中,这些答案对我不起作用。我正在尝试使用 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 服务器,以确保新配置已加载。
希望对您有所帮助。
【讨论】:
以上是关于使用 PowerShell 创建 AppPool 不设置 AppPool Identity的主要内容,如果未能解决你的问题,请参考以下文章