在计划任务中传递参数给PowerShell脚本

5
我正在尝试创建一个定时任务,运行一个带有1个参数的Powershell脚本 - 这是在安装了Powershell v5的Server 2012上。到目前为止,我已经能够让任务运行,但它无法识别我的参数值 - 我调用的脚本中该值为空。这是我创建定时任务的代码:
$TicketTime = "9:00pm"
$EmpID = "1234"
$Firstname = "Test"
$Lastname = "User"

$Action = New-ScheduledTaskAction -Execute "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -Argument "-ExecutionPolicy ByPass -File C:\Scripts\Term.ps1 -EmpID '$EmpID'"
$Trigger = New-ScheduledTaskTrigger -Once -At "03/29/2016 $TicketTime"
$Task = New-ScheduledTask -Action $Action -Trigger $Trigger -Settings (New-ScheduledTaskSettingsSet)
$Task | Register-ScheduledTask -TaskName "$Firstname $Lastname" -User "myuser" -Password "mypass"

这段代码可以正常执行,但是无法识别-EmpID参数。我还尝试将Argument值改为-Command,但是结果仍然相同。

-ExecutionPolicy ByPass -Command "& C:\Scripts\Term.ps1 -EmpID 1234"

在参数周围使用单引号似乎也没有任何作用。

-ExecutionPolicy ByPass -Command "& C:\Scripts\Term.ps1 -EmpID '1234'"

到目前为止,我做的任何操作都无法传递参数。我错过了什么?

2个回答

3

您可以尝试将参数声明为位置而不是命名方式:

[CmdletBinding()]
Param (
    [Parameter(Position=0)]
    [string]$Ticket
)

"-ExecutionPolicy ByPass -File C:\Scripts\Term.ps1 '$EmpID'"

那么你可以放弃-ParamName并通过位置传递它。

0
你可以使用-File选项,只需要将字符串分离出来:
更改
-ExecutionPolicy ByPass -File "& C:\Scripts\Term.ps1 -EmpID 1234"

-ExecutionPolicy ByPass -File "C:\Scripts\Term.ps1" -EmpID "1234"

完整的字符串看起来像这样:

$Action = New-ScheduledTaskAction -Execute "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -Argument "-ExecutionPolicy ByPass -File `"C:\Scripts\Term.ps1`" -EmpID `"$EmpID`""

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接