我正在尝试使用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。
我是该计算机的管理员,我在管理员模式下运行PowerShell。关于我可能缺少什么想法才能让它发挥作用?
答案 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服务器,只是为了确保加载了新的配置。
希望这有帮助。