Početna » kako da » Geek škola učenje kako koristiti objekte u PowerShell

    Geek škola učenje kako koristiti objekte u PowerShell

    Razumijevanje objekata jedna je od temeljnih koncepata “dobivanja” PowerShell-a. Pridružite nam se dok istražujemo objekte i kako oni čine PowerShell boljim od bilo koje druge ljuske danas.

    Svakako pročitajte prethodne članke iz serije:

    • Saznajte kako automatizirati sustav Windows pomoću programa PowerShell
    • Učenje korištenja Cmdletova u PowerShell-u

    Ostanite u tijeku cijeli tjedan.

    objekti

    Jeste li se ikada zapitali što razlikuje PowerShell od tradicionalne Linux ljuske kao što je Bash, ili čak i nasljedni naredbeni redak? Odgovor je vrlo jednostavan: tradicionalni ispis tekstova, što otežava oblikovanje i filtriranje. Naravno, postoje alati koji će vam pomoći da obavite posao (sed i grep vam padnu na pamet), ali na kraju dana, ako želite napraviti bilo kakav teški parsiranje teksta, morate znati regularne izraze kao što je straga ruke.

    PowerShell koristi prednosti temeljnog .Net okvira i ima drugačiji pristup, koristeći objekte umjesto teksta. Objekti su samo prikaz nečega. Oni su skup dijelova i radnji kojima se mogu koristiti. Pogledajmo dijelove bicikla i kako bismo ih mogli koristiti.

    Objekti u .Netu su gotovo isti, osim za dvije male razlike: nazivaju se dijelovi nekretnine i "Upute" metode. Ako smo htjeli predstaviti Windows servis kao objekt, mogli bismo odlučiti da je prikladno opisati ga pomoću tri svojstva: naziv usluge, stanje i opis. Također je potrebno komunicirati s uslugom, tako da objektu možemo dati metodu Start, Stop i Pause.

    Svojstva i metode objekta možete vidjeti tako da ih proslijedite u cmdlet Get-Member. Objekti koje PowerShell cmdlet izlazi u velikoj su mjeri temeljni tipovi iz .Net okvira, ali možete stvoriti vlastite objekte ako trebate koristiti jezik poput C # ili koristiti PSObject tip..

    Cjevovod

    Postoji mnogo Linux ljuski s cjevovodom, što vam omogućuje da pošaljete tekst koji jedna naredba šalje kao ulaz na sljedeću naredbu u cjevovodu. PowerShell ovo prelazi na sljedeću razinu dopuštajući vam da uzmete objekte koje jedan cmdlet izlazi i prosljeđuje ih kao ulaz na sljedeći cmdlet u cjevovodu. Trik je znati koja se vrsta objekta vraća cmdlet, što je stvarno lako kada se koristi cmdlet Get-Member.

    Uzmite uslugu Get-članica

    Iz razloga koji nisu obuhvaćeni ovim člankom, svojstva i metode zajednički se nazivaju članovi razreda, što objašnjava zašto koristite cmdlet Get-Member da biste dobili popis svih metoda i svojstava koje objekt ima. Međutim, cmdlet za Get-Member vraća još jedan važan dio informacije, osnovni tip objekta. U gornjem snimku zaslona možemo vidjeti da Get-Service vraća objekte tipa:

    System.ServiceProcess.ServiceController

    Budući da se PowerShell bavi objektima, a ne tekstom, ne mogu se sve cmdletove povezati pomoću cjevovoda [1]. To znači da trebamo pronaći cmdlet koji želi prihvatiti objekt System.ServiceProcess.ServiceController iz cjevovoda.

    Get-Command -ParameterType System.ServiceProcess.ServiceController

    Primijetite da postoji cmdlet nazvan Stop-Service; Pogledajmo pomoć za to.

    Get-Help -Name Stop-Service

    Izgleda da parametar InputObject uzima niz objekata ServiceController kao ulaz. Obično, ako vidite parametar koji se zove InputObject, on će prihvatiti ulaz iz cjevovoda, ali samo da bismo bili sigurni da pogledamo punu pomoć za taj parametar.

    Get-Help -Name Stop-Service-Full

    Naše sumnje su bile točne. Dakle, u ovom trenutku znamo sljedeće:

    • Get-Service vraća ServiceController objekte
    • Stop-Service ima parametar nazvan InputObject koji prihvaća jedan ili više ServiceControllera kao ulaz.
    • Parametar InputObject prihvaća ulaz u cjevovod.

    Pomoću tih informacija mogli bismo učiniti sljedeće:

    Get-Service-Naziv "Apple Mobile Device" | Stop-usluge

    To je sve za ovo vrijeme. Sljedeći put ćemo pogledati kako možemo oblikovati, filtrirati i usporediti objekte u cjevovodu.

    Domaća zadaća

    • Pročitajte na cjevovodu objekta

    Ako imate bilo kakvih pitanja možete me tweetati @taybgibb, ili samo ostaviti komentar.