【问题标题】:How to make powershell inline script path recognise spaces?如何使powershell内联脚本路径识别空格?
【发布时间】:2019-01-22 10:44:26
【问题描述】:

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

【问题讨论】:

  • 为什么路径中的空格会破坏东西..?您是否尝试替换空格,因为实际路径中 没有 空格?您应该可以按原样运行它:Get-Content -Path $path -Raw
  • @kiasta 您的$path 变量是否嵌入了引号"
  • 这是一个环境变量吗?您应该可以访问它:$Env:DefaultWorkingDirectory
  • 路径在替换前是这样的:D:\TFS Agent\_work\r3\a\xxx 你有什么证据?您的 -replace 操作实际上是无操作的。它用空间代替空间。如果你在结果中只得到D:\TFS,那意味着你从一开始就只有那个。

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


【解决方案1】:

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

-path $(System.DefaultWorkingDirectory)

如果$(System.DefaultWorkingDirectory) 包含空格(如D:\TFS Agent\_work\r3\a),则会显示以空格分隔的值到不同的行(如D:\TFS Agent\_work\r3\a 将显示为两行值D:\TFSAgent\_work\r3\a )。所以变量$path 的值在第一行(如D:\TFS)。

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

-path "$(System.DefaultWorkingDirectory)"

【讨论】:

    猜你喜欢
    • 2018-07-20
    • 2021-11-22
    • 2018-01-27
    • 2017-02-20
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    相关资源
    最近更新 更多