如何使用沒有空白行的選擇字串?

如何使用沒有空白行的選擇字串?

我想用select-string在另一個命令的輸出上(類似於grep在 Unix 作業系統上使用的方式)。

這是不帶 的命令的輸出select-string

> (dir resources).Name
wmd-Linux-22022.json
wmd-Linux-22023.json
wmd-Linux-22024.json
wmd-Windows-22022.json
wmd-Windows-22023.json
wmd-Windows-22024.json

當我使用 時select-string,由於某種原因我得到空行:

> (dir resources).Name | select-string Windows

wmd-Windows-22022.json
wmd-Windows-22023.json
wmd-Windows-22024.json


我怎麼能(A)告訴 select-string 吃掉沒有匹配的空行,或者(B)將輸出通過管道傳輸到另一個可以為我吃掉空行的 powershell 實用程式?

答案1

Select-String 傳回一個 MatchInfo 數組,如下所示((dir resources).Name | select-string Windows)[0].GetType()

要得到你想要的,只需將整個表達式轉換為 [string[]]:

[string[]]((dir resources).Name | select-string Windows)

答案2

我找到了一個解決方案:

((dir resources).Name | select-string Windows | out-string).Trim()

out-string將另一個命令的輸入轉換為字串,並且Trim()是僅適用於字串的函數(即,Trim()不適用於傳回某些非字串類型的命令的輸出)。

答案3

這是一個一體化函數,可以輕鬆編寫列表(作為輸出結果),刪除空行,可以透過管道傳輸。下面顯示 2 個使用範例希望有幫助

function Write-List {
    Param(
        [Parameter(Mandatory, ValueFromPipeline)][array] $Array,
        [string]$Prefixe,
        [bool]$Numbering = $False
    )
    if ($Numbering) { 
        $NumberOfDigit = $($Array.Count).ToString().Length

        $Array | Format-List | Out-String -Stream | ForEach-Object -Process {
            if (-not [string]::IsNullOrWhiteSpace($_)) {
                "$Prefixe# {0,$NumberOfDigit} : {1}" -f (++$Index), $_
            }
        }
    } else {
        $Array | Format-List | Out-String -Stream | ForEach-Object -Process {
            if (-not [string]::IsNullOrWhiteSpace($_)) {
                "$Prefixe{0}" -f $_
            }
        }
    }
}

範例#1:

Write-List @("titi", "toto", "tata", "titi", "toto", "tata", "titi", "toto", "tata", "titi", "toto", "tata") -Numbering $True
#  1 : titi
#  2 : toto
#  3 : tata
#  4 : titi
#  5 : toto
#  6 : tata
#  7 : titi
#  8 : toto
#  9 : tata
# 10 : titi
# 11 : toto
# 12 : tata

範例#2:

Get-Service -Name "*openvpn*" | Select-Object DisplayName,Name,Status,StartType | Write-List -Prefixe " - "
 - DisplayName : OpenVPN Interactive Service
 - Name        : OpenVPNServiceInteractive
 - Status      : Running
 - StartType   : Automatic

相關內容