2

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

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

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

$data = Get-Data

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

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

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

它从何而来?如何以正确的方式摆脱它?

4

3 回答 3

2

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

Write-Host ("$($data.Url)|$($data.Id)|OK" -replace '\s*') 
于 2017-04-11T09:38:47.917 回答
1

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

在创建该自定义对象之前,该方法执行了许多 REST API 调用,其中一个调用的输出未分配给变量,也不是“Out-Null”-ed。结果,返回的真正自定义对象是由该 Web 响应加上我明确创建的自定义对象作为属性组成的对象。

看起来 PowerShell 努力为我推断类型,但它未能管理那些领先的空格......

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

于 2017-04-11T12:24:21.690 回答
0

只是想在这个主题上添加另一个提示,因为我也遇到了它。即使我在函数内的返回值中没有看到前导空格。一旦返回值,就会有一个额外的前导空格。我发现输出对象内容的前一行 Write-Verbose 代码把我搞砸了

写详细 $obj | * | 外串

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

我猜关于 Out-String 部分的某些东西弄乱了函数的管道,并导致额外的空格被添加到函数返回的字符串值的开头

于 2017-08-23T20:05:05.050 回答