Informazioni sul reindirizzamentoAbout Redirection

Breve descrizioneShort description

Viene illustrato come reindirizzare l'output da PowerShell a file di testo.Explains how to redirect output from PowerShell to text files.

Descrizione lungaLong description

Per impostazione predefinita, PowerShell invia l'output all'host PowerShell.By default, PowerShell sends output to the PowerShell host. Si tratta in genere dell'applicazione console.Usually this is the console application. Tuttavia, è possibile indirizzare l'output a un file di testo ed è possibile reindirizzare l'output degli errori al flusso di output normale.However, you can direct the output to a text file, and you can redirect error output to the regular output stream.

Per reindirizzare l'output, è possibile usare i metodi seguenti:You can use the following methods to redirect output:

  • Usare il Out-File cmdlet, che invia l'output del comando a un file di testo.Use the Out-File cmdlet, which sends command output to a text file. In genere, si usa il Out-File cmdlet quando è necessario usare i parametri, ad esempio i Encoding Force parametri,, Width o NoClobber .Typically, you use the Out-File cmdlet when you need to use its parameters, such as the Encoding, Force, Width, or NoClobber parameters.

  • Usare il Tee-Object cmdlet, che invia l'output del comando a un file di testo e quindi lo invia alla pipeline.Use the Tee-Object cmdlet, which sends command output to a text file and then sends it to the pipeline.

  • Usare gli operatori di reindirizzamento di PowerShell.Use the PowerShell redirection operators. L'uso dell'operatore di reindirizzamento con una destinazione file è equivalente dal punto di vista funzionale al piping a senza Out-File parametri aggiuntivi.Using the redirection operator with a file target is functionally equivalent to piping to Out-File with no extra parameters.

Per ulteriori informazioni sui flussi, vedere about_Output_Streams.For more information about streams, see about_Output_Streams.

Flussi di output reindirizzabiliRedirectable output streams

PowerShell supporta il reindirizzamento dei flussi di output seguenti.PowerShell supports redirection of the following output streams.

Flusso #Stream # DescrizioneDescription Introdotta inIntroduced in Cmdlet WriteWrite Cmdlet
11 Operazione riuscita FlussoSuccess Stream PowerShell 2.0PowerShell 2.0 Write-Output
22 Errore FlussoError Stream PowerShell 2.0PowerShell 2.0 Write-Error
33 Avviso di FlussoWarning Stream PowerShell 3.0PowerShell 3.0 Write-Warning
44 Verbose FlussoVerbose Stream PowerShell 3.0PowerShell 3.0 Write-Verbose
55 Esegui debug FlussoDebug Stream PowerShell 3.0PowerShell 3.0 Write-Debug
66 Informazioni su FlussoInformation Stream PowerShell 5.0PowerShell 5.0 Write-Information
* Tutti i flussiAll Streams PowerShell 3.0PowerShell 3.0

Nota

È disponibile anche un flusso di stato in PowerShell, ma non supporta il reindirizzamento.There is also a Progress stream in PowerShell, but it does not support redirection.

Operatori di reindirizzamento PowerShellPowerShell redirection operators

Gli operatori di reindirizzamento di PowerShell sono i seguenti, dove n rappresenta il numero di flusso.The PowerShell redirection operators are as follows, where n represents the stream number. Il flusso di operazione riuscita ( 1 ) è il valore predefinito se non viene specificato alcun flusso.The Success stream ( 1 ) is the default if no stream is specified.

OperatoreOperator DescrizioneDescription SintassiSyntax
> Invia il flusso specificato a un file.Send specified stream to a file. n>
>> Accoda il flusso specificato a un file.Append specified stream to a file. n>>
>&1 Reindirizza il flusso specificato al flusso di operazione riuscita .Redirects the specified stream to the Success stream. n>&1

Nota

A differenza di alcune shell UNIX, è possibile reindirizzare solo altri flussi al flusso di successo .Unlike some Unix shells, you can only redirect other streams to the Success stream.

EsempiExamples

Esempio 1: reindirizzare gli errori e l'output in un fileExample 1: Redirect errors and output to a file

Questo esempio viene eseguito dir su un elemento che avrà esito positivo e uno che genererà un errore.This example runs dir on one item that will succeed, and one that will error.

dir 'C:\', 'fakepath' 2>&1 > .\dir.log

USA 2>&1 per reindirizzare il flusso di errore al flusso di esito positivo e > per inviare il flusso di successo risultante a un file denominato dir.logIt uses 2>&1 to redirect the Error stream to the Success stream, and > to send the resultant Success stream to a file called dir.log

Esempio 2: inviare tutti i dati di flusso riusciti a un fileExample 2: Send all Success stream data to a file

Questo esempio Invia tutti i dati di flusso riusciti a un file denominato script.log .This example sends all Success stream data to a file called script.log.

.\script.ps1 > script.log

Esempio 3: inviare flussi di esito positivo, avviso ed errore a un fileExample 3: Send Success, Warning, and Error streams to a file

In questo esempio viene illustrato come combinare gli operatori di reindirizzamento per ottenere un risultato desiderato.This example shows how you can combine redirection operators to achieve a desired result.

&{
   Write-Warning "hello"
   Write-Error "hello"
   Write-Output "hi"
} 3>&1 2>&1 > P:\Temp\redirection.log
  • 3>&1 reindirizza il flusso di avvisi al flusso di operazione riuscita .3>&1 redirects the Warning stream to the Success stream.
  • 2>&1 reindirizza il flusso di errore al flusso di esito positivo (che ora include tutti i dati del flusso di avviso )2>&1 redirects the Error stream to the Success stream (which also now includes all Warning stream data)
  • > reindirizza il flusso di operazione riuscita (che ora contiene i flussi di avviso ed errore ) a un file denominato C:\temp\redirection.log )> redirects the Success stream (which now contains both Warning and Error streams) to a file called C:\temp\redirection.log)

Esempio 4: reindirizzare tutti i flussi a un fileExample 4: Redirect all streams to a file

Questo esempio Invia tutti i flussi di output da uno script denominato script.ps1 a un file denominato script.logThis example sends all streams output from a script called script.ps1 to a file called script.log

.\script.ps1 *> script.log

Esempio 5: disattivare tutti i dati del flusso di Write-Host e informazioniExample 5: Suppress all Write-Host and Information stream data

In questo esempio vengono eliminati tutti i dati del flusso di informazioni.This example suppresses all information stream data. Per altre informazioni sui cmdlet del flusso di informazioni , vedere Write-Host e Write-informationTo read more about Information stream cmdlets, see Write-Host and Write-Information

&{
   Write-Host "Hello"
   Write-Information "Hello" -InformationAction Continue
} 6> $null

Esempio 6: visualizzare l'effetto delle preferenze di azioneExample 6: Show the effect of Action Preferences

Le variabili e i parametri delle preferenze di azione possono modificare ciò che viene scritto in un determinato flusso.Action Preference variables and parameters can change what gets written to a particular stream. Lo script in questo esempio Mostra come il valore di $ErrorActionPreference influisca sugli elementi che vengono scritti nel flusso di errore .The script in this example shows how the value of $ErrorActionPreference affects what gets written to the Error stream.

$ErrorActionPreference = 'Continue'
$ErrorActionPreference > log.txt
get-item /not-here 2>&1 >> log.txt

$ErrorActionPreference = 'SilentlyContinue'
$ErrorActionPreference >> log.txt
get-item /not-here 2>&1 >> log.txt

$ErrorActionPreference = 'Stop'
$ErrorActionPreference >> log.txt
Try {
    get-item /not-here 2>&1 >> log.txt
}
catch {
    "`tError caught!" >> log.txt
}
$ErrorActionPreference = 'Ignore'
$ErrorActionPreference >> log.txt
get-item /not-here 2>&1 >> log.txt

$ErrorActionPreference = 'Inquire'
$ErrorActionPreference >> log.txt
get-item /not-here 2>&1 >> log.txt

$ErrorActionPreference = 'Continue'

Quando si esegue questo script, viene visualizzato un prompt quando $ErrorActionPreference è impostato su Inquire .When we run this script we get prompted when $ErrorActionPreference is set to Inquire.

PS C:\temp> .\test.ps1

Confirm
Cannot find path 'C:\not-here' because it does not exist.
[Y] Yes  [A] Yes to All  [H] Halt Command  [S] Suspend  [?] Help (default is "Y"): H
Get-Item: C:\temp\test.ps1:23
Line |
  23 |  get-item /not-here 2>&1 >> log.txt
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | The running command stopped because the user selected the Stop option.

Quando si esamina il file di log, viene visualizzato quanto segue:When we examine the log file we see the following:

PS C:\temp> Get-Content .\log.txt
Continue

Get-Item: C:\temp\test.ps1:3
Line |
   3 |  get-item /not-here 2>&1 >> log.txt
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Cannot find path 'C:\not-here' because it does not exist.

SilentlyContinue
Stop
    Error caught!
Ignore
Inquire

NoteNotes

Gli operatori di reindirizzamento che non aggiungono dati ( > e n> ) sovrascrivono il contenuto corrente del file specificato senza preavviso.The redirection operators that do not append data (> and n>) overwrite the current contents of the specified file without warning.

Tuttavia, se il file è di sola lettura, nascosto o di sistema, il reindirizzamento ha esito negativo.However, if the file is a read-only, hidden, or system file, the redirection fails. Gli operatori di reindirizzamento di Accodamento ( >> e n>> ) non scrivono in un file di sola lettura, ma aggiungono contenuto a un file di sistema o nascosto.The append redirection operators (>> and n>>) do not write to a read-only file, but they append content to a system or hidden file.

Per forzare il reindirizzamento del contenuto a un file di sola lettura, nascosto o di sistema, usare il Out-File cmdlet con il relativo Force parametro.To force the redirection of content to a read-only, hidden, or system file, use the Out-File cmdlet with its Force parameter.

Quando si scrive in file, gli operatori di reindirizzamento utilizzano la UTF8NoBOM codifica.When you are writing to files, the redirection operators use UTF8NoBOM encoding. Se il file ha una codifica diversa, l'output potrebbe non essere formattato correttamente.If the file has a different encoding, the output might not be formatted correctly. Per scrivere su file con una codifica diversa, usare il Out-File cmdlet con il relativo Encoding parametro.To write to files with a different encoding, use the Out-File cmdlet with its Encoding parameter.

Potenziale confusione con gli operatori di confrontoPotential confusion with comparison operators

L' > operatore non deve essere confuso con l'operatore di confronto maggiore di (spesso indicato come > in altri linguaggi di programmazione).The > operator is not to be confused with the Greater-than comparison operator (often denoted as > in other programming languages).

A seconda degli oggetti confrontati, l'output con > può sembrare corretto (perché 36 non è maggiore di 42).Depending on the objects being compared, the output using > can appear to be correct (because 36 is not greater than 42).

PS> if (36 > 42) { "true" } else { "false" }
false

Tuttavia, un controllo del file system locale può vedere che 42 è stato scritto un file denominato, con il contenuto 36 .However, a check of the local filesystem can see that a file called 42 was written, with the contents 36.

PS> dir

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
------          1/02/20  10:10 am              3 42

PS> cat 42
36

Se si tenta di utilizzare il confronto inverso < (minore di), viene restituito un errore di sistema:Attempting to use the reverse comparison < (less than), yields a system error:

PS> if (36 < 42) { "true" } else { "false" }
At line:1 char:8
+ if (36 < 42) { "true" } else { "false" }
+        ~
The '<' operator is reserved for future use.
+ CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : RedirectionNotSupported

Se il confronto numerico è l'operazione richiesta -lt e -gt deve essere utilizzato.If numeric comparison is the required operation, -lt and -gt should be used. Vedere: -gt operatore di confrontoSee: -gt Comparison Operator

Vedere ancheSee also