从python

时间:2018-08-18 05:04:15

标签: python powershell subprocess office365

我在成功运行Powershell脚本时遇到了一些困难,该脚本是我的python脚本的一部分。问题不是脚本无法运行,即使我尝试导入,安装的Powershell模块中的命令也无法识别。这些命令特别是Connect-MSOLService和同一模块中的其他命令。

我写了一个小测试来尝试我们不同的东西,但是似乎没有任何效果。在测试中,我尝试了以下操作:

subprocess.call('powershell ./script.ps1"')

p = subprocess.Popen(['powershell.exe', '-NoProfile', '-Command', '"&{' + pscommand + '}"'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) p.communicate()

subprocess.call('powershell.exe ./script.ps1"')

除MSOL命令外,所有其他命令均成功运行脚本,始终返回以下错误:

Connect-MsolService : The term 'Connect-MsolService' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At C:\Users\user\desktop\scripts\script.ps1:20 char:9 + Connect-MsolService -Credential $LiveCred + ~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Connect-MsolService:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException

从python脚本外部运行正常时,执行策略设置为不受限制,仅当我在Python中使用subprocess.call()时才会出现问题。任何想法/帮助将不胜感激。

谢谢, 楼

1 个答案:

答案 0 :(得分:0)

subprocess.call('C:\\Windows\\sysnative\\windowspowershell\\v1.0\\powershell.exe -executionpolicy bypass ./script.ps1')

尝试此操作并得到相同的错误。我发现Python正在调用PowerShell的32位版本,但无法导入64位模块。上面的代码能够从32位Python调用PowerShell的64位版本,然后运行包含以下内容的脚本 [Connect-MsolService]。