使用PowerShell创建含空格路径的计划任务问题
解决计划任务脚本路径含空格无法识别的问题
当$PSScriptRoot路径包含空格时,计划任务无法定位到Install.ps1的核心原因是含空格的路径需要被双引号包裹,才能被PowerShell正确识别为单个文件路径参数。你可以通过在脚本中转义双引号的方式实现自动添加,具体方案如下:
方案1:转义双引号包裹路径
直接在构建schtasks命令的/TR参数时,用PowerShell的转义符`(反引号)对路径的双引号进行转义,确保最终传递给计划任务的参数里包含正确的引号:
$installScript = "$PSScriptRoot\Install.ps1" schtasks.exe /CREATE /F /TN "Install Application" /RU $taskUser /SC ONLOGON /IT /TR "powershell.exe -ExecutionPolicy Bypass -File `"$installScript`"" /RL HIGHEST
方案2:用Join-Path规范构建路径(推荐)
先用Join-Path命令更安全地拼接路径(避免手动拼接时的潜在错误),再用同样的转义方式包裹路径:
$installScript = Join-Path -Path $PSScriptRoot -ChildPath "Install.ps1" schtasks.exe /CREATE /F /TN "Install Application" /RU $taskUser /SC ONLOGON /IT /TR "powershell.exe -ExecutionPolicy Bypass -File `"$installScript`"" /RL HIGHEST
原理说明
在PowerShell的双引号字符串中,`"会被解析为实际的双引号字符。最终schtasks接收到的/TR参数内容会是:
powershell.exe -ExecutionPolicy Bypass -File "C:\Path With Spaces\Install.ps1"
这样计划任务执行时,PowerShell就能正确识别带空格的完整路径了。
内容的提问来源于stack exchange,提问作者Christopher Cass
相关产品推荐
相关产品推荐

