带Powershell的schtasks和参数中带空格的脚本
我想计划一个Powershell脚本,该脚本包含一个参数,该参数中有一个带有schtasks.exe的空格。(Powershell版本2,Windows 7)。考虑到我在本论坛中读到的内容,我提出了以下表达式,将其输入Powershell命令行:带Powershell的schtasks和参数中带空格的脚本,powershell,arguments,space,windows-task-scheduler,Powershell,Arguments,Space,Windows Task Scheduler,我想计划一个Powershell脚本,该脚本包含一个参数,该参数中有一个带有schtasks.exe的空格。(Powershell版本2,Windows 7)。考虑到我在本论坛中读到的内容,我提出了以下表达式,将其输入Powershell命令行: schtasks.exe /create /f /tn "Mytaskname" /tr "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -command \`"& \
schtasks.exe /create /f /tn "Mytaskname" /tr "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -command \`"& \`'D:\myscript.ps1\`' \`'D:\Filename with Space.xml\`'" /SD 08/04/2016 /ST 09:00 /RU domain\username /RP /SC ONCE
不幸的是这不起作用。如果我手动安排任务,它将工作,并在任务计划器中显示以下条目:
程序/脚本
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
添加参数(可选)
有人能帮忙吗?
提前感谢阅读有关转义规则的内容:
- in(
符号和字符已在双引号字符串中转义)&
- 在(转义
嵌入双引号)“”
- 在schtasks.exe中(escape
嵌入双引号:通过中的示例学习)\“
-command
参数中的;pause
允许观察powershell脚本结果以进行调试;辅助ST*
变量仅用于更好的可读性(STn
=name,STe
=executable,STc
=command,STp
=parameter):
以及下面的powershell
脚本(尽管这并不重要):
输出(请注意,powershell
脚本输出在另一个窗口中可见):
阅读有关转义规则的信息:
- in(
符号和字符已在双引号字符串中转义)&
- 在(转义
嵌入双引号)“”
- 在schtasks.exe中(escape
嵌入双引号:通过中的示例学习)\“
;在-command
参数中暂停,允许观察powershell脚本结果以进行调试;辅助ST*
变量仅用于更好的可读性(STn
=名称,STe
=可执行,STc
=命令,STp
=参数):
以及下面的powershell
脚本(尽管这并不重要):
输出(请注意,powershell
脚本输出在另一个窗口中可见):
我忽略了,它甚至不足以模拟“添加参数(可选)”的字符串
这在手动调度参数中带有空格的powershell scirpt时效果很好。
我将JosefZ的cmd脚本转换为powershell脚本
$Taskname = "MyTaskName"
$Powershellpath = "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe"
$Powershellscript = "D:\PShell\SO\36493932 with spaces.ps1"
$Argument = "D:\bat\a b\testfile.txt"
$userdomain = “Domain”
$username = “User”
schtasks.exe /create /f /tn $Taskname /tr "$Powershellpath -command & \""\""\""$Powershellscript\""\""\"" \""\""\""$Argument\""\""\""" /SC ONCE /SD 10/04/2016 /ST 11:15 /RU $userdomain\$Username /RP
if($LASTEXITCODE -eq 0)
{
start-sleep -s 3
schtasks /Run /TN $Taskname
start-sleep -s 3
schtasks /End /TN $Taskname
}
我忽略了,它甚至不足以模拟“添加参数(可选)”的字符串
这在手动调度参数中带有空格的powershell scirpt时效果很好。
我将JosefZ的cmd脚本转换为powershell脚本
$Taskname = "MyTaskName"
$Powershellpath = "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe"
$Powershellscript = "D:\PShell\SO\36493932 with spaces.ps1"
$Argument = "D:\bat\a b\testfile.txt"
$userdomain = “Domain”
$username = “User”
schtasks.exe /create /f /tn $Taskname /tr "$Powershellpath -command & \""\""\""$Powershellscript\""\""\"" \""\""\""$Argument\""\""\""" /SC ONCE /SD 10/04/2016 /ST 11:15 /RU $userdomain\$Username /RP
if($LASTEXITCODE -eq 0)
{
start-sleep -s 3
schtasks /Run /TN $Taskname
start-sleep -s 3
schtasks /End /TN $Taskname
}
param([string] $InObject = $MyInvocation.InvocationName)
"{0} {1}" -f "listing:", "$InObject"
Get-Content "$InObject"
==> D:\bat\SO\36472103.bat
==> set "STn=MyTaskName"
==> set "STe=C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe"
==> set "STc=D:\PShell\SO\36493932 with spaces.ps1"
==> set "STp=D:\bat\a b\testfile.txt"
==> schtasks.exe /create /f /tn "MyTaskName" /tr "C:\Windows\system32\WindowsPowerShell\v1.
0\powershell.exe -command & \"\"\"D:\PShell\SO\36493932 with spaces.ps1\"\"\" \"\"\"D:\bat\
a b\testfile.txt\"\"\";pause" /SC ONCE /SD 10/04/2016 /ST 11:00
SUCCESS: The scheduled task "MyTaskName" has successfully been created.
==> schtasks /Run /TN "MyTaskName"
SUCCESS: Attempted to run the scheduled task "MyTaskName".
Press any key to continue . . .
==> schtasks /End /TN "MyTaskName"
SUCCESS: The scheduled task "MyTaskName" has been terminated successfully.
==>
$Taskname = "MyTaskName"
$Powershellpath = "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe"
$Powershellscript = "D:\PShell\SO\36493932 with spaces.ps1"
$Argument = "D:\bat\a b\testfile.txt"
$userdomain = “Domain”
$username = “User”
schtasks.exe /create /f /tn $Taskname /tr "$Powershellpath -command & \""\""\""$Powershellscript\""\""\"" \""\""\""$Argument\""\""\""" /SC ONCE /SD 10/04/2016 /ST 11:15 /RU $userdomain\$Username /RP
if($LASTEXITCODE -eq 0)
{
start-sleep -s 3
schtasks /Run /TN $Taskname
start-sleep -s 3
schtasks /End /TN $Taskname
}