我有一个很长的PowerShell脚本,我需要从python脚本执行。 当我从命令行运行powershell脚本时,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 有什么想法吗?
答案 0 :(得分:2)
我能够通过从" sysnative"运行powershell脚本来解决这个问题。 cmd的版本:
subprocess.check_call("c:\\windows\\sysnative\\cmd.exe /c
powershell pathToScript", shell=True)
这解决了比特问题。
答案 1 :(得分:1)
您的程序可能正在调用错误版本的powershell,请尝试显式调用exe。
%SystemRoot%\SysWoW64\WindowsPowerShell\v1.0\powershell.exe