¿Cómo utilizar select-string sin líneas en blanco?

¿Cómo utilizar select-string sin líneas en blanco?

Quiero usarselect-stringen la salida de otro comando (similar a cómo se usaría grepen un sistema operativo Unix).

Aquí está el resultado del comando sin 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

Cuando uso select-string, aparecen líneas en blanco por alguna razón:

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

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


¿Cómo puedo (A) decirle a select-string que se coma las líneas en blanco sin coincidencias, o (B) canalizar la salida a otra utilidad de PowerShell que pueda comer las líneas en blanco por mí?

Respuesta1

Select-String devuelve una matriz de MatchInfo, como se muestra en((dir resources).Name | select-string Windows)[0].GetType()

Para obtener lo que buscas, simplemente convierte tu expresión completa a [cadena[]]:

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

Respuesta2

Encontré una solución:

((dir recursos).Nombre | seleccionar-cadena Windows | fuera-cadena).Trim()

out-stringconvierte una entrada de otro comando en una cadena, y Trim()es una función que sólo funciona en cadenas (es decir, Trim()no funcionará en la salida de un comando que devuelve algún tipo que no sea una cadena).

Respuesta3

Aquí hay una función todo en uno para escribir fácilmente una lista (como resultado de salida), se eliminan las líneas en blanco y se puede canalizar. 2 ejemplos de uso se muestran a continuación. Espero que esto ayude

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 $_
            }
        }
    }
}

Ejemplo 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

Ejemplo #2:

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

información relacionada