从Python运行时无法在PowerShell中导入AzureRM模块

时间:2017-07-22 14:16:06

标签: python powershell azure

我编写了一个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)

1 个答案:

答案 0 :(得分:0)

Powershell模块安装在x64系统中。

我必须安装Pythonx64并使用它与PowerShell进行通信。

我认为原因是,当我们使用Pythonx86时,它通过x86进程与Powershell进行通信,就像Pyhonx64一样,它使用x64进程与PowerShell进行通信。