【问题标题】:Why does C# Powershell method work in Windows app but not Web app为什么 C# Powershell 方法在 Windows 应用程序中有效,但在 Web 应用程序中无效
【发布时间】:2013-06-18 23:43:29
【问题描述】:

我正在向我们的 C# (.NET 4.5) 站点添加一个页面,该页面将处理 Office 365 帐户配置。我从 Microsoft 找到了一个有用的 utility,它是一个 Windows 应用程序,它通过 PowerShell 调用管理 Office 365 用户。此应用程序在我的 Windows 7 机器上运行良好,并允许我配置/编辑用户帐户。当我从the tool 采用完全相同的ExcutePowershellCommands() 方法并将其放入我的Web 应用程序时,它不起作用,说我尝试的任何Office 365 cmdlet 都无法识别。根据该工具的说明,这是因为用户帐户没有运行 Windows PowerShell 的权限,这是有道理的,因为 IIS 将在与运行本机 Windows 应用程序不同的用户帐户下运行代码。

如果我在代码中的 ExcutePowershellCommands() 周围加上一个模拟本地管理员的 using() 块,则该函数在我的 Web 应用程序中有效。但是,如果我创建一个调用此 ExcutePowershellCommands() 函数的单元测试并运行测试,我只会收到无法识别 Office 365 cmdlet 的错误(即使我仍然将该函数包装在模拟管理员的 using() 块中) .有没有办法找出单元测试在哪个帐户下运行(使用 TestDriven.Net)?如果我进行模拟,为什么单元测试在哪个帐户下运行甚至很重要?

谢谢!

【问题讨论】:

  • 听起来 Office 365 的 cmdlet 没有为运行 IIS 帐户的配置文件加载。我不能肯定地说你可能需要添加什么才能让他们得到认可。我将首先查看运行 gc $profile 所返回的内容,以查看它们是否在此处被引用。
  • 看起来我没有配置文件,因为我输入 $profile 时列出的路径中没有文件。

标签: c# powershell


【解决方案1】:

您应该注意,当您创建配置文件时,它可以是特定于用户或机器的。此外,它可以适用于所有 shell 或仅适用于 powershell。 http://technet.microsoft.com/en-us/magazine/2008.10.windowspowershell.aspx

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-08-28
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      相关资源
      最近更新 更多