Параметр -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$.
Подробнее см. О правилах цитирования объяснение раскрытия строки и использования обоих типов кавычек.