如何从PowerShell指定应用程序池标识用户和密码

pau*_*nic 26 iis powershell iis-7 web-administration powershell-3.0

我在使用应用程序池标识自动设置Web应用程序和配置IIS时遇到了很多困难.我在用PowerShell编写的Web应用程序部署脚本中执行此操作.我的要求是我需要使用PowerShell脚本将应用程序池标识用户设置为特定的服务帐户mydomain\svcuser和password.以下是示例代码:

$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
Run Code Online (Sandbox Code Playgroud)

当我运行它时,一切似乎都正常工作 - 没有错误被抛出,应用程序身份用户名出现在IIS中 - 但由于某种原因,密码没有正确设置,如果有的话.由于它是一个密码,我无法验证它是否已设置,但我可以断定,如果它是,它没有设置正确.在我手动进入并在IIS中输入密码之前,它不会对生成的应用程序池用户进行身份验证.因此,应用程序在部署到Web服务器后失败,需要手动干预.

我在这里错过了什么吗?

小智 47

您可以这样做:

Import-Module WebAdministration
Set-ItemProperty IIS:\AppPools\app-pool-name -name processModel -value @{userName="user_name";password="password";identitytype=3}
Run Code Online (Sandbox Code Playgroud)

请参阅此文档以获取解释,并在以下位置运行应用程序池的用户类型的缩进类型数字的引用:http://www.iis.net/configreference/system.applicationhost/applicationpools/add/processmodel

  • 没有`Import-Module WebAdministration`使用这个答案将导致`Set-ItemProperty:找不到驱动器.名为"IIS"的驱动器不存在.错误.根据http://stackoverflow.com/questions/24392696/getting-cant-find-the-drive-the-drive-called-iis-does-not-exist (4认同)
  • 请注意,这不会像通过 UI 那样加密密码。(我不确定这是否使它更安全,但我也不确定我是否对坐在那里的纯文本密码感到满意。) (2认同)

小智 6

经过几次实验

这是我的答案,我希望这会有所帮助,我已经在IIS 8.5上工作过

$credentials = (Get-Credential -Message "Please enter the Login credentials including Domain Name").GetNetworkCredential()

$userName = $credentials.Domain + '\' + $credentials.UserName

Set-ItemProperty IIS:\AppPools\$app_pool_name -name processModel.identityType -Value SpecificUser 

Set-ItemProperty IIS:\AppPools\$app_pool_name -name processModel.userName -Value $username

Set-ItemProperty IIS:\AppPools\$app_pool_name -name processModel.password -Value $credentials.Password
Run Code Online (Sandbox Code Playgroud)