“选择对象”未被识别为内部或外部命令,可运行程序或批处理文件

时间:2015-08-03 15:23:26

标签: python powershell iis

我想通过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”不被识别为内部或外部命令,可操作程序或批处理文件。

我搜索了很多方法。但没有人可以解决这个问题,有人可以帮助我吗?感谢。

3 个答案:

答案 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

  

听起来像您缺少环境变量。


来自Command Prompt Error 'C:\Program' 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-operabhttps://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,它将起作用