Egysorosból többsoros

Aki rendszeresen Powershell környezetben tevékenykedik, annak ez az írás nem fog sok újdonságot tartalmazni. Nekem viszont meglepetés volt. Meg örülök is neki, hogy rátaláltam a trükkre.

Van valami, amit meg szeretnél csinálni egy csomó objektummal. A nevük lista formájában megvan egy txt fájlban. Tipikus szkript feladat, kell egy foreach ciklus, ebbe betoljuk valahogy a neveket és kész.
Igenám, de mi van, ha nem lehet egy parancsban megfogalmazni a ciklus magjában lévő tevékenységet? A szintakszis durván úgy szól, hogy foreach { }, ahol a kapcsos zárójelek közé kerül az elvégzendő tevékenység. Nekem viszont két parancsot kellett volna beletennem.
Az első próbálkozásra szószerint kiröhögött a PSH: a szkript blokkba megpróbáltam több szkript blokkot beleágyazni, valami ilyesformán: { {a} {b} }. A második próbálkozásom az volt, hogy megpróbáltam a két parancsot egybegyúrni, a PSH végülis pont erről híres, de sehogyan sem sikerült. Harmadikra nekiugrottam a guglinak, de vagy én felejtettem el, hogyan kell keresni, vagy senkit sem izgatott eddig a probléma.
Kénytelen voltam a saját eszemet használni. (A gugli korában. Szégyen.)

A feladatnak van egy korrekt megoldása, nem parancsot adok ki, hanem beleírom az egészet egy szkriptbe, majd lefuttatom. Ott egyszerűen új sort kell kezdeni minden parancsnak. De ehhez eszembe kellett volna jutnia, hogyan kell szkriptet futtatni. (Ja, nem mondtam, ez nem egy kényelmesen elvégzendő feladat volt, hanem egy hirtelen felmerült igény, tizenvalahány óra szopás munka után.) Annyira emlékeztem, hogy van valami trükközés, de arra már nem, hogy végülis mi. Alternatív megoldás lehetett volna az ISE használata, de abba meg az Exchange plugint kellett volna valahogy belegyógyítanom, és az sem ment fejből. Félretettem az elképzelést B tervnek, én pedig tovább gyötörtem a parancskámat.
Véletlenül jöttem rá a megoldásra. Még csak gépeltem be az egyik próbálkozást, amikor félrenyomtam, backspace helyett entert. És kaptam egy új promptot: >>. Szótlanul nézegettem a képernyőt, majd egy idő után bejelzett a mintafelismerő központom.

“egyik”,”másik” | foreach {
>>

Ez teljesen olyan, mintha szkriptfájlba írnám a parancsot! Próbaképpen beírtam az egyik parancsot, enter, jöhetett az új parancs, enter, zárás, üres enter… és már futott is.

“egyik”,”másik” | foreach {
>> $valtozo=bonyolult művelet
>> new-valami -identiy $_ -alias $valtozo -firlefranc
>>}
>>
_

Ne húzdd a szád, mondtam előre. Aki rengeteget piszkálja a PSH-t, annak ez triviális. Én már elég régóta inkább dizájnnal foglalkozom, mint operációval, nekem ez az interaktív szkript üzemmód újdonság volt. De tetszik.

Viszont, hogy legyen hozzáadott érték is, összeszedtem, mi kellett volna ahhoz, hogy szkriptet futtassak. Egyszerűen a shellből elnavigálok abba a könyvtárba, ahol a szkriptfájl van, majd így futtatom: .\myscript.ps1.

Ha pedig az ISE mellett döntöttem volna, akkor ezeket a parancsokat kellett volna elsőnek kiadnom:

  • Exchange 2007:
    Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin
  • Exchange 2010:
    Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
This entry was posted in szkript.

4 thoughts on “Egysorosból többsoros

  1. “egyik”,”másik” | foreach { $valtozo=bonyolult művelet; new-valami -identiy $_ -alias $valtozo -firlefranc }

    Nem olyan szép mint interaktív módban, de legalább one-liner 🙂

  2. Mégiscsak kell az a Powershell tanfolyam. Nem azért, mert autodidakta módon nem lehet megtanulni, hanem azért, mert jó dolog, hogy:
    1) egyben látod az egészet
    2) nem élesben kell minden apróságot keresni
    3) bele tudod ásni magad anélkül, hogy a napi munkával félbeszakítanának

    Amúgy meg kérdésem, hogy megoldották-e végre az ékezetes betűk vs. parancssor problémát Powershellnél?

Leave a Reply

Your email address will not be published. Required fields are marked *