windows10 定时任务自动导入

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# @Author: zhibo.wang
# @E-mail: gm.zhibo.wang@gmail.com
# @Date  : 2020/9/8 15:54
# @Desc  : win pc wechat


"""
"spider_startime" : "17",
"spider_frequency" : "1d",
schtasks /create  /sc daily /st 08:00:00 /tn "wechat_login" /tr G:PythonTestwechatGzhcrontab_task.bat
schtasks 无法设置起始于参数,也就无法执行bat批处理

schtasks /delete /tn wechat_login /F
"""

import getpass
import hashlib
import os
import socket
import subprocess
import time

import requests

# Command_Command  要执行的文件
# WorkingDirectory_WorkingDirectory 起始于
# URI_URI 任务名称
# StartBoundary_StartBoundary  任务时间 2020-09-09T11:55:00
# Date_Date 创建时间 2020-09-09T09:22:13
# Author_Author 机器名用户名 DESKTOP-1OCBAP2an
# UserId_UserId sid S-1-5-21-xxxxxxxx-xxxxxxx-xxxxxxx-1001

task_xml_demo = '''<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>Date_Date</Date>
    <Author>Author_Author</Author>
    <URI>\URI_URI</URI>
  </RegistrationInfo>
  <Triggers>
    <CalendarTrigger>
      <StartBoundary>StartBoundary_StartBoundary</StartBoundary>
      <Enabled>true</Enabled>
      <ScheduleByDay>
        <DaysInterval>1</DaysInterval>
      </ScheduleByDay>
    </CalendarTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>UserId_UserId</UserId>
      <LogonType>InteractiveToken</LogonType>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>Command_Command</Command>
      <WorkingDirectory>WorkingDirectory_WorkingDirectory</WorkingDirectory>
    </Exec>
  </Actions>
</Task>'''

import_xml_demo = '''for %%f in (xml_path) do (
  call :importfile "%%f"
)
exit /b 0
 
:importfile

set filename=%1

schtasks /create /tn "tn_tn" /xml %filename% 
echo on
'''


class Create(object):
    key = "click_pc_wechat_task"

    def __init__(self):
        self.delete_crontab()
        self.cwd = os.getcwd()
        self.host_name = socket.gethostname()
        self.user_name = getpass.getuser()
        self.create_import_xml_file()
        self.create_crontab_task_file()
        self.create_vbs_task_file()

    def get_usersid(self):
        UserId = None
        cmd = "wmic useraccount where name="{}" get sid".format(self.user_name)
        print(cmd)
        userid_str = [i.replace(" ", "") for i in subprocess.getoutput(cmd).split("
") if len(i.replace(" ", "")) > 10]
        if len(userid_str) > 0:
            UserId = userid_str[0]
        return UserId

    def run_cmd(self, cmd):
        os.system(cmd)

    def delete_crontab(self):
        print("删除计划任务")
        cmd = "schtasks /delete /tn {} /F".format(self.key)
        self.run_cmd(cmd)

    def create_import_xml_file(self):
        print("创建import_xml_file")
        xml_path = "{}click_pc_wechat_task.xml".format(self.cwd)
        text = import_xml_demo.replace(
            "xml_path", xml_path).replace("tn_tn", self.key)
        file_name = "{}import_xml.bat".format(self.cwd)
        self.create_file(file_name, text)

    def create_crontab_task_file(self):
        print("创建crontab_task_file")
        text = "python {}click_pc_wechat.py".format(self.cwd)
        file_name = "{}crontab_task.bat".format(self.cwd)
        self.create_file(file_name, text)

    def create_vbs_task_file(self):
        """
        隐藏cmd窗口
        Set ws = CreateObject("Wscript.Shell")
        ws.run "cmd /c G:PythoProjectspos-crawler	runkDataSpidersDataSpiderspc_wechat_gzhcrontab_task.bat",vbhide
        """
        print("创建vbs_task_file")
        text = 'Set ws = CreateObject("Wscript.Shell") 
ws.run "cmd /c {file_name}",vbhide'.format(
            file_name="{}crontab_task.bat".format(self.cwd)
        )
        file_name = "{}crontab_task.vbs".format(self.cwd)
        self.create_file(file_name, text)

    def md5_str(self, str):
        md5 = hashlib.md5()
        md5.update(str.encode())
        result = md5.hexdigest()
        return result

    def get_date(self):
        # 时间戳转换
        time_local = time.localtime(time.time())
        date = time.strftime("%Y-%m-%dT%H", time_local)
        return date

    def create_xml(self, spider_startime, spider_frequency):
        day_date = self.get_date()
        UserId = self.get_usersid()
        if len(spider_startime) == 1:
            end_time = "0{}:05:00".format(spider_startime)
        else:
            end_time = "{}:14:00".format(spider_startime)

        Author = "{0}\{1}".format(self.host_name, self.user_name)
        Command = "{}crontab_task.vbs".format(self.cwd)
        WorkingDirectory = "{}\".format(self.cwd.split("\")[0])
        URI = self.key
        StartBoundary = day_date.split("T")[0] + "T" + end_time
        DateStr = day_date + ":00:00"

        text = task_xml_demo.replace(
            "Command_Command", Command
        ).replace(
            "WorkingDirectory_WorkingDirectory", WorkingDirectory
        ).replace(
            "URI_URI", URI
        ).replace(
            "StartBoundary_StartBoundary", StartBoundary
        ).replace(
            "Date_Date", DateStr
        ).replace(
            "Author_Author", Author
        ).replace("UserId_UserId", UserId)

        file_name = "{}click_pc_wechat_task.xml".format(self.cwd)
        print("创建click_pc_wechat_task.xml")
        self.create_file(file_name, text)
        cmd = "{}import_xml.bat".format(self.cwd)
        print("执行 bat 文件 导入定时任务计划")
        self.run_cmd(cmd)

    def create_file(self, filename, text):
        if ".xml" in filename:
            f = open(filename, "w+", encoding="UTF-16")
        else:
            f = open(filename, "w+")
        f.write(text)
        f.close()

    def run(self):
        result = {"spider_startime": "16",
                  "spider_frequency": "1d"}
        if result:
            spider_startime = result.get("spider_startime")
            spider_frequency = result.get("spider_frequency")
            self.create_xml(spider_startime, spider_frequency)


if __name__ == "__main__":
    C = Create()
    C.run()
原文地址:https://www.cnblogs.com/dockers/p/13654428.html