【问题标题】:New-Item not working if use C# to call Powershell如果使用 C# 调用 Powershell,则 New-Item 不起作用
【发布时间】:2013-12-30 08:12:59
【问题描述】:

原来的问题很大,现在我缩小到:

如果我在powershell控制台窗口中运行以下powershsell脚本,它可以工作,并且$appPool是Microsoft.IIs.PowerShell.Framework.ConfigurationElement类型,并且可以在我的IIS中创建一个新的应用程序池。

Import-Module WebAdministration
$appPool = New-Item ("IIS:\AppPools\$iissitename")

但是,如果我使用 C# 运行我的脚本,$appPool 将为 NULL,并且不会创建应用程序池。

有什么想法吗?多谢!

--------- 更新 ------------

如果我使用其他 Web 服务器 (IIS) 管理 Cmdlet,例如:

Import-Module WebAdministration

Get-Website

我的 C# 项目会抛出如下异常:找不到名为“WebAdministration”的提供程序

------ 更新更多 ------

从 C# 调用时,其他一些 powershell 命令(例如“Get-ChildItem IIS:\apppools”)都不起作用。

【问题讨论】:

    标签: c# powershell powershell-2.0 powershell-3.0


    【解决方案1】:

    WebAdministration 模块似乎只有 64 位 - 至少在我测试的 64 位系统上是这样。该组件或它所依赖的某些 COM 组件尚未在 32 位注册表配置单元中注册。确保将您的 C# 应用程序编译为 x64。

    【讨论】:

    • 嗨,Keith,我做到了,而且还是一样。
    • 有趣的是,如果我启动 x86 PowerShell 提示符,我可以毫无错误地导入 webadministration。但是如果我尝试 GCI IIS:\ 我得到错误:Retrieving the COM class factory for component with CLSID {688EEEE5-6A7E-422F-B2E1-6AF00DC944A6} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).。似乎某些必需的 COM 服务器未在 32 位配置单元中注册。
    • 对于你这里提到的错误,也许可以使用regsvr32 xxx。 dll
    • 同样要在Powershell中注册COM dll,如果在正常模式下运行控制台,必须有“-Verb runAs”
    • 当我需要使用 WebAdministration 时,我只是从 64 位提示符下使用它,没有任何问题。并且由于我们的管理员禁用了 UAC,我以管理员身份运行,因此由于缺乏权限而再次没有问题。 :-)
    【解决方案2】:

    我想我可能会找到答案。 Powershell中的IIS相关命令似乎需要管理员权限才能运行。如果我使用 C# 调用 ps 文件,ps 中的命令应该是:

    Start-Process powershell -Verb runAs -ArgumentList "Invoke-Command -ScriptBlock {Get-WebSite }"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-03
      • 2011-09-04
      • 2018-10-19
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      相关资源
      最近更新 更多