空白行なしで select-string を使用するにはどうすればよいでしょうか?

空白行なしで select-string を使用するにはどうすればよいでしょうか?

使いたいselect-string別のコマンドの出力に対して ( grepUnix OS で使用する方法と同様)。

以下は なしのコマンドの出力です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

関連情報