powershell命令无法在python脚本中正常运行

时间:2020-03-17 07:30:51

标签: python powershell

我试图运行此powershell命令:

Unregister-ScheduledTask -TaskPath "\Lsports Tasks" -a

当我从powershell运行它时,它工作正常,我从python脚本中获得了相同的输出,但是当我从我的python脚本中运行时,没有任何反应,我得到了与从powershell命令中获得的输出相同的输出,但它没有工作,这是我的脚本:

import psutil
import os
os.system("""powershell -command ""Unregister-ScheduledTask -TaskPath "\Lsports Tasks\" -a""")
commands = []
for proc in psutil.process_iter(['pid','name']):
  process = proc.info 
  if process['name'] == 'svchost.exe':
     pid = process['pid']
     cmds = psutil.Process(pid=int(pid)).cmdline()
     cmd = ' '.join(cmds)
     commands.append(cmd)

i = 0
for c in commands:
  i+= 1
  task = os.system(f"""SCHTASKS /CREATE /SC ONSTART /RU system /TN "Lsports Tasks\Lsports Runner{i}" /TR "{c}""".format(i,c=c))

从命令获取的输出即时消息:

 CimJob1         CimJob          Running 

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,您应该授予程序管理员特权。它可以工作。(在Windows上) 像这样:

import ctypes
import time
import sys
import os
import psutil


def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False


if is_admin():
    os.system("""powershell -command ""Unregister-ScheduledTask -TaskPath "\Lsports Tasks\" -a""")
    commands = []
    for proc in psutil.process_iter(['pid', 'name']):
        process = proc.info
        if process['name'] == 'svchost.exe':
            pid = process['pid']
            try:
                cmds = psutil.Process(pid=int(pid)).cmdline()
            except:
                pass
            cmd = ' '.join(cmds)
            commands.append(cmd)

i = 0
for c in commands:
    i += 1
    task = os.system(f"""SCHTASKS /CREATE /SC ONSTART /RU system /TN "Lsports Tasks\Lsports Runner{i}" /TR "{c}""".format(i, c=c))
else:
    if sys.version_info[0] == 3:
        ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
    else:
        ctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable), unicode(__file__), None, 1)

当我在admin shell中运行此命令时,它是正确的,可能会丢失一些pid。因此请在此处添加缓存部分。