我正在尝试使用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 -
我试过逃避它等(这适用于双引号,但不是单),但似乎无法弄清楚..?!
bash及其引用规则的问题
在ls -Q中没有正确引用换行符
无法通过variables内部的引号传递wgetvariables
我的xmlstarlet更新命令有什么问题?
非常感谢您的任何build议。
Shell:并行命令,通过root用户以postgres身份执行
如何在.htaccess文件中阻止来自多个引用者和子域的引荐stream量?
bash如何处理嵌套引号?
仅使用bash /标准Linux命令在string中剥离单引号和双引号
需要帮助使用NtCreateFile()打开fileIndex
最近我偶然发现了同样的问题。
我需要使用以下命令将任务添加到任务中:
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 \UNCtoScript.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