2016-04-08 79 views
1

我想安排一个Powershell脚本,其参数与schtasks.exe中有一个空间。 (Powershell版本2,Windows 7)。铭记我在这个论坛上,我想出了这个表达式读过到PowerShell的命令行中输入:schtasks与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 

不幸的是这doesn'nt工作。如果我安排任务手动将其作品展示了我下面的条目在任务计划器:

PROGRAMM /脚本

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe 

添加参数(可选)

-command "& 'D:\myscript.ps1' ''D:\Filename with Space.xml '" 

有人能帮忙吗? 在此先感谢

回答

0

阅读有关转义规则:

  • command line&在双引号字符串已经转义符号字符)在powershell
  • (逃避""嵌入式双引号)
  • 中的schtasks .exe(转义\"嵌入双引号:通过示例学习this description

在以下批处理脚本中进行测试。请注意0​​中的-command参数允许观察powershell脚本的结果以进行调试;辅助ST*变量仅用于更好的可读性(STn =名称,STe =可执行文件,STc =命令,STp =参数):

@ECHO ON 
@SETLOCAL EnableExtensions 
set "STn=MyTaskName" 
set "STe=%SystemRoot%\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 "%STn%" /tr "%STe% -command & \"\"\"%STc%\"\"\" \"\"\"%STp%\"\"\";pause" /SC ONCE /SD 10/04/2016 /ST 11:00 
@rem /RU %USERDOMAIN%\%username% /RP 
@timeout /T 3 >NUL 
schtasks /Run /TN "%STn%" 
@pause 
schtasks /End /TN "%STn%" 

及以下powershell脚本(虽然这并不重要):

param([string] $InObject = $MyInvocation.InvocationName) 
"{0} {1}" -f "listing:", "$InObject" 
Get-Content "$InObject" 

输出(注意,powershell脚本输出可见在另一个窗口):

==> 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. 

==> 
1

我忽略了模拟“添加参数(可选)” 的字符串时,手动调度带有空格参数的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 
}