schtasks命令中的单引号

我正在尝试使用SCHTASKS在Windows上创build一个计划任务。 参数包括单引号。 如果我手动创build我的任务,它的工作。 在Windows任务计划程序GUI中,“详细信息”(在操作选项卡内)显示如下:

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

但是,当我input我的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 

然后这会出现在GUI中(注意第一个单引号解释为双引号,而不是第二个实例:

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

我试过逃避它等(这适用于双引号,但不是单),但似乎无法弄清楚..?!

非常感谢您的任何build议。

最近我偶然发现了同样的问题。

我需要使用以下命令将任务添加到任务中:

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

这基本上是另一个转义层:引号需要通过反引号来逃脱。

我的头开始旋转,但我很高兴我驯服了野兽:)

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中执行所有的执行。

请注意,您将作为“NT AUTHORITY \ SYSTEM”来到该UNC路径,相应的权限是必需的。

以下可以得到你所需要的。 但它将作为一个单一的命令运行,而不是一个带有参数的命令。

 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