电源外壳。新ScheduledTaskAction。 Count参数在一个语句中识别但不在另一个语句中识别

问题描述 投票:0回答:2

我正在尝试安排一个Powershell任务,其中一部分定期测试互联网连接并将输出发送到文件。 “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'参数是问题所在。究竟是什么阻止相同的参数被识别?

powershell windows-10 scheduled-tasks cmdlet
2个回答
1
投票

-ArgumentNew-ScheduledTaskAction参数需要传递一个字符串。将参数值括在引号中会使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'

这里双引号单引号的原因是保持字符串不变,称为文字字符串。单引号内的所有内容都告诉PowerShell不执行变量扩展。您可以使用双引号,这将需要转义PowerShell的特殊字符,您希望在您的情况下像$"一样传递。另一种方法是将参数值作为字符串存储在变量中(仍然使用单引号)。然后将变量传递给-Argument参数。

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

$a = "I am a string"
$a.gettype().name
String

$b = "What am I? $a"
$b
What am I? I am a string

$c = 'What am I? $a'
$c
What am I? $a

$d = 'I want to keep my "double quotes" and $dollars$.'
$d
I want to keep my "double quotes" and $dollars$.

有关字符串扩展和使用两种类型的引号的进一步说明,请参阅About Quoting Rules


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.