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

PowerShell创建计划任务无法重启Tssdis服务问题排查

计划任务无法触发Tssdis服务重启的问题排查与解决

问题分析

你在虚拟机上创建的计划任务注册成功,但停止Tssdis服务后未触发重启,核心问题集中在命令语法错误、触发器配置不完整、用户身份格式不正确这三点。

解决方案

1. 修正计划任务的命令语法

原命令中双引号嵌套导致PowerShell解析失败,需调整引号使用方式,同时建议添加-NoProfile避免加载用户配置文件干扰执行:

# 正确的Action写法(转义内部双引号)
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -Command ""Get-Service -Name 'Tssdis' | Where-Object {`$_.Status -eq 'Stopped'} | Restart-Service"""

# 或者用Here-String更易读
$command = @"
Get-Service -Name 'Tssdis' | Where-Object `$_.Status -eq 'Stopped' | Restart-Service
"@
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -Command $command"

2. 完善触发器配置

原触发器未设置重复持续时长,导致任务仅执行一次后停止。需添加无限重复的配置:

$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) `
  -RepetitionInterval (New-TimeSpan -Minutes 3) `
  -RepetitionDuration ([TimeSpan]::MaxValue) # 设置为无限重复

3. 修正用户身份格式

  • 本地管理员:需使用.admin格式,而非直接写admin
  • 域用户:使用DOMAIN\admin格式,查看当前机器所属域名可执行:
    # 方法1:查看机器域名
    Get-WmiObject Win32_ComputerSystem | Select-Object -ExpandProperty Domain
    # 方法2:查看当前用户的域/本地标识
    whoami
    
  • 使用NT AUTHORITY\SYSTEM身份时,默认有权限重启服务,若仍失败,可检查Tssdis服务的安全设置:
    打开服务管理器 → 找到Tssdis服务 → 右键「属性」→「安全」标签,确认SYSTEM账户拥有「启动、停止和暂停」权限。

4. 调试排查技巧

  • 添加执行日志:修改命令记录执行情况,方便定位问题:
    $command = @"
    Get-Service -Name 'Tssdis' | Where-Object `$_.Status -eq 'Stopped' | ForEach-Object {
        Restart-Service `$_
        Write-Output "$(Get-Date): 重启Tssdis服务成功" >> C:\tssdis_restart.log
    }
    "@
    
  • 查看任务历史:打开「任务计划程序」,找到tssdis-restart任务,查看「历史记录」选项卡,检查是否有执行错误(如权限不足、命令语法错误)。
  • 手动测试任务:右键任务选择「运行」,立即触发执行,观察服务是否重启,同时查看日志确认执行结果。

完整修正代码

# 创建触发器(无限重复,每3分钟执行一次)
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) `
  -RepetitionInterval (New-TimeSpan -Minutes 3) `
  -RepetitionDuration ([TimeSpan]::MaxValue)

# 创建执行动作(带日志输出)
$command = @"
Get-Service -Name 'Tssdis' | Where-Object `$_.Status -eq 'Stopped' | ForEach-Object {
    Restart-Service `$_
    Write-Output "$(Get-Date): 重启Tssdis服务成功" >> C:\tssdis_restart.log
}
"@
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-NoProfile -Command $command"

# 注册任务(使用本地管理员身份)
$taskParams = @{
    Action       = $action
    Trigger      = $trigger
    User         = ".\admin"
    TaskName     = 'tssdis-restart'
    Description  = 'Respawn tssdis process in event of failure'
    RunLevel     = 'Highest'
}

Register-ScheduledTask @taskParams -Force # 添加-Force覆盖原有任务

# 验证任务是否注册成功
Get-ScheduledTask | Where-Object {$_.TaskPath -eq "\\" -and $_.TaskName -eq 'tssdis-restart'}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:10:23