Использование PowerShell для создания AppPool не устанавливает идентификатор AppPool
Я пытаюсь использовать PowerShell для создания пула приложений в IIS. После поиска в Интернете я создал следующий тест script:
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
}
Когда я запускаю script, имя пользователя и пароль не обновляются до значений, которые я установил.
Ниже приведены результаты двух блоков печати
#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 в режиме администратора. Любые идеи относительно того, чего я могу потерять, чтобы заставить это работать?
Ответы
Ответ 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
Надеюсь, это поможет.
Ответ 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 answer) без каких-либо ошибок в консоли, но после дальнейшего контроля ни одно имя пользователя не было связано с пулом приложений.
В итоге я изменил файл 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, чтобы убедиться, что новые конфигурации загружены.
Надеюсь, это поможет.