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 * |輸出字符串)

我猜一些關於輸出字符串部分是搞亂與功能的管道,並導致額外的空白區域被添加到字符串值的開始該函數返回

相關問題