Om omdirigering
Kort beskrivning
Förklarar hur du omdirigerar utdata från PowerShell till textfiler.
Lång beskrivning
Som standard skickar PowerShell utdata till PowerShell-värden. Vanligtvis är detta konsolprogrammet. Du kan dock dirigera utdata till en textfil och du kan omdirigera felutdata till den vanliga utdataströmmen.
Du kan använda följande metoder för att omdirigera utdata:
Använd cmdleten
Out-File
som skickar kommandoutdata till en textfil. Vanligtvis använder du cmdletenOut-File
när du behöver använda dess parametrar, till exempel parametrarnaEncoding
,Force
,Width
ellerNoClobber
.Använd cmdleten
Tee-Object
som skickar kommandoutdata till en textfil och sedan skickar den till pipelinen.Använd PowerShell-omdirigeringsoperatorerna. Att använda omdirigeringsoperatorn med ett filmål är funktionellt likvärdigt med rörledningar utan
Out-File
extra parametrar.
Mer information om strömmar finns i about_Output_Streams.
Omdirigerbara utdataströmmar
PowerShell stöder omdirigering av följande utdataströmmar.
Stream # | Description | Introducerades i | Skriv cmdlet |
---|---|---|---|
1 | Lyckades Stream | PowerShell 2.0 | Write-Output |
2 | Fel Stream | PowerShell 2.0 | Write-Error |
3 | Varning Stream | PowerShell 3.0 | Write-Warning |
4 | Utförlig Stream | PowerShell 3.0 | Write-Verbose |
5 | Felsöka Stream | PowerShell 3.0 | Write-Debug |
6 | Information Stream | PowerShell 5.0 | Write-Information |
* | Alla strömmar | PowerShell 3.0 |
Anteckning
Det finns också en Förloppsström i PowerShell, men den stöder inte omdirigering.
PowerShell-omdirigeringsoperatorer
PowerShell-omdirigeringsoperatorerna är följande, där n
representerar strömnumret. Dataströmmen ( 1
) är standard om ingen ström har angetts.
Operator | Beskrivning | Syntax |
---|---|---|
> |
Skicka angiven ström till en fil. | n> |
>> |
Lägg till angiven dataström i en fil. | n>> |
>&1 |
Omdirigerar den angivna strömmen till dataströmmen Lyckades . | n>&1 |
Anteckning
Till skillnad från vissa Unix-gränssnitt kan du bara omdirigera andra strömmar till dataströmmen Lyckades .
Exempel
Exempel 1: Omdirigera fel och utdata till en fil
Det här exemplet körs dir
på ett objekt som kommer att lyckas och ett som kommer att fel.
dir 'C:\', 'fakepath' 2>&1 > .\dir.log
Den använder 2>&1
för att omdirigera felströmmen till dataströmmen Lyckades och >
för att skicka den resulterande lyckade dataströmmen till en fil med namnet dir.log
Exempel 2: Skicka alla data från dataströmmen till en fil
Det här exemplet skickar alla Dataström till en fil med namnet script.log
.
.\script.ps1 > script.log
Exempel 3: Skicka lyckade, varnings- och felströmmar till en fil
Det här exemplet visar hur du kan kombinera omdirigeringsoperatorer för att uppnå önskat resultat.
&{
Write-Warning "hello"
Write-Error "hello"
Write-Output "hi"
} 3>&1 2>&1 > P:\Temp\redirection.log
3>&1
omdirigerar varningsströmmen till dataströmmen Lyckades .2>&1
omdirigerar felströmmen till dataströmmen Lyckades (som nu även innehåller alla varningsströmdata )>
omdirigerar dataströmmen ( som nu innehåller både varnings- och felströmmar ) till en fil med namnetC:\temp\redirection.log
)
Exempel 4: Omdirigera alla strömmar till en fil
Det här exemplet skickar alla strömmars utdata från ett skript som heter script.ps1
till en fil med namnet script.log
.\script.ps1 *> script.log
Exempel 5: Ignorera alla Write-Host- och informationsströmdata
Det här exemplet utelämnar all informationsströmdata. Mer information om cmdletar för informationsström finns i Write-Host and Write-Information
&{
Write-Host "Hello"
Write-Information "Hello" -InformationAction Continue
} 6> $null
Exempel 6: Visa effekten av åtgärdsinställningar
Variabler och parametrar för åtgärdsinställningar kan ändra vad som skrivs till en viss dataström. Skriptet i det här exemplet visar hur värdet för $ErrorActionPreference
påverkar vad som skrivs till felströmmen .
$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'
När vi kör det här skriptet uppmanas vi när $ErrorActionPreference
är inställt på 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.
När vi undersöker loggfilen ser vi följande:
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
Kommentarer
Omdirigeringsoperatorerna som inte lägger till data (>
och n>
) skriver över det aktuella innehållet i den angivna filen utan varning.
Men om filen är en skrivskyddad, dold eller systemfil misslyckas omdirigeringen. Operatorerna för tilläggsomdirigering (>>
och n>>
) skriver inte till en skrivskyddad fil, men de lägger till innehåll i ett system eller en dold fil.
Om du vill framtvinga omdirigering av innehåll till en skrivskyddad, dold eller systemfil använder du cmdleten Out-File
med dess Force
parameter.
När du skriver till filer använder UTF8NoBOM
omdirigeringsoperatorerna kodning. Om filen har en annan kodning kanske utdata inte är korrekt formaterade. Om du vill skriva till filer med en annan kodning använder du cmdleten Out-File
med dess Encoding
parameter.
Potentiell förvirring med jämförelseoperatorer
Operatorn >
ska inte förväxlas med operatorn Större än jämförelse (kallas ofta för >
andra programmeringsspråk).
Beroende på vilka objekt som jämförs kan utdata som används >
vara korrekta (eftersom 36 inte är större än 42).
PS> if (36 > 42) { "true" } else { "false" }
false
En kontroll av det lokala filsystemet kan dock se att en fil med namnet 42
har skrivits med innehållet 36
.
PS> dir
Mode LastWriteTime Length Name
---- ------------- ------ ----
------ 1/02/20 10:10 am 3 42
PS> cat 42
36
Om du försöker använda den omvända jämförelsen <
(mindre än) uppstår ett systemfel:
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
Om numerisk jämförelse är den nödvändiga åtgärden -lt
och -gt
bör användas. Se: -gt
Jämförelseoperator