about_Redirection
Rövid leírás
Ebből a cikkből megtudhatja, hogyan irányíthatja át a kimenetet a PowerShellből szövegfájlokba.
Hosszú leírás
Alapértelmezés szerint a PowerShell kimenetet küld a PowerShell-gazdagépnek. Általában ez a konzolalkalmazás. A kimenetet azonban átirányíthatja egy szövegfájlba, és átirányíthatja a hibakimenetet a normál kimeneti streamre.
A kimenet átirányításához az alábbi módszereket használhatja:
Használja a
Out-File
parancsmagot, amely parancskimenetet küld egy szövegfájlnak. Általában akkor használja aOut-File
parancsmagot, ha a paramétereket, például aEncoding
,Force
,Width
vagyNoClobber
paramétereket kell használnia.Használja a
Tee-Object
parancsmagot, amely parancskimenetet küld egy szövegfájlnak, majd elküldi azt a folyamatnak.Használja a PowerShell átirányítási operátorokat. Ha az átirányítási operátort fájlküldővel használja, az funkcionálisan egyenértékű a pipinggel
Out-File
további paraméterek nélkül.
További információ a streamekről: about_Output_adatfolyamok.
Átirányítható kimeneti streamek
A PowerShell a következő kimeneti streamek átirányítását támogatja.
Patak # | Leírás | Bevezetés a következőbe: | Írási parancsmag |
---|---|---|---|
0 | Sikeres stream | PowerShell 2.0 | Write-Output |
2 | Hibastreamelés | PowerShell 2.0 | Write-Error |
3 | Figyelmeztető stream | PowerShell 3.0 | Write-Warning |
4 | Részletes stream | PowerShell 3.0 | Write-Verbose |
5 | Stream hibakeresése | PowerShell 3.0 | Write-Debug |
6 | Információfolyam | PowerShell 5.0 | Write-Information , Write-Host |
* | Minden adatfolyamok | PowerShell 3.0 |
A PowerShellben is van folyamatfolyam, de nem támogatja az átirányítást.
Fontos
A Siker és hiba streamek hasonlóak a többi rendszerhéj stdout és stderr streamjeihez. Az stdin azonban nincs csatlakoztatva a PowerShell-folyamathoz bemenet céljából.
PowerShell-átirányítási operátorok
A PowerShell átirányítási operátorai a következők, ahol n
a streamszám látható. Ha nincs megadva stream, akkor a Success stream ( 1
) az alapértelmezett.
Operátor | Leírás | Syntax |
---|---|---|
> |
Adott stream küldése fájlba. | n> |
>> |
A megadott stream hozzáfűzése egy fájlhoz. | n>> |
>&1 |
Átirányítja a megadott streamet a Sikeres streamre. | n>&1 |
Feljegyzés
Egyes Unix-rendszerhéjaktól eltérően csak más streameket irányíthat át a Siker streambe.
Példák
1. példa: Hibák és kimenet átirányítása fájlba
Ez a példa egy sikeres és egy sikertelen elemet futtat dir
.
dir C:\, fakepath 2>&1 > .\dir.log
2>&1
A hibastreamet a Siker streamre irányítja át, és >
az eredményül kapott sikeres streamet egy úgynevezett fájlba küldidir.log
2. példa: Az összes sikeres streamadat elküldése egy fájlba
Ez a példa az összes sikeres adatfolyam-adatot elküldi egy nevű script.log
fájlba.
.\script.ps1 > script.log
3. példa: Sikeres, figyelmeztető és hibastreamek küldése fájlba
Ez a példa bemutatja, hogyan kombinálhatja az átirányítási operátorokat a kívánt eredmény eléréséhez.
&{
Write-Warning "hello"
Write-Error "hello"
Write-Output "hi"
} 3>&1 2>&1 > C:\Temp\redirection.log
3>&1
átirányítja a Figyelmeztetés streamet a Sikeres adatfolyamba.2>&1
átirányítja a hibastreamet a Sikeres adatfolyamba (amely most már az összes figyelmeztető streamadatot is tartalmazza)>
átirányítja a Siker streamet (amely mostantól a figyelmeztetéseket és a hibastreameket is tartalmazza) egy nevűC:\temp\redirection.log
fájlba.
4. példa: Az összes stream átirányítása egy fájlba
Ez a példa az összes stream kimenetét elküldi egy parancsfájlból egy úgynevezett script.ps1
script.log
fájlba.
.\script.ps1 *> script.log
5. példa: Az összes írási gazdagép- és információstream-adat letiltása
Ez a példa letiltja az összes adatfolyam-adatot. További információ az adatfolyam-parancsmagokról : Write-Host and Write-Information
&{
Write-Host "Hello"
Write-Information "Hello" -InformationAction Continue
} 6> $null
6. példa: A műveleti beállítások hatásának megjelenítése
A műveletbeállítások változói és paraméterei módosíthatják, hogy mit írnak egy adott streambe. A példában szereplő szkript bemutatja, hogy az érték $ErrorActionPreference
hogyan befolyásolja a hibastreambeírt szöveget.
$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'
A szkript futtatásakor a rendszer arra kéri a rendszer, hogy mikor $ErrorActionPreference
legyen Inquire
beállítva.
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.
A naplófájl vizsgálatakor a következők láthatók:
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
Jegyzetek
Azok az átirányítási operátorok, amelyek nem fűznek hozzá adatokat (>
és n>
) figyelmeztetés nélkül felülírják a megadott fájl aktuális tartalmát.
Ha azonban a fájl írásvédett, rejtett vagy rendszerfájl, az átirányítás meghiúsul. A hozzáfűző átirányítási operátorok (>>
és n>>
) nem írnak írásvédett fájlba, hanem tartalmat fűznek hozzá egy rendszerhez vagy rejtett fájlhoz.
A tartalom csak olvasható, rejtett vagy rendszerfájlra való átirányításának kényszerítéséhez használja a parancsmagot annak Out-File
paraméterével Force
.
Amikor fájlokat ír, az átirányítási operátorok kódolást használnak UTF8NoBOM
. Ha a fájl kódolása eltérő, előfordulhat, hogy a kimenet nem megfelelően van formázva. Ha más kódolású fájlokba szeretne írni, használja a parancsmagot a Out-File
paraméterével Encoding
.
A kimenet szélessége fájlba íráskor
Ha egy fájlba vagy az átirányítási operátorokkal Out-File
ír, a PowerShell a benne futó konzol szélessége alapján formázja a táblázat kimenetét a fájlba. Ha például a tábla kimenetét fájlba naplóz egy olyan paranccsal, mint egy Get-ChildItem Env:\Path > path.log
olyan rendszeren, ahol a konzol szélessége 80 oszlopra van állítva, a fájl kimenete 80 karakterre csonkol:
Name Value
---- -----
Path C:\Program Files\PowerShell\7;C:\WINDOWS…
Figyelembe véve, hogy a konzol szélessége tetszőlegesen állítható be azokra a rendszerekre, ahol a szkript fut, a PowerShell inkább a megadott szélesség alapján formázza a táblázat kimenetét fájlokra.
A Out-File
parancsmag egy Width paramétert biztosít, amely lehetővé teszi a táblakimenethez kívánt szélesség beállítását. Ahelyett, hogy mindenhol hozzá kellene adnia -Width 2000
, ahol meghívja Out-File
, a $PSDefaultParameterValues
változóval beállíthatja ezt az értéket a Out-File
parancsmag összes használatához egy szkriptben. Mivel az átirányítási operátorok (>
és >>
) gyakorlatilag aliasok Out-File
, az Out-File:Width
egész szkript paraméterének beállítása hatással van az átirányítási operátorok formázási szélességére is. Helyezze a következő parancsot a szkript tetejére a teljes szkript beállításához Out-File:Width
:
$PSDefaultParameterValues['out-file:width'] = 2000
A kimeneti szélesség növelése növeli a memóriahasználatot a táblázat formázott kimenetének naplózásakor. Ha sok táblázatos adatot naplóz a fájlba, és tudja, hogy kisebb szélességű adatokhoz juthat hozzá, használja a kisebb szélességet.
Bizonyos esetekben, például Get-Service
a kimenetben a további szélesség használatához át kell csöveznie a kimenetet Format-Table -AutoSize
a fájlba való kimenet előtt.
$PSDefaultParameterValues['out-file:width'] = 2000
Get-Service | Format-Table -AutoSize > services.log
További információ: $PSDefaultParameterValues
about_Preference_Variables.
Bináris adatok átirányítása
A PowerShell nem támogatja a bináris adatok átirányítását. Ha bájtstream-adatokat irányít át, a PowerShell sztringekként kezeli az adatokat. Ez az átirányítás sérült adatokat eredményez.
Lehetséges keveredés az összehasonlító operátorokkal
Az >
operátort nem szabad összetéveszteni a nagyobb összehasonlító operátorral (gyakran más programozási nyelvekhez hasonlóan >
).
Az összehasonlítandó objektumoktól függően a használt >
kimenet helyesnek tűnhet (mivel a 36 nem nagyobb 42-nél).
PS> if (36 > 42) { "true" } else { "false" }
false
A helyi fájlrendszer ellenőrzése azonban azt látja, hogy a rendszer egy meghívott 42
fájlt írt a tartalommal 36
együtt.
PS> dir
Mode LastWriteTime Length Name
---- ------------- ------ ----
------ 1/02/20 10:10 am 3 42
PS> cat 42
36
A fordított összehasonlítás <
(kisebb, mint) használata rendszerhibát eredményez:
PS> if (36 < 42) { "true" } else { "false" }
ParserError:
Line |
1 | if (36 < 42) { "true" } else { "false" }
| ~
| The '<' operator is reserved for future use.
Ha a numerikus összehasonlítás a szükséges művelet, -lt
és -gt
használni kell. További információt a -gt
about_Comparison_Operators operátorában talál.
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: