如何避免使用字符串格式添加前导白色 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
我有一个 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