Delen via


about_Redirection

Korte beschrijving

Hierin wordt uitgelegd hoe u uitvoer van PowerShell omleidt naar tekstbestanden.

Lange beschrijving

PowerShell verzendt standaard uitvoer naar de PowerShell-host. Meestal is dit de consoletoepassing. U kunt de uitvoer echter omleiden naar een tekstbestand en u kunt de foutuitvoer omleiden naar de normale uitvoerstroom.

U kunt de volgende methoden gebruiken om uitvoer om te leiden:

  • Gebruik de Out-File cmdlet, waarmee uitvoer van de opdracht naar een tekstbestand wordt verzonden. Normaal gesproken gebruikt u de Out-File cmdlet wanneer u de bijbehorende parameters moet gebruiken, zoals de Encodingparameters , Force, Widthof NoClobber .

  • Gebruik de Tee-Object cmdlet, waarmee de uitvoer van de opdracht naar een tekstbestand wordt verzonden en vervolgens naar de pijplijn wordt verzonden.

  • Gebruik de PowerShell-omleidingsoperators. Het gebruik van de omleidingsoperator met een bestandsdoel is functioneel gelijk aan piping naar Out-File zonder extra parameters.

Zie about_Output_Streams voor meer informatie over streams.

Omleidingsbare uitvoerstromen

PowerShell ondersteunt omleiding van de volgende uitvoerstromen.

Stream # Description Geïntroduceerd in Cmdlet schrijven
1 Geslaagde Stream PowerShell 2.0 Write-Output
2 Fout Stream PowerShell 2.0 Write-Error
3 Waarschuwing Stream PowerShell 3.0 Write-Warning
4 Uitgebreide Stream PowerShell 3.0 Write-Verbose
5 Foutopsporing Stream PowerShell 3.0 Write-Debug
6 Informatie Stream PowerShell 5.0 Write-Information
* Alle streams PowerShell 3.0

Er is ook een voortgangsstroom in PowerShell, maar deze biedt geen ondersteuning voor omleiding.

Belangrijk

De stromen Success en Error zijn vergelijkbaar met de stdout- en stderr-stromen van andere shells. Stdin is echter niet verbonden met de PowerShell-pijplijn voor invoer.

PowerShell-omleidingsoperators

De PowerShell-omleidingsoperators zijn als volgt, waarbij n het streamnummer wordt aangegeven. De geslaagde stream ( 1 ) is de standaardwaarde als er geen stream is opgegeven.

Operator Beschrijving Syntax
> De opgegeven stream verzenden naar een bestand. n>
>> Voeg de opgegeven stream toe aan een bestand. n>>
>&1 Hiermee wordt de opgegeven stream omgeleid naar de stream Geslaagd . n>&1

Notitie

In tegenstelling tot sommige Unix-shells kunt u alleen andere streams omleiden naar de successtream .

Voorbeelden

Voorbeeld 1: Fouten en uitvoer omleiden naar een bestand

Dit voorbeeld wordt uitgevoerd dir op één item dat slaagt en een item dat een fout veroorzaakt.

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

Deze gebruikt 2>&1 om de foutstroom om te leiden naar de stream Geslaagd en > om de resulterende successtream te verzenden naar een bestand met de naam dir.log

Voorbeeld 2: alle geslaagde streamgegevens naar een bestand verzenden

In dit voorbeeld worden alle geslaagde streamgegevens verzonden naar een bestand met de naam script.log.

.\script.ps1 > script.log

Voorbeeld 3: stromen geslaagd, waarschuwing en fout verzenden naar een bestand

In dit voorbeeld ziet u hoe u omleidingsoperators kunt combineren om een gewenst resultaat te bereiken.

&{
   Write-Warning "hello"
   Write-Error "hello"
   Write-Output "hi"
} 3>&1 2>&1 > C:\Temp\redirection.log
  • 3>&1 leidt de waarschuwingsstroom om naar de stream Geslaagd .
  • 2>&1 leidt de foutstroom om naar de stream Geslaagd (die nu ook alle gegevens van de waarschuwingsstroom bevat)
  • > leidt de stream Geslaagd (die nu zowel de waarschuwings- als foutstreams bevat) om naar een bestand met de naam C:\temp\redirection.log)

Voorbeeld 4: alle stromen omleiden naar een bestand

In dit voorbeeld worden alle uitvoerstromen van een script met de naam script.ps1 verzonden naar een bestand met de naam script.log

.\script.ps1 *> script.log

Voorbeeld 5: Alle Write-Host- en informatiestroomgegevens onderdrukken

In dit voorbeeld worden alle gegevensstromen onderdrukt. Zie Write-Host en Write-Information voor meer informatie over informatiestroom-cmdlets.

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

Voorbeeld 6: Het effect van actievoorkeuren weergeven

Variabelen en parameters voor actievoorkeuren kunnen wijzigen wat naar een bepaalde stroom wordt geschreven. Het script in dit voorbeeld laat zien hoe de waarde van $ErrorActionPreference invloed is op wat naar de foutstroom wordt geschreven.

$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'

Wanneer we dit script uitvoeren, wordt ons gevraagd wanneer $ErrorActionPreference is ingesteld op 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.

Wanneer we het logboekbestand onderzoeken, zien we het volgende:

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

Notities

De omleidingsoperators die geen gegevens (> en n>) toevoegen, overschrijven de huidige inhoud van het opgegeven bestand zonder waarschuwing.

Als het bestand echter een alleen-lezen, verborgen of systeembestand is, mislukt de omleiding. De toevoegomleidingsoperatoren (>> en n>>) schrijven niet naar een alleen-lezen bestand, maar voegen inhoud toe aan een systeem of verborgen bestand.

Als u de omleiding van inhoud naar een alleen-lezen, verborgen of systeembestand wilt afdwingen, gebruikt u de cmdlet met de Out-FileForce bijbehorende parameter.

Wanneer u naar bestanden schrijft, gebruiken UTF8NoBOM de omleidingsoperators codering. Als het bestand een andere codering heeft, is de uitvoer mogelijk niet juist geformatteerd. Als u wilt schrijven naar bestanden met een andere codering, gebruikt u de cmdlet met de Out-File bijbehorende Encoding parameter.

Breedte van uitvoer bij het schrijven naar een bestand

Wanneer u naar een bestand schrijft met of Out-File de omleidingsoperators, wordt de tabeluitvoer in PowerShell naar het bestand opgemaakt op basis van de breedte van de console waarin deze wordt uitgevoerd. Wanneer bijvoorbeeld tabeluitvoer wordt vastgelegd in een bestand met een opdracht zoals Get-ChildItem Env:\Path > path.log op een systeem waarbij de breedte van de console is ingesteld op 80 kolommen, wordt de uitvoer in het bestand afgekapt tot 80 tekens:

Name                         Value
----                         -----
Path                         C:\Program Files\PowerShell\7-preview;C:\WINDOWS…

Aangezien de breedte van de console willekeurig kan worden ingesteld op systemen waarop uw script wordt uitgevoerd, kunt u de voorkeur geven aan powershell-indeling voor tabeluitvoer naar bestanden op basis van een breedte die u in plaats daarvan opgeeft.

De Out-File cmdlet biedt de parameter Width waarmee u de gewenste breedte voor tabeluitvoer kunt instellen. In plaats van overal toe te voegen -Width 2000 waar u aanroept Out-File, kunt u de $PSDefaultParameterValues variabele gebruiken om deze waarde in te stellen voor alle gebruik van de Out-File cmdlet in een script. En omdat de omleidingsoperators (> en >>) in feite aliassen zijn voor Out-File, heeft het instellen van de Out-File:Width parameter voor het hele script ook invloed op de opmaakbreedte voor de omleidingsoperators. Plaats de volgende opdracht boven aan het script dat u wilt instellen Out-File:Width voor het hele script:

$PSDefaultParameterValues['out-file:width'] = 2000

Als u de uitvoerbreedte verhoogt, neemt het geheugenverbruik toe bij het vastleggen van tabelgeformatteerde uitvoer. Als u veel tabellaire gegevens in een logboek opgeeft en u weet dat u met een kleinere breedte aan de slag kunt, gebruikt u de kleinere breedte.

In sommige gevallen, zoals Get-Service uitvoer, om de extra breedte te gebruiken, moet u de uitvoer doorspeken Format-Table -AutoSize voordat u uitvoer naar het bestand uitvoert.

$PSDefaultParameterValues['out-file:width'] = 2000
Get-Service | Format-Table -AutoSize > services.log

Zie about_Preference_Variables voor meer informatie over$PSDefaultParameterValues.

Mogelijke verwarring met vergelijkingsoperators

De > operator moet niet worden verward met de vergelijkingsoperator Groter dan (vaak aangeduid als > in andere programmeertalen).

Afhankelijk van de objecten die worden vergeleken, kan de uitvoer > met correct lijken te zijn (omdat 36 niet groter is dan 42).

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

Een controle van het lokale bestandssysteem kan echter zien dat een bestand met de naam 42 is geschreven, met de inhoud 36.

PS> dir

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

PS> cat 42
36

Als u de omgekeerde vergelijking < (kleiner dan) probeert te gebruiken, treedt er een systeemfout op:

PS> if (36 < 42) { "true" } else { "false" }
ParserError:
Line |
   1 |  if (36 < 42) { "true" } else { "false" }
     |         ~
     | The '<' operator is reserved for future use.

Als numerieke vergelijking de vereiste bewerking is en -lt-gt moet worden gebruikt. Zie de -gt operator in about_Comparison_Operators voor meer informatie.

Zie ook