首页 > 解决方案 > 如何使powershell内联脚本路径识别空格?

问题描述

老板更改了 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今天并不强大。任何帮助,将不胜感激。谢谢!

标签: powershelltfsazure-devopsazure-pipelines-release-pipeline

解决方案


看来您通过 $(System.DefaultWorkingDirectory) 变量路径如下:

-path $(System.DefaultWorkingDirectory)

同时,如果$(System.DefaultWorkingDirectory)包含空格(如D:\TFS Agent\_work\r3\a),它将显示将值以空格分隔为不同的行(如D:\TFS Agent\_work\r3\a将显示为两行与 valueD:\TFSAgent\_work\r3\a)。所以$path具有第一行中的值的变量(如D:\TFS)。

要解决此问题,您只需为 . 添加双引号$(System.DefaultWorkingDirectory)即可。因此,只需将 PowerShell 任务中的参数更改为:

-path "$(System.DefaultWorkingDirectory)"

推荐阅读