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 与具有空间的任务的主要内容,如果未能解决你的问题,请参考以下文章
具有提升权限的 WiX CustomAction SCHTASKS“拒绝访问”