使用我从微软找到的一个图书馆,我一直试图(用C#)通过Live@Edu为我的用户提供电子邮件帐户,这个库使用远程PowerShell会话来实现这一点。我已经用一个模拟本地管理员帐户的using() { }块包装了using() { }调用。当我在自己的开发机器上运行代码时,它工作得很好,并提供了Live@Edu上的帐户,但是当我在生产服务器上运行相同的代码时,我会从Access is Denied中得到一个PowerShell错误。
我刚刚注意到的是,如果我将服务器上的用户更改为我自己的域帐户,那么在生产服务器上一切都可以正常工作,但将其保留为ApplicationPoolIdentity不起作用。因此,即使在我的代码中我模拟本地管理员,这些凭据也不会传递给PowerShell会话。奇怪的是,当脚本在我自己的机器上运行,也在ApplicationPoolIdentity下运行时,没有问题,这使我相信脚本实际上是在我的机器上的我自己的帐户下运行的(而且我是一个本地管理员)。
我确实让代码显示了$env:username的值,它给了我机器名,我希望它能给我它运行的实际用户名,因为当我将命令直接输入到PowerShell窗口时,这就是我所得到的。
当使用我在代码中模拟的凭据交互登录到远程服务器时,我可以手动将所有PowerShell cmdlts输入到PowerShell窗口中,它们可以正常工作。
我不想让我的impersonation总是在管理员帐户下运行,因为这是愚蠢的,所以是否有一种方法可以作为管理员运行PowerShell脚本,而不是我正在做的模拟呢?
更新:
发生了一件奇怪的事情,认为这对我是一种解决办法。将代码部署到服务器后,我创建了一个本地管理员帐户。然后我转到,并将所有者从ApplicationPoolIdentity更改为我刚刚创建的管理帐户。在此之后,该页面可以很好地运行PowerShell脚本。我以前就知道这一点,但不想让IIS使用管理帐户。然后,我继续将应用程序池设置为ApplicationPoolIdentity,并删除了本地管理帐户,页面仍然有效!?我重新启动了IIS和Web服务器本身,一切都正常。我所能想到的就是将Application移到一个Admin帐户上,永久地改变了App中的一些属性。我现在已经放了一个关于ServerFault的修正问题。
发布于 2013-06-18 15:45:08
原来这个问题与IIS中的Load User Profile选项有关,因为我的应用程序被设置为服务器上的False (False是Windows 2008的默认选项)。在阅读了这个属性之后,我不完全确定这对我的场景有什么意义,但在我的本地机器上设置的IIS与Web服务器的设置不同。现在,所有PowerShell调用都在服务器上完美无缺地工作。
https://stackoverflow.com/questions/12184393
复制相似问题