Powershell 和 schtask 与具有空间的任务

Posted

技术标签:

【中文标题】Powershell 和 schtask 与具有空间的任务【英文标题】:Powershell and schtask with task that has a space 【发布时间】:2012-05-19 12:23:24 【问题描述】:

我在 PowerShell 中使用 schtask 命令。出现的问题是,当程序/脚本参数包含C:\Program Files\ 时,它认为路径只是C:\Program 而路径的其余部分是一个参数。我试图通过使用" 前场和后场来逃避它,但这并没有什么不同。我怎样才能做到这一点?我无法对路径进行硬编码,因为它可以在用户安装时更改。

我是在 Windows 7 x64 中创建的。它创建任务 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

【问题讨论】:

我使用 C:\Program Files 下的 notepad++ exe 进行了尝试,您的原始代码运行良好。它为我创建了一个计划任务。 您的原始代码也适用于我的 C:\Program Files\SyncToy 2.1\SyncToy.exe。您在哪个操作系统上工作? 也许我不是特别清楚。我能够创建任务;但是,它不会运行。我用的是Win7。所以我创建了任务,如果您浏览任务,请右键单击属性、操作、编辑。我的任务会将程序显示为 C:\Program,然后将路径的其余部分显示为参数。我会更新说明。 【参考方案1】:

我也遇到了这个问题..任何其他有这个问题的人的答案是包含单引号

/TR "'C:\Program Files (x86)\etc\test.exe'"

【讨论】:

【参考方案2】:

我在 Windows Server 2008 R2 上遇到了同样的问题。虽然Microsoft support 表示您应该能够用 \" 将命令括起来,但我从来没有这样做过,但单引号可以工作。此外,带空格的参数也可以用单引号括起来:

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

第一个示例生成以下任务操作屏幕:

【讨论】:

【参考方案3】:

要解决此问题,请将任务的路径部分(不包括参数或开关)括在反斜杠 \ 和引号 " 字符组合之间,例如 \"。在创建包含空格的路径或命令时,像往常一样将任务的完整路径(包括参数或开关)用引号引起来。

代码:

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

替换:

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

【讨论】:

以上是关于Powershell 和 schtask 与具有空间的任务的主要内容,如果未能解决你的问题,请参考以下文章

schtasks 命令中的单引号

具有提升权限的 WiX CustomAction SCHTASKS“拒绝访问”

PowerShell 添加任务以使用参数运行 PowerShell 脚本

如何使用具有特权的 schtask 运行任务?

如何修复无法索引到 PowerShell 中的空数组

windowswindows server 系统管理的快捷命令