【问题标题】:How can i disable task scheduler jobs using powershell script如何使用 powershell 脚本禁用任务计划程序作业
【发布时间】:2022-03-29 11:02:11
【问题描述】:

我正在寻找一个可以运行以禁用任务计划程序作业(内部禁用 .bat 文件)的 powershell 脚本,该脚本可以在我们提到脚本的时间戳之间禁用。使用 Powershell 脚本是否可行?

任何帮助表示赞赏!

【问题讨论】:

    标签: powershell


    【解决方案1】:

    我将首先使用带有 CSV 格式输出的方便的 SCHTASKS 可执行文件来获取包含所有计划任务信息的对象:

    $tasks = & SCHTASKS /Query /V /FO CSV | ConvertFrom-Csv
    

    参数的神奇解码环:/Query 是操作,/V 是详细输出,/FO CSV 是输出格式。现在它在一个对象中,您可以轻松过滤以找到您正在寻找的任务:

    $task = $tasks | ? { $_.TaskName -eq "My Batch File" }
    

    这使得启用或禁用任务变得容易,再次使用 SCHTASKS 可执行文件:

    & SCHTASKS /Change /DISABLE /TN "$Task.TaskName"
    

    您可以使用相同的代码轻松地再次启用该任务,只需将 /DISABLE 替换为 /ENABLE。 SCHKTASKS 是一个非常强大的工具,可用于创建和操作计划任务。

    参考:http://msdn.microsoft.com/en-us/library/windows/desktop/bb736357.aspx

    【讨论】:

    • 嗨 Goyuix,我是 Poweshell 的新手,所以您要求我在第 2 步中提供一个包含我想要禁用的所有批处理文件的 csv 文件?你能帮我从实际代码开始吗
    • 第 1 步生成 CSV,并将其存储在 $tasks 变量中。第 2 步仅使用第 1 步中的 $tasks 变量作为数据源,并应用过滤器以获取 TaskName 等于“我的批处理文件”的任务记录 - 您可能希望将名称替换为适合您的脚本的任何名称.
    • 太棒了!!它有效,但脚本在问我Please enter the run as password for server\userid 有没有办法可以绕过这一步并禁用任务?
    【解决方案2】:

    在 Windows Server 2008 及更高版本中,您可以使用 SCHTASKS 或 COM 对象 Schedule.Service 以更加面向对象的方式操作任务。有关同时使用 SCHTASKSSchedule.Service 的示例,请参阅 http://letitknow.wordpress.com/2011/05/20/create-scheduled-task-by-using-powershell/。任务计划程序的 COM 接口记录在 http://msdn.microsoft.com/en-us/library/aa383608(v=vs.85)

    【讨论】:

      【解决方案3】:

      【讨论】:

        【解决方案4】:

        Goyuix 回答在本地化窗口上失败:TaskName 是“Nombre de tarea”。为 win7 或更高版本构建了我自己的脚本(powershell 3 没有更新的 TaskSchd 函数)。第一部分做了一个提取本地化名称的虚拟任务。然后提取所有启用的任务。使 $toDisableArr 匹配要删除的黑名单。最后删除与我们想要保留的白名单任务不匹配的任务。删除最后一个评论符号 # 以实际完成这项工作。

          # International aware disable SchdTasks:
        Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force  #needs admin rights
        
          # This is the RegEx match blacklist of tasks to disable any update/upload/telemetry/report, etc
        $blackList="update|upload|telemetry|report|experience|schedule|sync|^\\{|\\AC"+
        "|\\ASUS|^\\ATK|^\\AVGPCTun|^\\Acer|\\Ad|\\App|Overseer|^\\BacK|\\Blue|^\\ByteF"+
        "|^\\CCl|^\\CL|^\\Creat|^\\Dash|^\\Easy|^\\Egis|^\\EPSON|^\\FubT|\\HP|\\Intel"+
        "|\\Lenovo|\\Off|^\\Priv|\\.NET|\\Auto\|\\Broker|\\Clip|\\Cu|\\Dev|\\Diagn|\\Disk"+
        "|\\DUSM|\\EDP|\\Enterpr|\\Error|\\Feedb|\\File|\\Flight|\\Hello|\\Input|\\Inst"+
        "|\\Inter|\\Lang|\\License|\\Locat|\\Ma|\\Mobil|\\MUI|\\Net|\\Nla|\\Perf|\\PI"+
        "|\\Pow|\\Push|\\RA|\\Re|\\Se|\\Sh|\\Side|\\Softw|\\Sp|\\St|\\Subs|\\Sysmain"+
        "|\\TP|\\UN|\\UPnP|\\USB|\\User|\\WC|\\WD|\\Windows Activ|\\Windows Defender Ver"+
        "|\\Windows Filt|\\WindowsBack|\\WindowsCol|\\Winin|\\Wlan|\\WOF|\\Work|\\Wwan"+
        "|\\Xbl|^\\Mini|^\\Mir|^\\Mo|^\\Ne|^\\Norton WSC|^\\np|^\\Nv|^\\OIns|^\\Opt"+
        "|^\\PD|^\\Qu|^\\Rt|^\\Sams|^\\SCC|^\\Smart|\\Sony|^\\Swe|^\\Sym|^\\Tun"+
        "|^\\Ubt|^\\UMon|^\\wat|^\\Ya"
        
          # This is the RegEx match whitelist of tasks that won't be disabled
        $whiteList="\\AppListB|\\CertificateServ|\\Chkdsk|\\Data Int|\\DirectX"+
        "|\\MemoryDiag|\\SystemSound|\\PI\\Secure|\\Plug |\\Printing|\\Registry"+
        "|\\SystemRestore|\\Task Manager|\\IpAddressC|\\MsCtfMonitor|\\Time |\\sihpost"
        
          # can't use "$?" no good if 2>null, use $LastExitCode instead
        SCHTASKS /query /tn isidummy >null 2>&1
          # if exist delete it
        if ($lastexitcode -eq 0) { SCHTASKS /delete /tn isidummy /f >null 2>&1}
          # create dummy enabled task to extract localized names
        SCHTASKS /create /sc monthly /tn isidummy /tr clip.exe >null 2>&1
          # $tarea[0] localized headers: [1] "TaskName"; [11] "Scheduled Task State"
        $tarea=SCHTASKS /query /tn isidummy /v /fo csv
          #[0] has headers names array
        $campos = ($tarea[0] -split ',')
          # Local names of "TaskName"; "Scheduled Task State" (may use .Trim('"') to remove "
        $localTN=$campos[1]; $localSchedState=$campos[11]
          #tarea[1] has isidummy values
        $campos = ($tarea[1] -split ',')
          # local name of "Enabled"
        $localEnabled=$campos[11]
          # remove auxiliary dummy task
        SCHTASKS /delete /f /tn "isidummy" >null 2>&1
          # Write localized names (ie SPA): "Nombre de tarea""Estado de tarea programada""Habilitado"
        "Localized Names: " + $localTN + $localSchedState + $localEnabled
        
          # this will find all enabled tasks, $localXXX will be replaced with localized names here:
        $docommand= "`$tareas=SCHTASKS /Query /V /FO CSV | ConvertFrom-Csv | where-object {`$_.$localSchedState -eq $localEnabled }"
          # SPA will execute: $tareas=SCHTASKS /Query /V /FO CSV | ConvertFrom-Csv | where-object { $_."Estado de tarea programada" -eq "Habilitado"}
        Invoke-Expression $docommand
          # extract all tasknames as a single string
        $nombres=$tareas | Select-Object -Property $localTN.trim('"') | out-string
          # "convert to array of strings separating in NewLines, first 3 lines are headers
        $nombres= $nombres -split "\n", 0, "multiline"
          # remove header strings (first 3 items), and duplicates
        $nombres= $nombres[3..$nombres.count] | sort -unique
          # fill toDisableArr array from allTasks ($nombres) matching blacklist
        $toDisableArr= @();
        foreach ($tarea in $nombres) {
          if ($tarea -match $blackList) { $toDisableArr+= $tarea.TrimEnd() }
        }
          # parse toDisableArr, excluding whitelisted items
        foreach ($tarea in $toDisableArr) {
          if ($tarea -notmatch $whiteList) {
            echo $tarea
            # SCHTASKS /change /disable /tn $tarea
          }
        }
        

        【讨论】:

        • 要禁用锁定任务,我们可以使用 NirSoft AdvancedRun.exe,只需将最后一个命令替换为: $doArguments= "/EXEFilename "$env:windir\System32\SCHTASKS.EXE" /CommandLine '/change /disable /tn "$tarea"' /运行方式 8 /运行”;启动进程 ""$env:SystemDrive\UT\AdvancedRun.exe"" $doArguments
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-07
        • 2022-12-01
        • 2014-12-23
        • 2016-03-28
        • 2015-07-22
        • 1970-01-01
        相关资源
        最近更新 更多