在ApplicationPoolIdentity下从C#进行远程PowerShell会话

kd7*_*iwp 3 c# powershell-remoting

使用从Microsoft找到的,我一直在尝试(使用C#)使用Live @ Edu为我的用户设置电子邮件帐户,并且该库使用远程PowerShell会话来执行此操作。我已经用using() { }模拟本地管理员帐户的块包装了PowerShell调用。当我在自己的开发机器上运行代码时,它可以很好地运行并在Live @ Edu上配置该帐户,但是当我在生产服务器上运行相同的代码时,我Access is Denied从PowerShell中得到了一个错误。

我刚刚注意到的是,如果我将服务器上的IIS应用程序池用户更改为自己的域帐户,则在生产服务器上一切正常,但将其保留为ApplicationPoolIdentity无效。因此看来,即使在我的代码中我扮演了本地管理员的角色,这些凭据也没有传递给PowerShell会话。奇怪的是,当脚本在我自己的计算机上(也位于)下运行时ApplicationPoolIdentity,没有问题,这使我相信脚本实际上是在我的计算机上以我自己的帐户运行的(并且我是本地管理员)。

我确实让代码吐出了的值,$env:username它给了我机器名称,我希望它能给我提供运行它的实际用户名,因为那是我直接在PowerShell窗口中键入该命令时得到的。

当使用我一直在代码中模拟的凭据交互式登录到远程服务器时,我可以在PowerShell窗口中手动键入所有PowerShell cmdlt,它们可以正常工作。

我不想让我的IIS应用程序池始终在管理员帐户下运行,因为这样做看起来很愚蠢,所以有没有办法以比我目前的模拟更进一步的方式运行PowerShell脚本作为管理员?

更新:

发生了一件奇怪的事情,似乎对我来说是一个解决方案。将代码部署到服务器后,我创建了一个本地管理员帐户。然后,我进入IIS应用程序池,并将所有者从更改为ApplicationPoolIdentity刚创建的管理帐户。之后,该页面可以正常运行PowerShell脚本。我以前就已经知道这一点,但是不想让IIS使用管理员帐户。然后,我继续将应用程序池设置回ApplicationPoolIdentity并删除了本地管理员帐户,该页面仍然有效!我重新启动了IIS,然后重新启动了Web服务器本身,一切正常。我能想到的是,将应用程序池移至管理员帐户会永久更改应用程序池中的某些属性。我现在在ServerFault上提出了一个修改后的问题

kd7*_*iwp 5

事实证明,该问题与在服务器上将Load User Profile我的应用程序设置为IIS应用程序池中的选项False有关(FalseWindows Server 2008的默认设置)。在阅读了此属性后,我不完全确定为什么这对我的情况很重要,但这是我的本地计算机上IIS与Web服务器所具有的设置不同的一个设置。现在,所有PowerShell调用都可以在服务器上完美地工作。