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

重启后执行脚本并自动清理的PowerShell计划任务问题求助

问题分析与修正方案

你的代码存在多个语法和逻辑错误,导致计划任务无法执行、日志无内容,以下是具体问题和修复后的完整代码:

核心错误点

  • $Environment变量赋值错误:反引号位置不当,且Get-ItemProperty返回的是对象,直接拼接会得到对象的字符串表示而非目标属性值,需指定具体属性(比如注册表项中的AccountName,根据实际情况调整)。
  • 未定义$FileName变量:多处使用$FileName但未提前赋值,导致文件路径无效。
  • New-Item参数错误:Path中多余括号,且未正确使用$FileName变量。
  • 计划任务触发器错误:误用New-JobTrigger(用于PowerShell Job),计划任务应使用New-ScheduledTaskTrigger。
  • Add-Content参数顺序颠倒:应先指定-Path再指定-Value。
  • 脚本生成逻辑缺失:重启后原会话变量丢失,需将日志文件路径硬编码到生成的TaskScript.ps1中,而非依赖当前会话的变量。
  • 无效函数调用:DoFirst函数不存在,应直接调用日志写入逻辑。

修复后的完整代码

# 获取注册表中的环境属性(替换为实际需要的属性名,比如AccountName)
$Environment = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\WOW6432Node\<software>\A180\12.2\Default\Account').AccountName
$ScriptType = 'Test'
$ScriptName = 'This might work'
$FolderPath = 'C:\Log\scripts\test'

# 定义完整日志文件名
$FileName = Join-Path -Path $FolderPath -ChildPath "$Environment_$ScriptType_$ScriptName.log"

# 若日志文件不存在则创建
if (-not (Test-Path -Path $FileName)) {
    New-Item -ItemType File -Path $FileName -Force | Out-Null
}

# 创建计划任务的函数
function Schedule-Task {
    $scriptPath = 'C:\My Folders\TaskScript.ps1'
    $actionArgs = "-ExecutionPolicy Bypass -File `"$scriptPath`""
    $Action = New-ScheduledTaskAction -Execute 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' -Argument $actionArgs
    $Trigger = New-ScheduledTaskTrigger -AtStartup -RandomDelay (New-TimeSpan -Minutes 5)
    $Principal = New-ScheduledTaskPrincipal -UserId 'NT AUTHORITY\SYSTEM' -LogonType ServiceAccount -RunLevel Highest
    Register-ScheduledTask -TaskName 'Post_Reboot_Script' -Principal $Principal -Action $Action -Trigger $Trigger -Force
}

# 生成重启后执行的脚本
function Create-Script {
    $scriptContent = @"
# 写入重启完成日志
`$DateMessage = "$((Get-Date -Format G)) Reboot complete"
Add-Content -Path "$FileName" -Value `$DateMessage -Encoding Ascii

# 清理脚本和计划任务
Remove-Item -Path 'C:\My Folders\TaskScript.ps1' -Force -ErrorAction SilentlyContinue
Unregister-ScheduledTask -TaskName 'Post_Reboot_Script' -Confirm:`$false -ErrorAction SilentlyContinue
"@
    $scriptPath = 'C:\My Folders\TaskScript.ps1'
    # 确保脚本目录存在
    if (-not (Test-Path -Path (Split-Path -Path $scriptPath))) {
        New-Item -ItemType Directory -Path (Split-Path -Path $scriptPath) -Force | Out-Null
    }
    Set-Content -Path $scriptPath -Value $scriptContent -Encoding Ascii
}

# 执行脚本生成和计划任务注册
Create-Script
Schedule-Task

注意事项

  1. 替换<software>为实际注册表路径中的软件名称,同时将AccountName替换为你需要从注册表读取的具体属性名。
  2. 脚本需以管理员权限运行,否则无法创建计划任务、写入C盘目录。
  3. -ExecutionPolicy Bypass用于避免PowerShell执行策略限制,若你的环境执行策略允许,可移除该参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:22:47