2014-10-16 2 views
4

SCHTASKS를 사용하여 Windows에서 예약 된 작업을 만들려고합니다. 매개 변수에는 작은 따옴표가 포함됩니다. 수동으로 작업을 만들면 작동합니다. Windows 작업 스케줄러 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을 위해 잘 작동하는 그것을 탈출 시도했다 : 처음에 이중 하나에 작은 따옴표의 해석에주의가 아니라 두 번째 인스턴스 (GUI에 나타납니다 전자 따옴표 그러나 단 하나를 위해 아닙니다) 그러나 그것을 파악하는 것을 보일 수 없다. ..!

미리 제안 해 주셔서 감사드립니다.

+0

문제는'schtasks.exe' 런타임 라이브러리 명령 인수 구문 분석에있을 것입니다을 지배 기뻐요. 명령 줄에서이 작업을 수행 할 방법이 없을 수도 있습니다. 대신 [task scheduler API] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa383607%28v=vs.85%29.aspx)를 사용해보십시오. –

답변

0

PowerShell은 불행한 백틱 (`)을 이스케이프 문자로 사용합니다. 백 슬래시는 특별한 의미가 없습니다. 더 나은, 조금 알려진 트릭, 사용 - %.

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 

는 기본적으로 " '- %'친애하는 PowerShell을 파서, 경로에 Schtasks.exe에를 찾아 실행하고 다음에 오는 어떤을 전달합니다. 그것이 그대로"의미합니다

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 내부의 모든 실행을 갖는

+0

안녕하세요, 그 방법 중 어느 것도 불행하게도 작동하지 않습니다. :(다른 눈금처럼 다시 틱이 추가되고 - ​​% 메서드는 단순히 오류가 발생합니다 : "ERROR : 잘못된 인수/옵션 - '- %'. – BSUK

+0

PowerShell에서는 실행하지 않습니다. 너는? cmd.exe에서 실행 중이다. 내 잘못이야. 내가 돌아올거야.) – evilSnobu

+0

죄송합니다. 일괄 처리를 통해 schtask를 추가하는 것입니다. (GPO 사용). – BSUK

0

그럼 내가 대신이 일을 제안한다.

해당 UNC 경로에 'NT AUTHORITY \ SYSTEM'으로 지정되므로 적절한 사용 권한이 필요합니다.

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\"))" 

그리고 이것은 또한 야호 ... 작업 관리자에서 작동합니다!

그것은 좀 더 손보는했다,하지만 문제는이 같은 (안 PowerShell에서 명령 프롬프트에서) 수동으로 schtasks 명령을 사용하여 작업 할 수있어 : URL을 주위

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\\\""))\"" 

예, 사람들은 삼중 백 슬래시를 ... 기본적으로 견적은 백 슬래시로 이스케이프해야하며 백 슬래시는 다른 백 슬래시로 이스케이프해야합니다.

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\\\`"))\`"" 

기본적 탈출의 또 다른 계층입니다 : : 이제

하기에이 파워 쉘에서 작동하도록하기 위해 ... 좀 더 나중에 하구,이 결과에 온 따옴표가로 이스케이프해야 역겨운.

머리가 회전하기 시작하지만 난 짐승 :