You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中向SCHTASKS传递变量以远程控制打印队列?

实现带参数的打印队列暂停/恢复计划任务(避免高权限)

背景

我们需要让已认证域用户远程暂停/恢复Windows打印服务器的打印队列,但不想授予权限过高的「管理打印机」角色。当前已通过客户端计划任务实现基础功能,但计划任务中的打印服务器名和打印机名是硬编码的,需实现从客户端触发时动态传递这两个参数。


解决步骤

1. 修改计划任务以支持参数接收

打开任务计划程序,找到已创建的「Pause Printer」任务,按以下步骤修改:

  • 切换到「操作」选项卡,编辑现有的PowerShell脚本操作
  • 将脚本内容替换为支持参数的版本:
param(
    [Parameter(Mandatory=$true)]
    [string]$SrvName,
    [Parameter(Mandatory=$true)]
    [string]$PrName
)
Invoke-Command -ComputerName $SrvName -ScriptBlock {(Get-WmiObject Win32_Printer -Filter "Name='$using:PrName'").Pause()}
  • 在「添加参数(可选)」输入框中填写 $(Arg0) $(Arg1),让计划任务能够接收外部传入的两个参数(分别对应服务器名和打印机名)

2. 客户端触发命令传递参数

在客户端执行以下命令,动态传递打印服务器名和打印机名到计划任务:

# 定义目标参数
$targetServer = "PrintSrv01"
$targetPrinter = "OfficeMainPrinter"

# 触发计划任务并传入参数
Start-Process -FilePath "schtasks" -ArgumentList "/run /TN:`"Pause Printer`" /TR `"powershell.exe -Command ""param(`$SrvName,`$PrName); Invoke-Command -ComputerName `$SrvName -ScriptBlock {(Get-WmiObject Win32_Printer -Filter 'Name=`'`$using:PrName`'').Pause()}"" $targetServer $targetPrinter`"" -Wait -PassThru

注:WS2016环境下需确保计划任务权限设置正确,允许已认证用户查看并执行该任务。

3. 扩展实现恢复打印队列功能

如果需要恢复队列,可创建「Resume Printer」计划任务,脚本替换为:

param(
    [Parameter(Mandatory=$true)]
    [string]$SrvName,
    [Parameter(Mandatory=$true)]
    [string]$PrName
)
Invoke-Command -ComputerName $SrvName -ScriptBlock {(Get-WmiObject Win32_Printer -Filter "Name='$using:PrName'").Resume()}

触发命令只需将计划任务名称改为「Resume Printer」即可。


内容的提问来源于stack exchange,提问作者MMAX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:25:58