Yksi parhaista ominaisuuksista PowerShell tarjoaa on mahdollisuus hallita palvelimia etänä. Se jopa antaa sinun hallita nippu heistä kerralla.
Muista lukea sarjan aiemmat artikkelit:
Ja pysy kuulolla koko sarjan koko viikon ajan.
Palvelimesi irtotavarana voi olla tylsiä, ja jos olet joutunut tekemään IIS: n kokoonpanoasetusten muutoksen 50 palvelimella ennen, tiedät, mitä tarkoitan. Nämä ovat sellaisia tilanteita, joissa PowerShell Remoting ja kielen komentosarjat kykenevät pelastamaan. HTTP: n tai turvallisemman HTTPS: n avulla PowerShell Remotingin avulla voit lähettää komentoja etäverkkoon verkossa. Kone suorittaa sitten komennot ja lähettää lähdön takaisin sinulle, joka puolestaan näkyy näytölläsi.
PowerShell Remotingin ytimessä on yksi Windows-palvelu, Windows Remote Management tai WinRM-palvelu, koska se on tullut tunnetuksi. WinRM: n avulla voit määrittää yhden tai useamman istunnon kokoonpanon (joka tunnetaan myös päätepisteinä), jotka ovat pohjimmiltaan tiedostoja, jotka sisältävät tietoja kokemuksesta, jonka haluat antaa etäyhteydellä olevaan PowerShell-esiintymään. Tarkemmin sanottuna voit käyttää istunnon kokoonpanotiedostoja määritellä, kuka voi ja kuka ei voi muodostaa yhteyttä esimerkiksi, mitä cmdletteja ja komentosarjoja ne voivat käyttää, sekä mitä suojaustoimintaa istunto on suoritettava. WinRM-palvelun avulla voit myös luoda "kuuntelijoita", jotka kuuntelevat tulevia PowerShell-pyyntöjä. Nämä "kuuntelijat" voivat olla joko HTTP tai HTTPS ja ne voidaan sitoa yhdellä IP-osoitteella koneellasi. Kun avaat PowerShell-yhteyden toiseen laitteeseen (tämä tapahtuu teknisesti WS-MAN-protokollaa käyttäen, joka perustuu HTTP: hen), yhteys sidotaan johonkin näistä "kuulijoista". "Kuuntelijat" ovat sen jälkeen vastuussa liikenteen lähettämisestä soveltuvan istunnon kokoonpanotiedostoon liittyvään sovellukseen. sovellus (normaalisti PowerShell, mutta sinulla voi olla muita hosting-sovelluksia, jos haluat) suorittaa komennon ja syöttää tulokset takaisin "kuuntelijan" kautta verkon ja takaisin koneellesi.
Ensimmäinen asia, jonka sinun tarvitsee tehdä, on ottaa käyttöön Remot-laite koneessa, johon haluat muodostaa yhteyden. Tämä voidaan tehdä suorittamalla seuraavat:
Enable-PSRemoting
Sinun on vastattava kyllä kaikkiin kehotteisiin. Kun suoritat Enable-PSRemoting-toiminnon, tietokoneeseen tehdään muutamia muutoksia:
Jos käytössäsi on Windows 7 ja verkkokortin sijainti on julkinen, PowerShellin etätoiminto ei onnistu. Voit korjata sen vain vaihtamalla Home- tai Work-verkon sijaintiin. Vaihtoehtoisesti voit ohittaa verkkotarkistuksen seuraavalla tavalla:
Ota käyttöön-PSRemoting -SkipNetworkProfileCheck
Suosittelemme kuitenkin melko vaihtamaan verkkosijaasi.
PowerShellillä voi olla kaksi tapaa liittää toiseen koneeseen. On yksi menetelmä, joka on hyvin samanlainen kuin SSH: n käyttäminen, ja sitten on olemassa monta menetelmää.
Ensimmäinen tapa muodostaa yhteys PowerShell-palvelimella olevalle etäkoneelle on käyttää jotain nimeltään PowerShell Session. Yksinkertaisesti istunnon avulla voit suorittaa komentoja etäkoneessa vuorovaikutteisella tavalla samalla tavalla kuin omalla koneellasi. Avaa istunto yksinkertaisesti kirjoittamalla seuraava:
Enter-PSSession Tietokoneen nimi "Darlah"
Hälytys saa etuliitteen, joka ilmaisee koneen, että käytät cmdletteja.
Täältä voit todella käsitellä kehotetta kuin olisit istumassa etäkoneessa. Jos esimerkiksi haluat nähdä kaikki C: \ -aseman tiedostot, voit tehdä yksinkertaisen:
Get-ChildItem -Path C: \
Jos tulet Linux-taustasta, voit ajatella tämän yhden etäisyyden menetelmän käyttöä SSH: n PowerShell-vaihtoehtona.
Toinen tapa, jolla voit käyttää PowerShellia etäkoneessa, on Invoke-Command-ohjelmalla. Etu käyttämään Invoke-komentoa johtuu siitä, että voit suorittaa saman komennon useilla koneilla samanaikaisesti. Kuten voitte kuvitella, tämä on erityisen hyödyllinen, kun haluat tehdä jotain kerätä tapahtumalokia palvelimistasi. Invoke-Command noudattaa seuraavaa syntaksia:
Invoke-Command -ComputerName Darlah, localhost -ScriptBlock Get-EventLog-sovellus-uusin 2
Koska komento suoritetaan rinnakkain kaikissa koneissa, tarvitset jonkin tapaa nähdä, mistä tietokoneesta jokin tietty tulos on peräisin. Voit tehdä tämän tarkastelemalla PSComputerName-ominaisuutta.
Kun käytät Invoke-Command-ohjelmaa, sinulla ei enää ole esineitä, joita saatat odottaa Pipeline-ohjelmassa. Jotta PowerShell voisi saada tiedot etälaitteesta takaisin koneellesi, näet, että ne tarvitsevat jonkinlaisen tavan esittää esineitä, joita etäkoneessa suorittamasi komento tuottaa. Nykyään vaikuttaa siltä, että valittu tapa edustaa hierarkkista tietorakennetta on käyttää XML: ää, mikä tarkoittaa, kun annat komennon Invoke-Command-komentoa käyttäen, tulokset ensin sarjataan XML: ksi, ennen kuin ne lähetetään takaisin koneellesi.Kun he tulevat takaisin koneellesi, heidät poistetaan esineestä takaisin; tässä on se, että kun ne ovat deserialisoidut, kaikki menetelmät, paitsi ToString () -menetelmä, että kohde on poistettu pois siitä.
Huomaa: Tässä säännössä on joitain poikkeuksia, esimerkiksi alkeellisimpia tyyppejä, kuten kokonaislukuja, voidaan deserialisoida sen mukana tulevilla menetelmillä. On myös prosessi, jota kutsutaan Rehydrationiksi, jossa jotkut menetelmät voidaan lisätä takaisin deserialisoiduille kohteille. Joten ole varovainen ja muista, että Get-Member on ystäväsi.