我想通过PowerShell的Enable-WindowsOptionalFeature启用IIS。这是一个有一行代码的python程序:
os.system('powershell.exe Enable-WindowsOptionalFeature -Online -FeatureName $(Get-WindowsOptionalFeature -Online | Where { $_.FeatureName -Like "IIS-*"} | Select-Object -ExpandProperty FeatureName)')
当我运行python程序时,它会说 “Select-Object”不被识别为内部或外部命令,可操作程序或批处理文件。
我搜索了很多方法。但没有人可以解决这个问题,有人可以帮助我吗?感谢。
答案 0 :(得分:2)
我想os.system
调用正在使用cmd.exe,它会在转到powershell.exe之前修改你的参数。管道之前的所有内容都传递给powershell.exe,之后的所有内容都传递给cmd.exe程序。没有Select-Object
计划。
根据subprocess module使用Python的recommendations in the system
function's documentation代替os.system
:
subprocess module提供了更强大的工具来产生新流程并检索其结果;使用该模块比使用此功能更可取。有关一些有用的配方,请参阅子流程文档中的Replacing Older Functions with the subprocess Module部分。
您还可以对命令进行base-64编码并将其传递给PowerShell的-EncodedCommand
属性。
cmd = base64.b64encode( "Enable-WindowsOptionalFeature -Online -FeatureName $(Get-WindowsOptionalFeature -Online | Where { $_.FeatureName -Like "IIS-*"} | Select-Object -ExpandProperty FeatureName)'"
os.system("powershell.exe -EncodedCommand " + cmd)
答案 1 :(得分:0)
来自Powershell' is not recognized as an internal or external command, operable program or batch file
听起来像您缺少环境变量。
如果目录中包含空格,请在其两边加上引号。
来自 https://superuser.com/questions/571715/windows-command-line-not-recognized-as-an-internal-or-external-command-operab和https://blogs.msdn.microsoft.com/oldnewthing/20071121-00/?p=24433/
注册表中可能设置了“自动运行”命令...尝试运行
cmd /d
,看看是否产生相同的结果 信息。/d
标志的意思是“不要运行自动运行命令”,这使得 非常适合测试。注册表值是:
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun
选中两者。默认情况下,两者都不应该存在。您可能希望修复 命令字符串,甚至完全删除它们。
答案 2 :(得分:-1)
如果您使用sel
代替select
,它将起作用