Powershell - 使用Invoke-Command调用schtasks时出错

时间:2015-08-12 21:17:08

标签: windows powershell

我目前正在创建一个脚本,需要在第二天凌晨3点在远程计算机上安排重新启动。由于我不能确定我们网络上的所有计算机都使用Powershell v3或更高版本,因此我不能依赖New-ScheduledTask cmdlet。因此,我决定使用schtasks。由于某些未知原因,当我使用带有schtasks的/ sd参数的变量时,我收到一条错误,指出/ sd值为某个值。但是,如果我手动输入日期(例如,2015-08-13),它就能完美运行。

所以,这是我的问题。长话短说......

PS U:\> $tomorrowDate = ((Get-Date).AddDays(1)).ToString(("yyyy-MM-dd"))
PS U:\> $tomorrowDate | gm

   TypeName: System.String

PS U:\> Invoke-Command -computername p199403.mydomain -ErrorAction stop -ScriptBlock { schtasks /F /create /sc once /tn "Reboot to delete offline cache" /tr "shutdown -r -f" /sd $tomorrowDate /st 03:00 }
Erreur: Syntaxe incorrecte. Valeur attendue pour '/sd'.
#Translation : Error : Invalid Syntax. Value required for '/sd'

不起作用,但下面的代码正常工作(正如您所见,我“强制”将我的日期作为字符串,以确保使用相同类型的“变量”进行测试):

PS U:\> Invoke-Command -computername p199403.mydomain -ErrorAction stop -ScriptBlock { schtasks /F /create /sc once /tn "Reboot to d
elete offline cache" /tr "shutdown -r -f" /sd ""2015-08-13"" /st 03:00 }
Op'ration r'ussie : la tƒche planifi'e "Reboot to delete offline cache" a 't' cr''e.
# Translation : Operation successful : The task "Reboot to delete offline cache" is created

我无法看到问题所在,所以任何建议或建议都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

所以,为了进一步通知,briantist对于dupplicate是正确的:Passing Powershell variables into a scriptblock

所以,下面的代码完美无缺:

PS U:\> $tomorrowDate = ((Get-Date).AddDays(1)).ToString(("yyyy-MM-dd"))    
PS U:\> Invoke-Command -computername p199403.mydomain -ErrorAction stop -ScriptBlock { schtasks /F /create /sc once /tn "Reboot to delete offline cache" /tr "shutdown -r -f" /sd $args[0] /st 03:00 } -argumentlist $tomorrowDate

谢谢!