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. Dit is meestal de consoletoepassing. U kunt de uitvoer echter omleiden naar een tekstbestand en u kunt foutuitvoer omleiden naar de normale uitvoerstroom.
U kunt de volgende methoden gebruiken om uitvoer om te leiden:
Gebruik de
Out-File
cmdlet, waarmee opdrachtuitvoer naar een tekstbestand wordt verzonden. Normaal gesproken gebruikt u deOut-File
cmdlet wanneer u de bijbehorende parameters, zoals deEncoding
,Force
ofWidth
NoClobber
parameters, moet gebruiken.Gebruik de
Tee-Object
cmdlet, waarmee opdrachtuitvoer 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 leidingen
Out-File
zonder extra parameters.
Zie about_Output_Streams voor meer informatie over streams.
Omleidingsbare uitvoerstromen
PowerShell ondersteunt omleiding van de volgende uitvoerstromen.
Stream # | Beschrijving | Geïntroduceerd in | Cmdlet schrijven |
---|---|---|---|
1 | Geslaagde stroom | PowerShell 2.0 | Write-Output |
2 | Foutstroom | PowerShell 2.0 | Write-Error |
3 | Waarschuwingsstroom | PowerShell 3.0 | Write-Warning |
4 | Uitgebreide stream | PowerShell 3.0 | Write-Verbose |
5 | Fouten opsporen in Stream | PowerShell 3.0 | Write-Debug |
6 | Gegevensstroom | PowerShell 5.0 | Write-Information , Write-Host |
* | Alle streams | PowerShell 3.0 |
Er is ook een Voortgangsstroom in PowerShell, maar deze biedt geen ondersteuning voor omleiding.
Belangrijk
De succes - en foutstromen 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 successtroom ( 1
) is de standaardwaarde als er geen stream is opgegeven.
Operator | Description | Syntaxis |
---|---|---|
> |
Verzend de opgegeven stream naar een bestand. | n> |
>> |
Voeg de opgegeven stroom toe aan een bestand. | n>> |
>&1 |
Hiermee wordt de opgegeven stream omgeleid naar de successtroom. | n>&1 |
Notitie
In tegenstelling tot sommige Unix-shells kunt u alleen andere streams omleiden naar de successtroom .
Voorbeelden
Voorbeeld 1: Fouten en uitvoer omleiden naar een bestand
In dit voorbeeld wordt dir
één item uitgevoerd dat slaagt en één item dat mislukt.
dir C:\, fakepath 2>&1 > .\dir.log
Het gebruikt 2>&1
om de foutstroom om te leiden naar de successtroom en >
om de resulterende successtroom te verzenden naar een bestand met de naamdir.log
Voorbeeld 2: alle successtroomgegevens naar een bestand verzenden
In dit voorbeeld worden alle successtroomgegevens naar een bestand met de naam script.log
Verzonden.
.\script.ps1 > script.log
Voorbeeld 3: Stromen geslaagd, waarschuwingen en fouten 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
hiermee wordt de waarschuwingsstroom omgeleid naar de successtroom .2>&1
de foutstroom omleidt naar de successtroom (die nu ook alle waarschuwingsstroomgegevens bevat)>
leidt de successtroom (die nu zowel waarschuwings- als foutstromen bevat) om naar een bestand met de naamC:\temp\redirection.log
.
Voorbeeld 4: Alle streams omleiden naar een bestand
In dit voorbeeld worden alle streams-uitvoer verzonden van een script dat wordt aangeroepen script.ps1
naar een bestand met de naam script.log
.
.\script.ps1 *> script.log
Voorbeeld 5: alle gegevens van de schrijfhost en gegevensstroom onderdrukken
In dit voorbeeld worden alle gegevensstroomgegevens 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 actievoorkeur 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 u gevraagd wanneer $ErrorActionPreference
deze is ingesteld op Inquire
.
PS C:\temp> .\test.ps1
Confirm
Can't find path 'C:\not-here' because it doesn't 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 bekijken, 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
Opmerkingen
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 operatoren voor toevoegomleiding (>>
en n>>
) schrijven niet naar een alleen-lezenbestand, maar ze voegen inhoud toe aan een systeem of verborgen bestand.
Als u wilt afdwingen dat inhoud wordt omgeleid naar een alleen-lezen, verborgen of systeembestand, gebruikt u de cmdlet met Force
de Out-File
parameter.
Wanneer u naar bestanden schrijft, gebruiken UTF8NoBOM
de omleidingsoperators codering. Als het bestand een andere codering heeft, is de uitvoer mogelijk niet correct opgemaakt. Als u wilt schrijven naar bestanden met een andere codering, gebruikt u de cmdlet met Encoding
de Out-File
parameter.
Breedte van uitvoer bij schrijven naar een bestand
Wanneer u naar een bestand schrijft met behulp van Out-File
een van de omleidingsoperators, maakt PowerShell tabeluitvoer naar het bestand op basis van de breedte van de console waarin deze wordt uitgevoerd. Wanneer de uitvoer van de tabel bijvoorbeeld wordt vastgelegd in een bestand met behulp van een opdracht zoals Get-ChildItem Env:\Path > path.log
in een systeem waarin de consolebreedte is ingesteld op 80 kolommen, wordt de uitvoer in het bestand afgekapt tot 80 tekens:
Name Value
---- -----
Path C:\Program Files\PowerShell\7;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 de uitvoer van de PowerShell-tabel naar bestanden op basis van een breedte die u opgeeft.
De Out-File
cmdlet biedt een breedteparameter 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 gebruiksbewerkingen van de Out-File
cmdlet in een script. En omdat de omleidingsoperators (>
en >>
) effectief aliassen voor zijn, heeft het instellen van de Out-File:Width
parameter voor het hele script ook invloed op de opmaakbreedte voor de omleidingsoperatorsOut-File
. Plaats de volgende opdracht boven aan het script om in te stellen Out-File:Width
voor het hele script:
$PSDefaultParameterValues['out-file:width'] = 2000
Als u de uitvoerbreedte verhoogt, wordt het geheugenverbruik verhoogd wanneer de tabel opgemaakte uitvoer wordt geformatteerd. Als u veel tabelgegevens in een logboek opgeeft en u weet dat u met een kleinere breedte kunt komen, gebruikt u de kleinere breedte.
In sommige gevallen, zoals Get-Service
uitvoer, om de extra breedte te gebruiken, moet u de uitvoer doorsluisen Format-Table -AutoSize
voordat u 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
.
Binaire gegevens omleiden
PowerShell biedt geen ondersteuning voor het omleiden van binaire gegevens. Als u bytestream-gegevens omleidt, worden de gegevens door PowerShell als tekenreeksen behandeld. Deze omleiding resulteert in beschadigde gegevens.
Mogelijke verwarring met vergelijkingsoperatoren
De >
operator is niet te verwarren met de vergelijkingsoperator Groter dan (vaak aangeduid als >
in andere programmeertalen).
Afhankelijk van de objecten die worden vergeleken, kan de uitvoer >
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 probeert de omgekeerde vergelijking <
(kleiner dan) 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 -lt
is en -gt
moet worden gebruikt. Zie de -gt
operator in about_Comparison_Operators voor meer informatie.
Zie ook
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor