Condividi tramite


Select-String

Trova il testo in stringhe e file.

Sintassi

Select-String
      [-Pattern] <string[]>
      [-Path] <string[]>
      [-SimpleMatch]
      [-CaseSensitive]
      [-Quiet]
      [-List]
      [-Include <string[]>]
      [-Exclude <string[]>]
      [-NotMatch]
      [-AllMatches]
      [-Encoding <string>]
      [-Context <Int32[]>]
      [<CommonParameters>]
Select-String
      [-Pattern] <string[]>
      -InputObject <psobject>
      [-SimpleMatch]
      [-CaseSensitive]
      [-Quiet]
      [-List]
      [-Include <string[]>]
      [-Exclude <string[]>]
      [-NotMatch]
      [-AllMatches]
      [-Encoding <string>]
      [-Context <Int32[]>]
      [<CommonParameters>]
Select-String
      [-Pattern] <string[]>
      -LiteralPath <string[]>
      [-SimpleMatch]
      [-CaseSensitive]
      [-Quiet]
      [-List]
      [-Include <string[]>]
      [-Exclude <string[]>]
      [-NotMatch]
      [-AllMatches]
      [-Encoding <string>]
      [-Context <Int32[]>]
      [<CommonParameters>]

Descrizione

Il Select-String cmdlet cerca modelli di testo e testo in stringhe e file di input. È possibile usare Select-String un'operazione simile a grep in UNIX o findstr.exe in Windows.

Select-String è basato su righe di testo. Per impostazione predefinita, Select-String trova la prima corrispondenza in ogni riga e, per ogni corrispondenza, visualizza il nome del file, il numero di riga e tutto il testo nella riga contenente la corrispondenza. È possibile Select-String indirizzare a trovare più corrispondenze per riga, visualizzare testo prima e dopo la corrispondenza oppure visualizzare un valore booleano (True o False) che indica se viene trovata una corrispondenza.

Select-String usa la corrispondenza delle espressioni regolari, ma può anche eseguire una corrispondenza che cerca il testo specificato nell'input.

Select-String può visualizzare tutte le corrispondenze di testo o arrestare dopo la prima corrispondenza in ogni file di input. Select-String può essere usato per visualizzare tutto il testo che non corrisponde al modello specificato.

È anche possibile specificare che Select-String deve prevedere una codifica di caratteri specifica, ad esempio quando si esegue la ricerca di file di testo Unicode. Select-String utilizza il byte order-mark (BOM) per rilevare il formato di codifica del file. Se il file non ha bom, presuppone che la codifica sia UTF8.

Esempio

Esempio 1: Trovare una corrispondenza con distinzione tra maiuscole e minuscole

In questo esempio viene eseguita una corrispondenza con distinzione tra maiuscole e minuscole del testo inviato alla pipeline al Select-String cmdlet .

'Hello', 'HELLO' | Select-String -Pattern 'HELLO' -CaseSensitive -SimpleMatch

Le stringhe di testo Hello e HELLO vengono inviate alla pipeline al Select-String cmdlet . Select-String usa il parametro Pattern per specificare HELLO. Il parametro CaseSensitive specifica che la distinzione tra maiuscole e minuscole deve corrispondere solo al modello maiuscolo. SimpleMatch è un parametro facoltativo e specifica che la stringa nel criterio non viene interpretata come un'espressione regolare. Select-String visualizza HELLO nella console di PowerShell.

Esempio 2: Trovare corrispondenze nei file di testo

Questo comando cerca tutti i file con l'estensione del .txt nome file nella directory corrente. L'output visualizza le righe nei file che includono la stringa specificata.

Get-Alias | Out-File -FilePath .\Alias.txt
Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\*.txt -Pattern 'Get'

Alias.txt:8:Alias            cat -> Get-Content
Alias.txt:28:Alias           dir -> Get-ChildItem
Alias.txt:43:Alias           gal -> Get-Alias
Command.txt:966:Cmdlet       Get-Acl
Command.txt:967:Cmdlet       Get-Alias

In questo esempio Get-Alias e Get-Command vengono usati con il Out-File cmdlet per creare due file di testo nella directory corrente, Alias.txt e Command.txt.

Select-String usa il parametro Path con il carattere jolly asterisco (*) per cercare tutti i file nella directory corrente con l'estensione .txtdel nome file . Il parametro Pattern specifica il testo che deve corrispondere a Get-. Select-String visualizza l'output nella console di PowerShell. Il nome del file e il numero di riga precedono ogni riga di contenuto che contiene una corrispondenza per il parametro Pattern .

Esempio 3: Trovare una corrispondenza di criterio

In questo esempio vengono cercati più file per trovare le corrispondenze per il modello specificato. Il modello usa un quantificatore di espressioni regolari. Per altre informazioni, vedere about_Regular_Expressions.

Select-String -Path "$PSHOME\en-US\*.txt" -Pattern '\?'

C:\Program Files\PowerShell\6\en-US\default.help.txt:27:    beginning at https://go.microsoft.com/fwlink/?LinkID=108518.
C:\Program Files\PowerShell\6\en-US\default.help.txt:50:    or go to: https://go.microsoft.com/fwlink/?LinkID=210614

Il Select-String cmdlet usa due parametri, Path e Pattern. Il parametro Path usa la variabile $PSHOME che specifica la directory di PowerShell. Il resto del percorso include la sottodirectory en-US e specifica ogni *.txt file nella directory. Il parametro Pattern specifica di corrispondere a un punto interrogativo (?) in ogni file. Una barra rovesciata () viene usata come carattere di escape ed è necessaria perché il punto interrogativo (\?) è un quantificatore di espressioni regolari. Select-String visualizza l'output nella console di PowerShell. Il nome del file e il numero di riga precedono ogni riga di contenuto che contiene una corrispondenza per il parametro Pattern .

Esempio 4: Usare Select-String in una funzione

Questo esempio crea una funzione per cercare un modello nei file della Guida di PowerShell. Per questo esempio, la funzione esiste solo nella sessione di PowerShell. Quando la sessione di PowerShell viene chiusa, la funzione viene eliminata. Per altre informazioni, vedere about_Functions.

PS> Function Search-Help
>> {
>> $PSHelp = "$PSHOME\en-US\*.txt"
>> Select-String -Path $PSHelp -Pattern 'About_'
>> }
PS>

PS> Search-Help

C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:2:   about_ActivityCommonParameters
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:31:  see about_WorkflowCommonParameters.
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:33:  about_CommonParameters.

La funzione viene creata nella riga di comando di PowerShell. Il Function comando usa il nome Search-Help. Premere INVIO per iniziare ad aggiungere istruzioni alla funzione. >> Dal prompt aggiungere ogni istruzione e premere INVIO come illustrato nell'esempio. Dopo aver aggiunto la parentesi quadra di chiusura, si torna a un prompt di PowerShell.

La funzione contiene due comandi. La $PSHelp variabile archivia il percorso dei file della Guida di PowerShell. $PSHOME è la directory di installazione di PowerShell con la sottodirectory en-US che specifica ogni *.txt file nella directory.

Il Select-String comando nella funzione usa i parametri Path e Pattern . Il parametro Path usa la $PSHelp variabile per ottenere il percorso. Il parametro Pattern usa la stringa About_ come criteri di ricerca.

Per eseguire la funzione, digitare Search-Help. Il comando della Select-String funzione visualizza l'output nella console di PowerShell.

Esempio 5: Search per una stringa in un registro eventi di Windows

Questo esempio cerca una stringa in un registro eventi di Windows. La variabile $_ rappresenta l'oggetto corrente nella pipeline. Per altre informazioni, vedere about_Automatic_Variables.

$Events = Get-WinEvent -LogName Application -MaxEvents 50
$Events | Select-String -InputObject {$_.message} -Pattern 'Failed'

Il Get-WinEvent cmdlet usa il parametro LogName per specificare il registro applicazioni. Il parametro MaxEvents ottiene i 50 eventi più recenti dal log. Il contenuto del log viene archiviato nella variabile denominata $Events.

La $Events variabile viene inviata alla pipeline al Select-String cmdlet . Select-String utilizza il parametro InputObject . La $_ variabile rappresenta l'oggetto corrente ed message è una proprietà dell'evento. Il parametro Pattern specifica la stringa Failed e cerca le corrispondenze in $_.message. Select-String visualizza l'output nella console di PowerShell.

Esempio 6: Trovare una stringa nelle sottodirectory

In questo esempio viene eseguita la ricerca di una stringa di testo specifica in una directory e in tutte le relative sottodirectory.

Get-ChildItem -Path C:\Windows\System32\*.txt -Recurse | Select-String -Pattern 'Microsoft' -CaseSensitive

Get-ChildItem usa il parametro Path per specificare C:\Windows\System32*.txt. Il parametro Recurse include le sottodirectory. Gli oggetti vengono inviati alla pipeline a Select-String.

Select-String usa il parametro Pattern e specifica la stringa Microsoft. Il parametro CaseSensitive viene usato per trovare la corrispondenza con il caso esatto della stringa. Select-String visualizza l'output nella console di PowerShell.

Nota

A seconda delle autorizzazioni, nell'output potrebbero essere visualizzati i messaggi di accesso negato .

Esempio 7: Trovare stringhe che non corrispondono a un criterio

In questo esempio viene illustrato come escludere righe di dati che non corrispondono a un criterio.

Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\Command.txt -Pattern 'Get', 'Set'  -NotMatch

Il Get-Command cmdlet invia oggetti nella pipeline a Out-File per creare il file Command.txt nella directory corrente. Select-String usa il parametro Path per specificare il file diCommand.txt . Il parametro Pattern specifica Get e Set come criterio di ricerca. Il parametro NotMatch esclude Get e Set dai risultati. Select-String visualizza l'output nella console di PowerShell che non include Get o Set.

Esempio 8: Trovare righe prima e dopo una corrispondenza

In questo esempio viene illustrato come ottenere le righe prima e dopo il modello corrispondente.

Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\Command.txt -Pattern 'Get-Computer' -Context 2, 3

Command.txt:1186:Cmdlet          Get-CmsMessage            3.0.0.0    Microsoft.PowerShell.Security
  Command.txt:1187:Cmdlet          Get-Command               3.0.0.0    Microsoft.PowerShell.Core
> Command.txt:1188:Cmdlet          Get-ComputerInfo          3.1.0.0    Microsoft.PowerShell.Management
> Command.txt:1189:Cmdlet          Get-ComputerRestorePoint  3.1.0.0    Microsoft.PowerShell.Management
  Command.txt:1190:Cmdlet          Get-Content               3.1.0.0    Microsoft.PowerShell.Management
  Command.txt:1191:Cmdlet          Get-ControlPanelItem      3.1.0.0    Microsoft.PowerShell.Management
  Command.txt:1192:Cmdlet          Get-Counter               3.0.0.0    Microsoft.PowerShell.Diagnostics

Il Get-Command cmdlet invia oggetti nella pipeline a Out-File per creare il file Command.txt nella directory corrente. Select-String usa il parametro Path per specificare il file diCommand.txt . Il parametro Pattern specifica Get-Computer come modello di ricerca. Il parametro Context usa due valori, prima e dopo, e contrassegna i criteri di ricerca nell'output con una parentesi angolare (>). Il parametro Context restituisce le due righe prima della corrispondenza del primo criterio e tre righe dopo l'ultima corrispondenza del criterio.

Esempio 9: Trovare tutte le corrispondenze dei criteri

In questo esempio viene illustrato il modo in cui il parametro AllMatches trova ogni corrispondenza di criterio in una riga di testo. Per impostazione predefinita, Select-String trova solo la prima occorrenza di un criterio in una riga di testo. In questo esempio vengono utilizzate le proprietà dell'oggetto trovate con il Get-Member cmdlet .

PS> $A = Get-ChildItem -Path "$PSHOME\en-US\*.txt" | Select-String -Pattern 'PowerShell'

PS> $A

C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:5:    Describes the parameters that Windows PowerShell
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:9:    Windows PowerShell Workflow adds the activity common

PS> $A.Matches

Groups   : {0}
Success  : True
Name     : 0
Captures : {0}
Index    : 4
Length   : 10
Value    : PowerShell

PS> $A.Matches.Length

2073

PS> $B = Get-ChildItem -Path "$PSHOME\en-US\*.txt" | Select-String -Pattern 'PowerShell' -AllMatches

PS> $B.Matches.Length

2200

Il Get-ChildItem cmdlet usa il parametro Path . Il parametro Path usa la variabile $PSHOME che specifica la directory di PowerShell. Il resto del percorso include la sottodirectory en-US e specifica ogni *.txt file nella directory. Gli Get-ChildItem oggetti vengono archiviati nella $A variabile . La $A variabile viene inviata alla pipeline al Select-String cmdlet . Select-String usa il parametro Pattern per cercare la stringa di PowerShell in ogni file.

Dalla riga di comando di PowerShell viene visualizzato il contenuto della $A variabile. È presente una riga che contiene due occorrenze della stringa PowerShell.

La $A.Matches proprietà elenca la prima occorrenza del modello PowerShell in ogni riga.

La $A.Matches.Length proprietà conta la prima occorrenza del modello PowerShell in ogni riga.

La $B variabile usa gli stessi Get-ChildItem cmdlet e Select-String , ma aggiunge il parametro AllMatches . AllMatches trova ogni occorrenza del modello PowerShell in ogni riga. Gli oggetti archiviati nelle $A variabili e $B sono identici.

La $B.Matches.Length proprietà aumenta perché per ogni riga viene conteggiata ogni occorrenza del modello di PowerShell .

Parametri

-AllMatches

Indica che il cmdlet cerca più di una corrispondenza in ogni riga di testo. Senza questo parametro, Select-String trova solo la prima corrispondenza in ogni riga di testo.

Quando Select-String trova più corrispondenze in una riga di testo, genera comunque un solo oggetto MatchInfo per la riga, ma la proprietà Matches dell'oggetto contiene tutte le corrispondenze.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CaseSensitive

Indica che le corrispondenze del cmdlet fanno distinzione tra maiuscole e minuscole. Per impostazione predefinita, le corrispondenze non fanno distinzione tra maiuscole e minuscole.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Context

Acquisisce il numero specificato di righe prima e dopo la riga corrispondente al criterio.

Se si immette un numero come valore di questo parametro, tale numero determina il numero di righe acquisite prima e dopo la corrispondenza. Se si immettono due numeri come valore, il primo numero determina il numero di righe che precedono la corrispondenza e il secondo numero determina il numero di righe che seguono la corrispondenza. Ad esempio: -Context 2,3.

Nella visualizzazione predefinita, le righe con una corrispondenza sono indicate da una parentesi uncinata destra (>) (ASCII 62) nella prima colonna della visualizzazione. Le righe non contrassegnate sono il contesto.

Il parametro Context non modifica il numero di oggetti generati da Select-String. Select-String genera un oggetto MatchInfo per ogni corrispondenza. Il contesto viene archiviato come matrice di stringhe nella proprietà Context dell'oggetto .

Quando l'output di un Select-String comando viene inviato alla pipeline a un altro Select-String comando, il comando ricevente cerca solo il testo nella riga corrispondente. La riga corrispondente è il valore della proprietà Line dell'oggetto MatchInfo , non il testo nelle righe di contesto. Di conseguenza, il parametro Context non è valido nel comando ricevente Select-String .

Quando il contesto include una corrispondenza, l'oggetto MatchInfo per ogni corrispondenza include tutte le righe di contesto, ma le righe sovrapposte vengono visualizzate una sola volta nella visualizzazione.

Type:Int32[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Encoding

Specifica il tipo di codifica per il file di destinazione. Il valore predefinito è Default.

I valori accettabili per questo parametro sono i seguenti:

  • ASCII Usa il set di caratteri ASCII (a 7 bit).
  • BigEndianUnicode Usa UTF-16 con l'ordine dei byte big-endian.
  • Predefinito Usa la codifica corrispondente alla tabella codici attiva del sistema (in genere ANSI).
  • OEM Usa la codifica corrispondente alla tabella codici OEM corrente del sistema.
  • Unicode Usa UTF-16 con l'ordine dei byte little-endian.
  • UTF7 Usa UTF-7.
  • UTF8 Usa UTF-8.
  • UTF32 Usa UTF-32 con l'ordine dei byte little-endian.
Type:String
Accepted values:ASCII, BigEndianUnicode, Default, OEM, Unicode, UTF7, UTF8, UTF32
Position:Named
Default value:Default
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Exclude

Esclude gli elementi specificati. Il valore di questo parametro qualifica il parametro Path. Immettere un elemento o un criterio di percorso, ad esempio *.txt. I caratteri jolly sono consentiti.

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Include

Include gli elementi specificati. Il valore di questo parametro qualifica il parametro Path. Immettere un elemento o un criterio di percorso, ad esempio *.txt. I caratteri jolly sono consentiti.

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-InputObject

Specifica il testo da cercare. Immettere una variabile che contiene il testo oppure digitare un comando o un'espressione che ottiene il testo.

L'uso del parametro InputObject non equivale all'invio di stringhe verso il basso della pipeline a Select-String.

Quando si invia tramite pipe più di una stringa al Select-String cmdlet, cerca il testo specificato in ogni stringa e restituisce ogni stringa contenente il testo di ricerca.

Quando si usa il parametro InputObject per inviare una raccolta di stringhe, Select-String considera la raccolta come una singola stringa combinata. Select-String restituisce le stringhe come unità se trova il testo di ricerca in qualsiasi stringa.

Type:PSObject
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-List

Da ogni file di input viene restituita solo la prima istanza del testo corrispondente. Questo è il modo più efficiente per recuperare un file di elenco con contenuto corrispondente all'espressione regolare.

Per impostazione predefinita, Select-String restituisce un oggetto MatchInfo per ogni corrispondenza trovata.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LiteralPath

Specifica il percorso dei file in cui cercare. Il valore del parametro LiteralPath viene usato esattamente come viene digitato. Nessun carattere viene interpretato come carattere jolly. Se il percorso include caratteri di escape, racchiuderlo tra virgolette singole. Le virgolette singole indicano a PowerShell di non interpretare alcun carattere come sequenze di escape. Per altre informazioni, vedere about_Quoting_Rules.

Type:String[]
Aliases:PSPath
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-NotMatch

Il parametro NotMatch trova il testo che non corrisponde al modello specificato.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

Specifica il percorso dei file da cercare. I caratteri jolly sono consentiti. Il percorso predefinito è la directory locale.

Specificare i file nella directory, ad esempio log1.txt, *.doco *.*. Se si specifica solo una directory, il comando non riesce.

Type:String[]
Position:1
Default value:Local directory
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-Pattern

Specifica il testo da trovare in ogni riga. Digitare una stringa o un'espressione regolare. Se si digita una stringa, usare il parametro SimpleMatch .

Per informazioni sulle espressioni regolari, vedere about_Regular_Expressions.

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Quiet

Indica che il cmdlet restituisce un valore booleano (True o False), anziché un oggetto MatchInfo . Il valore è True se viene trovato il criterio; in caso contrario, il valore è False.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SimpleMatch

Indica che il cmdlet usa una corrispondenza semplice anziché una corrispondenza di espressione regolare. In una corrispondenza semplice cerca Select-String il testo nel parametro Pattern . Non interpreta il valore del parametro Pattern come istruzione di espressione regolare.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Input

PSObject

È possibile inviare tramite pipe qualsiasi oggetto con un metodo ToString a Select-String.

Output

Microsoft.PowerShell.Commands.MatchInfo or System.Boolean

Per impostazione predefinita, l'output è un set di oggetti MatchInfo con uno per ogni corrispondenza trovata. Se si usa il parametro Quiet , l'output è un valore booleano che indica se il modello è stato trovato.

Note

Select-String è simile a grep in UNIX o findstr.exe in Windows.

L'alias sls per il Select-String cmdlet è stato introdotto in PowerShell 3.0.

Nota

In base ai verbi approvati per i comandi di PowerShell, il prefisso alias ufficiale per Select-* i cmdlet è sc, non sl. Di conseguenza, l'alias appropriato per Select-String deve essere scs, non sls. Si tratta di un'eccezione a questa regola.

Per usare Select-String, digitare il testo che si desidera trovare come valore del parametro Pattern . Per specificare il testo da cercare, usare i criteri seguenti:

  • Digitare il testo in una stringa tra virgolette e quindi inviarlo tramite pipe a Select-String.
  • Archiviare una stringa di testo in una variabile e quindi specificare la variabile come valore del parametro InputObject .
  • Se il testo viene archiviato nei file, usare il parametro Path per specificare il percorso dei file.

Per impostazione predefinita, Select-String interpreta il valore del parametro Pattern come espressione regolare. Per altre informazioni, vedere about_Regular_Expressions. È possibile usare il parametro SimpleMatch per eseguire l'override della corrispondenza dell'espressione regolare. Il parametro SimpleMatch trova le istanze del valore del parametro Pattern nell'input.

L'output predefinito di Select-String è un oggetto MatchInfo , che include informazioni dettagliate sulle corrispondenze. Le informazioni nell'oggetto sono utili quando si cerca testo nei file, perché gli oggetti MatchInfo hanno proprietà come Filename e Line. Quando l'input non proviene dal file, il valore di questi parametri è InputStream.

Se non sono necessarie le informazioni nell'oggetto MatchInfo , usare il parametro Quiet . Il parametro Quiet restituisce un valore booleano (True o False) per indicare se è stata trovata una corrispondenza, anziché un oggetto MatchInfo .

Quando corrisponde a frasi, Select-String usa le impostazioni cultura correnti impostate per il sistema. Per trovare le impostazioni cultura correnti, usare il cmdlet Get-Culture.

Per trovare le proprietà di un oggetto MatchInfo , digitare il comando seguente:

Select-String -Path test.txt -Pattern 'test' | Get-Member | Format-List -Property *