Szövegfájl írása (Set-Content, Add-Content, Out-File, > , >>)

A PowerShellben elég sok lehetőségünk van arra, hogy szövegfájlokat hozzunk létre és hogy szöveget írjunk egy meglevő szövegfájlba. Ebben a fejezetben ezeket a lehetőségeket veszem számba, kiemelve az egyes módszerek előnyeit, hátrányait, speciális alkalmazási területeit.

A Set-Content  Add-Content  páros csak annyiban különbözik, hogy a Set-Contenttel felülírni vagy létrehozni lehet szövegfájlt, Add-Contenttel létrehozni és hozzáírni lehet. Amúgy a paraméterezésük nagyon hasonló. A fontos megjegyezni ennél a párosnál, hogy mindenképpen szöveget kell nekik átadni, objektumokkal nehezen bánnak el. Ha nem szöveget kapnak, akkor az objektum ToString() metódusát hívják meg implicit módon, és ennek eredményét teszik be a fájlba. Láttuk már korábban, hogy például a Service objektumoknál ez nem túl informatív:

PS C:\> Get-Service wu*

 

Status   Name               DisplayName

------   ----               -----------

Running  wuauserv           Windows Update

Running  wudfsvc            Windows Driver Foundation - User-mo...

 

 

PS C:\> Get-Service wu* | Set-Content C:\_myfiles\services.txt

PS C:\> Get-Content C:\_myfiles\services.txt

System.ServiceProcess.ServiceController

System.ServiceProcess.ServiceController

Azaz, ha ezeket használjuk, akkor mindenképpen érdemes egy Out-String átalakítással élni, mielőtt a tartalmat a fájlba írnánk:

PS C:\> Get-Service wu* | out-string | Set-Content C:\_myfiles\services.txt

PS C:\> Get-Content C:\_myfiles\services.txt

 

Status   Name               DisplayName

------   ----               -----------

Running  wuauserv           Windows Update

Running  wudfsvc            Windows Driver Foundation - User-mo...

Itt természetesen bejön képbe az Out-String  paraméterezési lehetősége, azaz a -Width beállításának a lehetősége, azaz a standard formázó PS1XML fájlokban megfogalmazott szabályoknak megfelelő formátumot nem a képernyő, hanem a –Width paraméternek megfelelően alakítja ki.

Megjegyzés

Érdemes megjegyezni, hogy az összes Out-… kezdetű cmdlet használja a PS1XML formázó szabályokat, azaz végeredményben sztringek lesznek a kimenetükön, míg a többi – például Add-Content, Set-Conent –, nem.

Az Add-/Set-Content esetében is meghatározhatjuk a szöveg kódolását, ami alaphelyzetben unicode. Ha választunk egy kódolást a fájlunk írásához, akkor nagyon javallott, hogy ha hozzáírunk, akkor is ugyanazzal a kódolással tegyük ezt, ellenkező esetben elég furcsa szervezésű fájlhoz fogunk jutni.

Nagyon hasznos a –Passthru paraméter az Add-/Set-Content párosnál! Ezzel tulajdonképpen hasonló funkciót lehet elérni, mint a Tee-Object -nél, csakhogy ott nincsen encoding megadására lehetőség, és a Tee-Object mindenképpen felülír, míg itt van lehetőségünk választani, hogy felülírunk vagy sem.

PS C:\> Get-Service app* | Out-String -stream | Add-Content C:\_myfiles\service

s.txt -PassThru | %{if($_ -match "Stopped"){ Write-Host $_ -ForegroundColor red

}else{write-host $_}}

 

Status   Name               DisplayName

------   ----               -----------

Stopped  AppIDSvc           Application Identity

Running  Appinfo            Application Information

Stopped  AppMgmt            Application Management

A fenti példában a korábbiakhoz hasonlóan kiírom az ’app’ kezdetű szolgáltatások listáját egy fájlba. Itt is használom az Out-String átalakítást, csakhogy itt soronként egy-egy külön sztringet képzek a –Stream kapcsolóval. A fájlba írás után még tovább nyomtam ezeket a sztringeket a csővezetéken, és ha van bennük „Stopped” szó, akkor pirossal, egyébként az alaphelyzet szerinti színnel írok ki a sorokat a képernyőre.

Az átirányítás operátorok (>, >>) hasonlóan működnek az előbb tárgyalt Set-/Add-Content pároshoz, azzal a különbséggel, hogy nincs –Passthru paraméterük és nem lehet kódolást meghatározni és eleve kevesebb lehetőséget biztosítanak számunkra, így ezek használatát én nem nagyon javaslom.

Az Out-File felfogható egy integrált Out-String | Add-/Set-Content párosként. Attól függően Add vagy Set, hogy használjuk-e az –Append kapcsolót vagy sem. Amúgy van neki –Encoding paraméter is, viszont nincs –Passthru, így mindjárt kiderül, hogy mikor is használható ez.



Word To HTML Converter