1

私はpowershellスクリプトを初めて使用し、Windowsサーバー2003でschtasksに行き詰まっています。問題がエスケープにあることは知っていますが、解決できません。

[string]$a = "-command `"Powershell $b > $c`""
$d = "C:\powershell.exe";

ここで、$b は PowerShell スクリプトへのパス (C:\filename.ps1) $c はログ ファイルのパス (C:\log\filename.log) です。

schtaks を使用してタスクをスケジュールしようとすると

schtasks /create /sc weekly /d $tsk.DofW /st $tsk.At /tn "$tsk.name" /tr "$d $($a)"

無効な引数/オプション - 'C:\filename.ps1' というエラーが表示されます

どんな助けでも大歓迎

編集

あなたが言及したように実行すると、エラーなしで実行されますが、タスクスケジューラの [アクション] タブを見ると、詳細の下に C:\powershell.exe System.Collections.Hashtable.args の代わりに powershell.exe -command "Powershell C :\ファイル名.ps1 > C:\ログ\ファイル名.log". schtasks で "$d $($a)" のような追加のブラケットを追加すると、Invalid argument/option ">" というエラーが表示されます

4

1 に答える 1

2

これを試してください(未テスト)。コメントは次の行に対するものです。

$b = "C:\filename.ps1"
$c = "C:\log\filename.log"
# Removed [string] - When value is quoted, it's a string, you don't need to cast it.
# Removed "PowerShell" in a PS console(which you open with your $d, 
# you only need to specify the scriptpath to the file. You don't need "powershell" at the start.
$a = "-command $b > $c"

# Powershell executable is in the following location
$d = "c:\windows\System32\WindowsPowerShell\v1.0\powershell.exe"

schtasks /create /sc weekly /d $tsk.DofW /st $tsk.At /tn "$tsk.name" /tr "$d $a"

編集問題は、で引用符をエスケープした$aときに、コマンドの実行時に引用符の 1 つが引数文字列を終了することでした。そのため、コマンドの残りの部分は追加の引数と見なされ、powershellリンク先のパラメーターが見つかりませんでした。

パラメータを文字列で指定する場合-commandは、コマンドの末尾に追加する必要があり-commandます。これは、 がその後ろのすべてを値と見なすためです。すでに taskrun アクションの最後にあったため-command、必要なのは のエスケープされた引用符を削除することだけでした$a

于 2013-04-02T18:57:25.820 に答える