2014-10-16 10 views
4

Я пытаюсь использовать SCHTASKS для создания запланированной задачи в Windows. Параметры включают одинарные кавычки. Если я создам свою задачу вручную, она будет работать. В задач Windows Scheduler GUI, "Подробности" (на вкладке действия) показать, как это:Одиночные кавычки в команде schtasks

powershell (New-Object System.Net.WebClient).DownloadString ('http://mywebserver/myscript.ps1\') | powershell.exe -noprofile - 

Однако, когда я войти в мою команду SchTasks ...

schtasks.exe /Create /TN "My Task" /TR "powershell (New-Object System.Net.WebClient).DownloadString ('http://mywebserver/myscript.ps1\') | powershell.exe -noprofile -" /SC MINUTE /mo 60 /RL HIGHEST 

В этом то появляется в графическом интерфейсе пользователя (обратите внимание на интерпретацию одной цитаты к двойному один на первом, но не второй экземпляр:

powershell (New-Object System.Net.WebClient).DownloadString ("http://mywebserver/myscript.ps1\') | powershell.exe -noprofile - 

Я пытался избежать этого и т.д. (который работает отлично подходит для DOUBL e котировки, но не для одного), но, похоже, не может понять это.?!

Большое спасибо за любые предложения.

+0

Проблема будет в 'schtasks.exe' выполнения команд библиотеки аргумента разборе. Вероятно, нет никакого способа сделать это из командной строки. Попробуйте вместо этого использовать API-интерфейс планировщика задач (http://msdn.microsoft.com/en-us/library/windows/desktop/aa383607%28v=vs.85%29.aspx). –

ответ

0

PowerShell использует неудачный обратный ход (`) в качестве escape-символа. Обратная косая черта не имеет особого значения. Еще лучше, малоизвестный трюк, используйте -%.

schtasks.exe --% /F /Create /TN "My Task" /TR "powershell (New-Object System.Net.WebClient).DownloadString('http://mywebserver/myscript.ps1') | powershell.exe -noprofile" /SC MINUTE /mo 60 /RL HIGHEST 

Который в основном означает, «Dear PowerShell анализатор, найти Schtasks.exe в пути, запустить его и передать его, что приходит после„-%“ТОЧНО, как это.»

+0

Привет, ни один из этих методов не работает. :(Обратный тик только добавляется, как если бы это был любой другой символ, а метод -% просто ошибки: «ОШИБКА: Неверный аргумент/параметр -'--%». – BSUK

+0

Вы не используете это в PowerShell, вы запустили его в cmd.exe. Мой плохой тогда. Я вернусь;) – evilSnobu

+0

Yup, извините .. добавив schtask через партию (для использования в GPO). Спасибо за помощь. – BSUK

0

Тогда я предложил бы делать это вместо:

schtasks.exe /F /Create /TN "My Task" /SC MINUTE /mo 60 /RL HIGHEST /TR "powershell.exe -ExecutionPolicy Bypass -NoProfile -File \\UNC\to\Script.ps1" 

И имея все исполнения внутри PS1.

Обратите внимание, что вы будете использовать «NT AUTHORITY \ SYSTEM» для этого пути UNC, необходимы соответствующие разрешения.

0

Следующие могут предоставить вам то, что вам нужно. Но он будет работать как единая команда, а не команда с args.

schtasks.exe /Create /TN "My Task" /TR ""\""powershell (New-Object System.Net.WebClient).DownloadString ('http://mywebserver/myscript.ps1\') "|" powershell.exe -noprofile -\"" /SC MINUTE /mo 60 /RL HIGHEST 
3

Я наткнулся на ту же проблему в последнее время.

мне нужно, чтобы добавить действие к задаче с помощью этой команды:

Powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object Net.WebClient).DownloadString('https://url/to/script.ps1'))" 

Это вполне возможно создать задачу с помощью этой команды вручную, но с помощью команды schtasks, это, видимо, невозможно, чтобы сделать апостроф внутри поля аргументов задачи (по крайней мере, без обратной косой черты перед ней, что делает ее непригодной).

Таким образом, после некоторого пустячный, я нашел способ указать аргументы без используя одиночные кавычки:

Powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object Net.WebClient).DownloadString(\"https://url/to/script.ps1\"))" 

И это также работает с менеджером задач ... Ура!

Потребовалось еще немного бесполезный, но я получил эту работу, используя команду schtasks вручную (в командной строке, а не в PowerShell), как это:

schtasks /Create /TN "My Task Name" /RU SYSTEM /SC DAILY /ST 23:00 /TR "Powershell -NoProfile -ExecutionPolicy Bypass -Command \"iex ((New-Object Net.WebClient).DownloadString(\\\"https://url/to/script.ps1\\\""))\"" 

Да, те, которые тройную обратную косую черту вокруг URL ... в основном, цитата должна быть экранирована обратным слэшем, а обратная косая черта должна быть экранирована другим обратным слэшем.

Теперь дальше, чтобы получить эту работу с PowerShell ... Некоторые еще возился позже, я пришел к этому результату:

schtasks /Create /TN "My Task Name" /RU SYSTEM /SC DAILY /ST 23:00 /TR "Powershell -NoProfile -ExecutionPolicy Bypass -Command \`"iex ((New-Object Net.WebClient).DownloadString(\\\`"https://url/to/script.ps1\\\`"))\`"" 

который является в основном еще один слой побега: котировки должны быть замаскирована кавычка.

Моя голова начинает вращаться, но я рад, что приручил зверя :)

Смежные вопросы