使用我从 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 上提出了一个修改后的问题。