带Powershell的schtasks和参数中带空格的脚本

带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 \`"& \

我想计划一个Powershell脚本,该脚本包含一个参数,该参数中有一个带有schtasks.exe的空格。(Powershell版本2,Windows 7)。考虑到我在本论坛中读到的内容,我提出了以下表达式,将其输入Powershell命令行:

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
}