14

schtaskPowerShellでコマンドを使用しています。発生する問題は、program / script引数にが含まれC:\Program Files\ている場合、パスが正しいと見なされ、パスC:\Programの残りの部分が引数であると見なされることです。"pre-fieldとpost-fieldを使用してエスケープしようとしましたが、違いはありませんでした。どうすればこれを達成できますか?ユーザーがパスをインストールすると変更される可能性があるため、パスをハードコーディングできません。

私はこれをWindows7x64で作成していました。タスクOKが作成され、スクリプトが返されます。ただし、タスクスケジューラ、タスクのプロパティ、アクションの順に表示し、を押すとedit、プログラムがC:\ Programとして表示され、残りが引数として表示されます。

ここに画像の説明を入力してください

脚本:

$folder = Split-Path $MyInvocation.MyCommand.Path -Parent
$app = "\Demon.DatabasePurge.exe"
$exe = $app.Insert(0, $folder)
schtasks /create /tn "Demon Purge Job" /sc daily /st 00:00:00 /tr $exe

これが私が試したことです:

$folder = Split-Path $MyInvocation.MyCommand.Path -Parent
$app = "\Demon.DatabasePurge.exe`""
$exe = $app.Insert(0, $folder)
$exe2 = $exe.Insert(0, "`"")
schtasks /create /tn "Demon Purge Job" /sc daily /st 00:00:00 /tr $exe2
4

3 に答える 3

18

私もこれに問題を抱えていました..この問題を抱えている他の人は、答えは一重引用符を含めることです

/TR "'C:\Program Files (x86)\etc\test.exe'"
于 2013-06-13T04:49:41.327 に答える
7

Windows Server 2008 R2 でも同じ問題が発生しました。Microsoft のサポートでは、コマンドを \" で囲むことができるはずであると示されていますが、それが機能することはありませんでしたが、一重引用符は機能します。さらに、スペースを含む引数も一重引用符で囲むことができます。

schtasks /create /f /tn "Test" /tr "'c:\program files\test.bat' arg1 'arg 2 with spaces' arg3" /sc Daily /st 00:00

または、実行する文字列を作成する場合 (および $folder 変数を使用する場合):

$createTask = "schtasks /create /f /tn `"Demon Purge Job`" /tr `"'$folder\Demon.DatabasePurge.exe' arg1 'arg 2 with spaces' arg3`"" /sc daily /st 00:00
Invoke-Expression $createTask

最初の例では、次のタスク アクション画面が生成されます。 ここに画像の説明を入力

于 2013-09-16T08:46:06.910 に答える