【发布时间】:2014-02-20 07:46:32
【问题描述】:
在自动设置 Web 应用程序和使用应用程序池标识正确配置 IIS 时,我遇到了很多困难。我在用 PowerShell 编写的 Web 应用程序部署脚本中执行此操作。我的要求是我需要我的 PowerShell 脚本将应用程序池身份用户设置为特定的服务帐户 mydomain\svcuser 和密码。这是示例代码:
$pool = New-Item "IIS:\AppPools\MyAppPool" -Force
$svcuser = "mydomain\svcuser"
$pool.processModel.userName = $svcuser
$password = "somepassword"
$pool.processModel.password = $password
$pool.processModel.identityType = 3
$pool | Set-Item -ErrorAction Stop
当我运行此程序时,所有似乎都可以正常工作--不会引发错误,并且应用程序身份用户名出现在 IIS 中--但由于某种原因密码设置不正确,如果一点也不。由于它是密码,我无法验证是否已设置,但我可以得出结论,如果是,则说明设置不正确。在我手动进入并在 IIS 中输入密码之前,它不会对生成的应用程序池用户进行身份验证。因此,应用程序在部署到 Web 服务器后失败,需要人工干预。
我错过了什么吗?
【问题讨论】:
-
我认为,如果您使用 powershell 检查它,您实际上可以验证在 processmodel 对象上设置的密码。试试 get-itemproperty 'IIS':\AppPools\myapppoolnamehere' "ProcessModel"
-
太好了,谢谢。现在至少我可以验证它对密码的实际作用。希望这能让我更接近解决方案。
-
我已确认密码实际上设置正确。因此,唯一可能的结论是,这要么是某种重复的用户错误,要么是当您在 UI 中手动指定密码而不是在 PowerShell 中使用 Web 管理模块时,IIS 在幕后做了其他事情。基本症状是,在运行我的 Web 应用程序的部署后,应用程序池在第一次被命中时失败并停止。然后手动重新输入相同的密码即可解决问题。
-
事实证明,这整个事情都是一个红鲱鱼。密码输入不正确的原因是我没想到的。当我从 PowerShell 控制台运行时,脚本运行正确,但在我的实际脚本中,我从文件中获取加密密码,然后使用注册表中的密钥对其进行解密,所有这些都是使用 PSExec 远程调用的。当我在 PowerShell 中运行时,它被正确解密,但是当我通过 PSExec 执行时,同一用户无法从注册表访问密钥,因此无法解密密码并错误地设置它。
-
不幸的是,我无法重现我在上面所做的 PSExec 声明,并且手动运行 PSExec 我肯定可以读取机器(相同机器,相同帐户)上的注册表,因此搜索继续。一旦获得所需的详细信息,我可能会关闭或编辑问题,甚至可以提出正确的问题。 :(
标签: iis powershell iis-7 powershell-3.0 web-administration