Как избежать двойных кавычек на паролях schtasks - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь создать запланированное задание с помощью команды schtasks и пытаюсь избежать двойных кавычек (и других возможных специальных символов) для пароля на / RP параметр.

SCHTASKS /create /tn "Task name" /tr "powershell D:\path\to\powershell\script\powershellScript.ps1" /ru userName /rp pass"word /rl HIGHEST /f /sc MONTHLY /st 02:00

Некоторые примеры того, что я пробовал до сих пор (после долгих поисков), ничего не работает (и все комбинации, которые я мог придумать):

  • Заключение пароля в двойные кавычки: / rp "pass" word "
  • Заключение пароля в одинарные кавычки: / rp 'pass' word '
  • Экранирование специальных символов с помощью ^: / rp "pass ^" word "
  • Экранирование специальных символов с помощью:: / rp «pass» «word»
  • Экранирование специальных символов с помощью: / rp "pass \" word "

Каждый раз, когда я получаю сообщение об ошибке, всегда одно и то же (или очень похожее), предполагая, что двойные кавычки приводят к прерыванию интерпретации команды:

Неверный синтаксис. Обязательный параметр «sc» отсутствует. Тип "CREATE /?" за использование.

Это вообще возможно?

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Проблема в том, что вы не избегаете своих обратных слешей, которые являются частью команды. Я столкнулся с той же проблемой при попытке запланировать синхронизацию для запуска, а также при передаче параметров, указывающих, где искать; проблемные параметры -generate="" и -home="C:\SyncThing\config". Мне была нужна команда:

schtasks /create /sc onstart /TN SyncThing /TR "C:\\SyncThing\\syncthing.exe -home=\"C:\\SyncThing\\config\" -generate=\"\""

Итак, поместите команду вместе с ее параметрами в двойные кавычки, и перед этим перед двойными кавычками и обратным слешем ставите обратную косую черту. В вашем случае это будет отображать:

SCHTASKS /create /tn "Task name" /tr "powershell D:\\path\\to\\powershell\\script\\powershellScript.ps1" /ru userName /rp pass\"word /rl HIGHEST /f /sc MONTHLY /st 02:00
0 голосов
/ 31 июля 2018

Поскольку создание задачи выполняется из сценария PowerShell, в данном конкретном случае я закончил поиском по тексту пароля и анализом наличия двойных кавычек.

Если это так, то schtasks предложит повторно ввести пароль, и, таким образом, он не потерпит крах.

if($password.contains('"')){ #if the password contains double quotes, prompt them, to avoid the task creation to crash
    SCHTASKS /create /tn "Task name" /tr "powershell D:\path\to\powershell\script\powershellScript.ps1" /ru userName /rp * /rl HIGHEST /f /sc MONTHLY /st 02:00
}else{
    SCHTASKS /create /tn "Task name" /tr "powershell D:\path\to\powershell\script\powershellScript.ps1" /ru userName /rp "$password" /rl HIGHEST /f /sc MONTHLY /st 02:00
}
...