将参数传递给计划任务中的powershell脚本

时间:2016-03-29 23:11:12

标签: windows powershell

我正在尝试创建一个计划任务,该任务将运行带有1个参数的Powershell脚本 - 这是在安装了Powershell v5的Server 2012上。到目前为止,我已经能够运行任务,但它不能识别我的参数值 - 我调用的脚本中的值为null。以下是我必须创建计划任务的内容:

$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参数。我也试过-Command而不是-File作为Argument值,但我得到了相同的结果。

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

围绕param的单引号似乎无论做什么

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

到目前为止,我所做的一切都不会让参数通过。我错过了什么?

1 个答案:

答案 0 :(得分:1)

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

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

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

然后你可以删除-ParamName并使用position传递它。