Powershell 如何避免使用字符串格式导致空白添加?

Powershell 如何避免使用字符串格式导致空白添加?,powershell,hashtable,whitespace,string-formatting,pscustomobject,Powershell,Hashtable,Whitespace,String Formatting,Pscustomobject,我有一个返回PSCustomObject的函数,如下所示: Function Get-Data { # ... [PSCustomObject]@{ Url = $Url Id = $Id } } $data = Get-Data 稍后,我这样调用此函数: Function Get-Data { # ... [PSCustomObject]@{ Url = $Url Id = $Id } } $data = Get-Data 然后我

我有一个返回PSCustomObject的函数,如下所示:

Function Get-Data {
  # ...
  [PSCustomObject]@{
    Url = $Url
    Id = $Id
  }
}
$data = Get-Data
稍后,我这样调用此函数:

Function Get-Data {
  # ...
  [PSCustomObject]@{
    Url = $Url
    Id = $Id
  }
}
$data = Get-Data
然后我想输出包含该对象属性值的格式化字符串。与我想要的结果最接近的是输出,如下所示:

Write-Host "$($data.Url)|$($data.Id)|OK"
问题是第一个
|
字符后面有空格


它来自哪里?如何以正确的方式消除它?

您可以对每个字符串调用
.Trim()
(如Mathias所述)。也可以使用正则表达式替换任何空白字符:


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

在创建该自定义对象之前,该方法进行了大量REST API调用,其中一个调用的输出没有分配给变量,也没有“Out Null”-ed。因此,返回的real自定义对象是由该web响应加上我显式创建的自定义对象作为属性组成的对象

看起来PowerShell试图为我推断类型,但它无法管理那些主要的空白


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

我只是想在这个话题上添加另一个技巧,因为我也遇到了这个问题。尽管我在函数的返回值中没有看到前导空格。返回值后,会有一个额外的前导空格。我发现前一行输出对象内容的冗长代码把我搞砸了

写出详细的$obj | fl*|输出字符串

我在输出周围添加了括号,解决了我的问题 写详细的($obj | fl*| Out字符串)


我猜Out String部分会干扰函数的管道,并导致函数返回的字符串值的开头添加额外的空白

可能来自
get Data
函数中的原始
$Id
$($data.Id.Trim())
若要删除,还可以更新函数,在将值添加到对象之前,从值的开头或结尾删除任何空格
Id=$Id.Trim()
我终于解决了问题。我将在我的回答中更详细地描述它。我接受你的回答,因为它正确地解决了问题中描述的问题。非常感谢。非常感谢。有完全相同的问题,因为我在一个函数中,打印了一个尚未定义的变量,然后,它与return语句一起,显然引入了一个分隔的空格。。。!