如何使Powershell内联脚本路径识别空格?

时间:2018-08-15 14:29:05

标签: powershell tfs azure-devops azure-pipelines-release-pipeline

老板更改了TFS服务器,并在path: D:\TFS Agent\xxx中添加了一个空格,这导致我的powershell脚本在发布时失败。

我们已经与TFS建立/发布了自动集成,并且我有一个内嵌的powershell任务来读取文件并将其转换为JSON,然后执行一些SQL。我一直在工作到今天早上。

问题在于代理程序路径是TFS: $(System.DefaultWorkingDirectory)中的系统变量,我不确定如何处理路径中的空间。

我已经尝试过了:

# Begin inline script
Param(
    [string]$path,
    [string]$db,
    [string]$schema,
    [string]$envName
)
# Create module
$formattedPath = $path -replace " ", "` ";
$conv = Get-Content -Raw -Path "$formattedPath" | ConvertFrom-Json;

但是我得到的只是D:\ TFS。替换前的路径如下:

D:\TFS Agent\_work\r3\a\xxx

我一辈子都想不出如何用勾号替换空格或如何忽略空格。我对Powershell还是很陌生,所以这可能只是一些简单的事情,但是我的google-fu今天并不强大。任何帮助,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

似乎您正在通过变量路径传递$(System.DefaultWorkingDirectory):

-path $(System.DefaultWorkingDirectory)

同时,如果$(System.DefaultWorkingDirectory)包含空格(例如D:\TFS Agent\_work\r3\a),它将显示按空格将值划分为不同的行(例如D:\TFS Agent\_work\r3\a将显示两行,其值为{ {1}}和D:\TFS)。因此变量Agent\_work\r3\a的值在第一行(例如$path)。

要解决此问题,您只需D:\TFS 添加双引号。因此,只需将PowerShell任务中的参数更改为:

$(System.DefaultWorkingDirectory)