我编写了一个PowerShell脚本,当我从cmd运行
时,它运行正常powershell . C:\\scripts\\Azure.ps1; Review-Subscriptions -args xyz .\\output xxx-xxx-xxx 2017-23-07-01-04
Azure.ps1使用AzureRM PowerShell模块中的一些功能。
但是当我从Python运行相同的命令时,
path = "C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe"
script_path = "C:\\scripts\\Azure.ps1"
function_name = "Review-Subscriptions"
subscription_id = 'xxx-xxx-xxx'
file_path = '.\\output"'
now = datetime.datetime.now().strftime("%Y-%d-%m-%H-%M")
cmd = '. %s; %s -args xyz %s %s %s' % \
(script_path,
function_name,
file_path,
subscription_id,
now)
process = subprocess.Popen(
[path, '-ExecutionPolicy', 'Unrestricted',
cmd
], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print process.communicate()
在这种情况下,PowerShell不会加载AzureRM模块;这导致整个脚本失败。
我们如何强制加载AzureRM模块?
尝试过以下但没有奏效。
a)在Azure.ps1文件的开头添加了Import-Module AzureRM
b)将cmd更改为
cmd = 'Import-Module AzureRM; . %s; %s( %s, %s, "%s")' % \
(script_path,
function_name,
file_path,
subscription_id,
now)
答案 0 :(得分:0)
Powershell模块安装在x64系统中。
我必须安装Pythonx64并使用它与PowerShell进行通信。
我认为原因是,当我们使用Pythonx86时,它通过x86进程与Powershell进行通信,就像Pyhonx64一样,它使用x64进程与PowerShell进行通信。