2016-04-08 18 views
1

schtasks.exeでスペースを入れた引数を持つPowershellスクリプトをスケジュールしたいと思います。 (Powershellバージョン2、Windows 7)。Powershellを使ったschtasksと引数にスペースを入れたスクリプト

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作業を:私はPowerShellのコマンドラインの中で入力することがこの表現を作ってみたこのフォーラムで読んだことを念頭に置きます。 ?誰が助けることができるの引数(オプション)

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

を追加

のprogramm /スクリプト

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

:私は手動でタスクをスケジュールする場合、それは私のタスクプランナーに次のエントリを示す作品事前に おかげエスケープルールについて

答えて

0

読む:

  • command line(すでに二重引用符で囲まれた文字列にエスケープ&アンパサンド文字)powershell
  • ""埋め込まれた二重引用符をエスケープ)中でschtasksで
  • .exe(エスケープ\"埋め込み二重引用符:this descriptionで例をご覧ください)

次のバッチスクリプトでテストされています。 ;pause-command引数に指定すると、デバッグの目的でpowershellスクリプトの結果を観察できます。

@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" 
補助 ST*変数は読みやすく( STn =名前、 STe =実行可能、 STc =コマンド、 STp =パラメータ)のためだけに使用されています

出力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をスケジューリングするときにうまく動作する "Add arguments(optional)"の文字列を模倣するのにも十分ではないことがわかりました。 私は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 
} 
関連する問題