电源外壳。 New-ScheduledTaskAction。 Count参数在一个语句中可以识别,而在另一条语句中不能

时间:2019-04-13 19:13:53

标签: powershell windows-10 scheduled-tasks cmdlet

我正在尝试安排Powershell任务,该任务的一部分会定期测试Internet连接并将输出发送到文件。 'Test-Connection'cmdlet的'Count'参数被接受为独立语句,但是当移植到New-ScheduledTaskAction中并分配给变量时,'Count'参数不会被识别。

这有效:

Test-Connection 8.8.8.8 -Count 2 -Quiet | 
ForEach-Object {  "$(Get-Date -Format "[yyyy-MM-dd HH:mm:ss]") $_" } | 
Out-File -Append -FilePath C:\Users\xxxxxx\Desktop\internet-log.txt

但是转移到:

$InternetConnectionLog=New-ScheduledTaskAction 
-Execute "powershell.exe" 
-Argument Test-Connection 8.8.8.8 -Count 2 -Quiet | 
ForEach-Object {  "$(Get-Date -Format "[yyyy-MM-dd HH:mm:ss]") $_" } | 
Out-File -Append -FilePath C:\Users\xxxxxx\Desktop\internet-log.txt

我被告知:

New-ScheduledTaskAction : A parameter cannot be found that matches parameter name 'Count'.
At line:1 char:108
+ ... ute "powershell.exe" -Argument Test-Connection 8.8.8.8 -Count 2 -Quie ...
+                                                            ~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [New-ScheduledTaskAction], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,New-ScheduledTaskAction

所产生的错误消息专门指出问题所在的“ Count”参数。究竟是什么导致无法识别相同的参数?

2 个答案:

答案 0 :(得分:1)

-Argument的{​​{1}}参数期望将字符串传递给它。将参数值用引号引起来,PowerShell会将其解释为字符串。

New-ScheduledTaskAction

在此使用单引号而不是双引号的原因是将字符串原样保留,称为文字字符串。单引号内的所有内容都告诉PowerShell不要执行变量扩展。您可以使用双引号,这将需要转义您要实际传递的PowerShell特殊字符,例如$InternetConnectionLog = New-ScheduledTaskAction -Execute "powershell.exe" -Argument 'Test-Connection 8.8.8.8 -Count 2 -Quiet | ForEach-Object { "$(Get-Date -Format "[yyyy-MM-dd HH:mm:ss]") $_" } | Out-File -Append -FilePath C:\Users\xxxxxx\Desktop\internet-log.txt' $。另一种选择是将参数值作为字符串存储在变量中(仍然使用单引号)。然后只需将变量传递给"参数即可。

通过简单的示例,您可以看到所描述的行为:

-Argument

有关字符串扩展和使用两种引号的更多说明,请参见About Quoting Rules

答案 1 :(得分:0)

AdminOfThings的回答消除了错误消息。我能够将语句注册为计划任务。