如何检查powershell中是否存在用户“IIS AppPool\MyAppPoolName”

如何检查powershell中是否存在用户“IIS AppPool\MyAppPoolName”,powershell,iis,Powershell,Iis,我正试图为我的开发人员自动化一些数据库配置。对于开发和测试,我们只使用ApplicationPoolIdentity服务帐户。我们的一个测试服务器讨厌网络服务,因此这不是一个选项,因此我需要配置数据库,以便自动向IIS的正确帐户授予权限。但是开发人员通常只运行数据库脚本,而不是数据库和web脚本 因此,IIS AppPool在运行DB脚本时可能不存在,这意味着扩展IIS AppPool\myAppPoolName用户也将不存在。因此,当我尝试授予他们访问本地SQL数据库的权限时,他们会得到一个错

我正试图为我的开发人员自动化一些数据库配置。对于开发和测试,我们只使用ApplicationPoolIdentity服务帐户。我们的一个测试服务器讨厌网络服务,因此这不是一个选项,因此我需要配置数据库,以便自动向IIS的正确帐户授予权限。但是开发人员通常只运行数据库脚本,而不是数据库和web脚本

因此,IIS AppPool在运行DB脚本时可能不存在,这意味着扩展IIS AppPool\myAppPoolName用户也将不存在。因此,当我尝试授予他们访问本地SQL数据库的权限时,他们会得到一个错误

所以问题是,如何检查Powershell中是否存在这些IIS AppPool服务帐户?我知道如何确认广告用户或本地用户的存在,但这两个IIS apppool服务帐户都不在列表中。他们住在哪里?它是一个无法从Powershell访问的列表吗


我可以做一些愚蠢的事情,比如在权限步骤中捕获并处理错误,但我宁愿请求权限而不是原谅。

AppPool identity是一个虚拟帐户,它不会以用户身份显示在Windows用户管理控制台中。此文档可能有帮助:。还有这

最后我在这里接受了宽恕而不是许可。我尝试创建SQL登录名和相应的用户,如果他们不能,则处理异常

编辑:

这似乎是获得实际名单的最佳方式:

$appPoolIdentities = Get-IISAppPool |
   Where-Object {$_.ProcessModel.IdentityType -eq 'ApplicationPoolIdentity'} |
   ForEach-Object {"IIS AppPool\$($_.Name)"}

据我所知,IIS应用程序池标识的权限帐户是IIS AppPool\myAppPoolName。如果我们要检查此帐户是否存在。我们只需要检查myAppPoolName是否存在

为了实现这一点,我建议您可以参考下面的powershell命令来检查应用程序池是否存在

命令:

import-module webadministration

$AppPoolName="Test"

if(Test-Path IIS:\AppPools\$AppPoolName)
{
"AppPool is already there"
return $true;
}
else
{
return $false;
}
结果:


这些链接解释了什么是IIS AppPool\useraccount,我已经知道了。他们没有提供任何关于如何获得他们名单的信息。我认为唯一的实际选择是遍历AppPool列表并检查使用AppPoolIdentity的应用程序池。如果应用程序池未使用AppPoolIdentity,则此操作将失败。它将创建用户名存在的假阳性。还需要做更多的工作-检查AppPool IdentityType以确保其为4。这是可行的,我希望有一个神奇的方法返回列表,但这种方法是可行的。