17

我正在尝试使用 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。关于我可能缺少什么以使其正常工作的任何想法?

4

5 回答 5

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

我希望这有帮助。

于 2013-02-14T22:32:24.783 回答
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

于 2014-06-26T20:15:32.077 回答
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
于 2015-04-16T18:22:26.633 回答
0

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

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

并且只看到了部分密码。原来我在密码字符串参数中使用了双引号,而密码以 '$' 开头,这导致它被解析为变量。

我将双引号更改为单引号,它起作用了。

于 2015-12-10T18:52:19.120 回答
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 服务器,以确保加载了新配置。

希望这会有所帮助。

于 2016-06-13T23:05:49.417 回答