1

我是 powershell 脚本的新手,我在 windows server 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 :\filename.ps1 > C:\log\filename.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,其中一个引号在命令运行时结束了参数字符串。因此,命令的其余部分考虑了其他参数,这些powershell参数找不到要链接的参数。

当您使用-command字符串指定参数时,您需要将其添加到命令的末尾,因为-command将其后面的所有内容都视为它的值。由于-command已经在您的 taskrun 操作结束时,您所需要的只是删除$a.

于 2013-04-02T18:57:25.820 回答