从GitHub获取PowerShell脚本并执行它

时间:2017-03-20 17:21:34

标签: python powershell urllib2

遇到从Python中执行PowerShell脚本的问题。

Python本身很简单,但在调用和错误时它似乎传入\n

['powershell.exe -ExecutionPolicy Bypass -File', '$Username = "test";\n$Password = "password";\n$URL

这是完整的代码:

import os
import subprocess
import urllib2
fetch = urllib2.urlopen('https://raw.githubusercontent.com/test')
script = fetch.read()
command = ['powershell.exe -ExecutionPolicy Bypass -File', script]

print command   #<--- this is where I see the \n. 
#\n does not appear when I simply 'print script'

所以我有两个问题:

  1. 如何在不写入磁盘的情况下将脚本正确存储为变量,同时避免使用\n
  2. 从Python中调用PowerShell的正确方法是什么,以便运行存储在$script中的脚本?

2 个答案:

答案 0 :(得分:2)

  
      
  1. 如何在不写入磁盘的情况下将脚本正确存储为变量,同时避免使用\n
  2.   

这个问题基本上是this one的副本。通过您的示例,可以简单地删除换行符。更安全的选择是用分号替换它们。

script = fetch.read().replace('\n', ';')
  
      
  1. 从Python中调用PowerShell的正确方法是什么,以便运行存储在$script中的脚本?
  2.   

您的命令必须作为数组传递。此外,您无法通过-File参数运行一系列PowerShell语句。请改用-Command

rc = subprocess.call(['powershell.exe', '-ExecutionPolicy', 'Bypass', '-Command', script])

答案 1 :(得分:0)

我相信这种情况正在发生,因为您正在打开PowerShell并且它会以特定方式自动格式化。

您可以执行一个通过命令输出的for循环,并在没有/ n的情况下打印。