如何避免使用字符串格式添加前导白色 space?

How to avoid leading white space addition with string formatting?

我有一个 returns PSCustomObject 函数,像这样:

Function Get-Data {
  # ...
  [PSCustomObject]@{
    Url = $Url
    Id = $Id
  }
}

稍后,我这样调用这个函数:

$data = Get-Data

然后我想输出格式化字符串,包括该对象的 属性 值。最接近我想要的结果是输出以下行:

Write-Host "$($data.Url)|$($data.Id)|OK"

问题是第一个 | 字符后的空格。

它来自哪里?如何以正确的方式摆脱它?

您可以对每个字符串调用 .Trim()(如 Mathias 所述)。或者您可以使用 regex:

替换任何空白字符
Write-Host ("$($data.Url)|$($data.Id)|OK" -replace '\s*') 

显然,这一切都隐藏在那个Get-Data方法的细节中,我轻率地忽略了...

在创建该自定义对象之前,该方法进行了多次 REST API 调用,其中一次调用的输出未分配给变量,也未被 "Out-Null" 编辑.结果,返回的 real 自定义对象是由该网络响应加上我明确创建的自定义对象作为 属性.

看起来 PowerShell 努力为我推断类型,但未能管理那些前导空格...

希望这可以节省一些时间。

只是想添加关于此主题的另一个提示,因为我也 运行 参与其中。即使我在函数内的 return 值中没有看到前导白色 space。一旦值被 returned,就会有一个额外的前导白色 space。我发现前一行输出对象内容的 Write-Verbose 代码把我搞砸了

写详细 $obj |佛罗里达* |外弦

我在输出周围添加了括号,这解决了我的问题 Write-Verbose ($obj | fl * | Out-String)

我猜想关于 Out-String 部分的某些东西弄乱了函数的管道并导致额外的白色 space 被添加到字符串值的开头,函数是 return ing