4

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

我刚刚注意到的是,如果我将服务器上的 IIS 应用程序池用户更改为我自己的域帐户,那么在生产服务器上一切正常,但让它ApplicationPoolIdentity不起作用。因此,即使在我的代码中我冒充本地管理员,这些凭据似乎也不会传递到 PowerShell 会话。奇怪的是,当脚本在我自己的机器上运行时,也ApplicationPoolIdentity没有问题,这让我相信脚本实际上是在我自己的机器上运行在我自己的帐户下(我是本地管理员)。

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

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

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

更新:

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

4

1 回答 1

7

原来这个问题与Load User ProfileIIS 应用程序池中的选项有关,因为我的应用程序被设置False在服务器上(False是 Windows Server 2008 的默认设置)。在阅读了这个属性之后,我不完全确定为什么这对我的场景很重要,但这是我本地机器上的 IIS 中的一个设置,与 Web 服务器的设置不同。现在,所有 PowerShell 调用都可以在服务器上完美运行。

于 2013-06-18T15:45:08.873 回答