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 a Out-File parancsmagot, ha a paramétereket, például a Encoding, Force, Widthvagy NoClobber 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.logfá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.logfá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.ps1script.logfá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 Inquirebeá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ó: $PSDefaultParameterValuesabout_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 36együ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