Powershell.New-ScheduledTaskAction.Параметр Count распознается в одном операторе, но не в другом. - PullRequest
0 голосов
/ 13 апреля 2019

Я пытаюсь запланировать задачу Powershell, часть которой регулярно проверяет подключение к Интернету и отправляет вывод в файл.Параметр 'Count' для командлета 'Test-Connection' принимается как отдельный оператор, но при пересадке в 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 ]

1 голос
/ 14 апреля 2019

Параметр -Argument в New-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$.

Подробнее см. О правилах цитирования объяснение раскрытия строки и использования обоих типов кавычек.

0 голосов
/ 28 апреля 2019

Ответ от AdminOfThings устранил сообщение об ошибке.Мне удалось зарегистрировать выписку как запланированное задание.

...