1

我有一个很长的 powershell 脚本,需要从 python 脚本执行。当我从命令行运行它时,powershell 脚本工作正常,但当我从 python 运行它时失败。

我已将我的 powershell 脚本简化为以下代码,该代码重现了该问题。

Powershell脚本:

import-module WebAdministration
Add-Type -Path C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll
Set-WebConfigurationProperty '/system.webServer/proxy' -Name "enabled" -Value "true"

Python脚本:

import subprocess
print subprocess.check_output("powershell [pathToMyPowershellScript]");

当我从 cmd.exe 运行 powershell 脚本时,它工作正常并且不产生任何输出。当我运行 python 脚本时,它会产生以下错误:

Set-WebConfigurationProperty : 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)).
At [pathToMyPowershellScript]:3 char:1
+ Set-WebConfigurationProperty '/system.webServer/proxy' -Name "enabled" -Value "t ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          
 : NotSpecified: (:) [Set-WebConfigurationProperty], COMException
+ FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,
  Microsoft.IIs.PowerShell.Provider.SetConfigurationPropertyCommand

我在 Windows 7 Professional (x64) 上使用 Python 2.7 和 Powershell 1.0 运行 IIS 7.5 有什么想法吗?

4

2 回答 2

2

我可以通过从“sysnative”版本的 cmd 运行 powershell 脚本来解决这个问题:

subprocess.check_call("c:\\windows\\sysnative\\cmd.exe /c 
                       powershell pathToScript", shell=True)

这解决了位数问题。

于 2013-03-29T17:17:24.570 回答
1

您的程序可能调用了错误版本的 powershell,请尝试显式调用 exe。

%SystemRoot%\SysWoW64\WindowsPowerShell\v1.0\powershell.exe

下面是一些您可能会感兴趣的相关阅读材料。

于 2013-03-18T23:52:29.057 回答