2

我有返回PSCustomObject的功能,如:如何避免使用字符串格式添加前导空格?

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

后来,我调用这个函数是这样的:

$data = Get-Data 

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

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

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

它从哪里来?如何正确地摆脱它?

+3

可能来自'Get-Data'函数原始'$ Id'值。 '$($ data.Id.Trim())'删除 –

+0

你也可以更新你的函数,以便在它被添加到对象之前从值的开始或结束中删除任何空格'Id = $ Id.Trim()' –

回答

2

您可以拨打.Trim()给每个字符串(如Mathias提到的)。或者可以替换使用正则表达式任何空白字符:

Write-Host ("$($data.Url)|$($data.Id)|OK" -replace '\s*') 
+0

我终于明白了这个问题。我会在更详细的答案中描述它。我接受你的回答,因为它正确地解决了问题中描述的问题。谢谢! –

1

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

创建自定义对象之前,该方法执行一些REST API调用,并且其中一个调用的输出未分配给变量,也不是“Out-Null”-ed。因此,返回的自定义对象是由该Web响应加上我明确创建的自定义对象作为属性所制作的对象。

看起来像PowerShell的极力推断类型的我,但它没有管理这些领先的空格...

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

+0

谢谢!有完全相同的问题,因为我在函数内部打印了一个尚未定义的变量,然后与return语句配对,显然引入了一个分隔符空格......! –

0

只是想在此主题上添加另一个提示,因为我也碰到了这个问题。尽管我在函数内没有看到返回值的前导空白。一旦价值返还,就会有一个额外的领先白色空间。我发现前一行Write-Verbose代码正在输出一个对象的内容,这让我觉得很难过

Write-Verbose $ obj | fl * |输出字符串

我加括号绕输出,其固定我的问题 写详细($ OBJ | FL * |输出字符串)

我猜一些关于输出字符串部分是搞乱与功能的管道,并导致额外的空白区域被添加到字符串值的开始该函数返回

相关问题