我有一个返回PSCustomObject的函数,如下所示:
Function Get-Data {
# ...
[PSCustomObject]@{
Url = $Url
Id = $Id
}
}
稍后,我将此函数称为:
$data = Get-Data
然后我想输出格式化的字符串,包括该对象的属性值。我想要的最接近的结果输出如下:
Write-Host "$($data.Url)|$($data.Id)|OK"
问题是第一个|
字符后的空格。
它来自哪里?如何以正确的方式摆脱它?
答案 0 :(得分:2)
您可以为每个字符串调用.Trim()
(如Mathias所提到的)。或者您可以使用正则表达式替换任何空格字符:
Write-Host ("$($data.Url)|$($data.Id)|OK" -replace '\s*')
答案 1 :(得分:1)
显然,这一切都隐藏在Get-Data
方法的细节中,我轻率地忽略了......
在创建该自定义对象之前,该方法会执行许多REST API调用,并且其中一个调用的输出未分配给变量,也不是“Out-Null”-ed。因此,返回的真实自定义对象是由该Web响应加上我明确创建的自定义对象作为属性。
看起来PowerShell很难为我推断出类型,但它无法管理那些领先的空白......
希望这可以节省一些时间。
答案 2 :(得分:0)
我想在这个主题上添加另一个提示,因为我也遇到过这个问题。即使我在函数中看到返回值中没有前导空格。返回值后,会有一个额外的前导空格。我发现输出对象内容的前一行Write-Verbose代码让我感到困扰
Write-Verbose $ obj | fl * |出字符串
我在输出周围添加了括号,这解决了我的问题 Write-Verbose($ obj | fl * | Out-String)
我猜测Out-String部分正在搞乱函数的管道并导致额外的空白空间被添加到函数返回的字符串值的开头