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

PowerShell远程创建计划任务时ScriptBlock无法获取参数问题

问题分析与解决

你遇到的问题核心是远程ScriptBlock无法直接访问本地函数的变量——Invoke-Command的脚本块运行在远程主机的独立会话中,默认不会继承本地函数里的$day、$time这些变量,导致New-ScheduledTaskTrigger的参数缺失,才抛出了那个转换错误。

另外还有个小细节:你定义$time时用了$Hour(大写H),但函数参数是$hour(小写h),PowerShell虽然大小写不敏感,但统一变量名能避免潜在问题。

修正后的代码

Function CreateDaTask($hostname,$day,$hour,$minute,$ampm){ 
    # 统一变量名大小写,避免歧义
    $time = "$hour":"$minute$ampm" 
    #测试参数输出
    write-host "Day is $day" 
    write-host "time is $time" 
    Write-Host "host name is $hostname" 
    Invoke-Command -ComputerName $hostname -Credential (Get-Credential) -Scriptblock { 
        # 使用$Using:前缀引用本地变量
        $trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek $Using:day -At $Using:time 
        $Action = New-ScheduledTaskAction -Execute "shutdown" -arg '/r /t 0 /f /c "Test"' 
        $principal = New-ScheduledTaskPrincipal -GroupID "BUILTIN\Administrators" -RunLevel Highest 
        Register-ScheduledTask -TaskName "Testik111" -Trigger $trigger -Action $action -Principal $principal -Description "Test" -force 
    } 
}

关键说明

  • $Using:作用域修饰符:这是PowerShell专门用来在远程/后台脚本块中引用本地变量的语法,它会把本地变量的值序列化后传递到远程会话中,让脚本块能正确获取参数。
  • 变量名统一:把$Hour改成$hour,和函数参数名保持一致,避免因大小写导致的意外问题(虽然PowerShell大小写不敏感,但保持一致性是良好的编码习惯)。

这样修改后,远程的New-ScheduledTaskTrigger就能正确拿到$day和$time的值,创建计划任务的逻辑就能正常执行了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 13:27:46