Windowsin määrittäminen toimimaan PowerShell-skriptien kanssa helpommin
Windowsissa ja PowerShellissä on sisäänrakennettuja suojausominaisuuksia ja oletusasetuksia, joiden tarkoituksena on estää loppukäyttäjiä aloittamasta vahingossa skriptejä päivittäisen toiminnan aikana. Jos jokapäiväiseen toimintaan kuuluu kuitenkin oma PowerShell-komentosarjojen kirjoittaminen ja käyttäminen, tämä voi olla enemmän haittaa kuin hyöty. Tässä näytämme, miten näiden ominaisuuksien ympärillä ei ole vaaraa turvallisuudesta.
Miten ja miksi Windows & PowerShell estää komentosarjan suorittamisen.
PowerShell on itse asiassa komentokuoren ja skriptikieli, joka on tarkoitettu korvaamaan CMD- ja eräskriptit Windows-järjestelmissä. Siten PowerShell-komentosarja voi olla melko paljon konfiguroitu tekemään mitään, mitä voit tehdä manuaalisesti komentoriviltä. Tämä vastaa käytännöllisesti katsoen mahdollisia muutoksia järjestelmässäsi, jopa käyttäjän tililläsi asetettuihin rajoituksiin. Jos siis voisit vain kaksoisnapsauttaa PowerShell-komentosarjaa ja käyttää sitä täysimääräisin järjestelmänvalvojan oikeuksin, yksinkertainen yhden linjan kaltainen tällainen voisi todella hylätä päiväsi:
Get-ChildItem "$ env: SystemDrive" -Recurse -ErrorAction SilentlyContinue | Poista-kohde -Force -Recurse -ErrorAction SilentlyContinue
ÄLÄ suorita yllä olevaa komentoa!
Se menee vain tiedostojärjestelmän läpi ja poistaa mitä tahansa. Mielenkiintoista on, että tämä ei saa tehdä järjestelmää käyttökelvottomaksi niin nopeasti kuin saatat ajatella - jopa silloin, kun suoritat kohotetun istunnon. Mutta jos joku kutsuu sinua tämän käsikirjoituksen suorittamisen jälkeen, koska he yhtäkkiä eivät löydä tiedostojaan tai suorittavat joitakin ohjelmia, "kytkeminen pois päältä ja uudestaan" johtaa todennäköisesti vain Windows Startup Repairiin, jossa heille kerrotaan. mitään, mitä voidaan tehdä ongelman korjaamiseksi. Mikä voisi olla pahempaa, on se, että sen sijaan, että sait skriptiä, joka vain roskakorisi heidän tiedostojärjestelmänsä, ystäväsi saattaa joutua huijaamaan juoksemaan sellaista, joka lataa ja asentaa keylogger- tai etäkäyttöpalvelun. Sitten sen sijaan, että olisit esittänyt kysymyksiä Startup Repairista, he saattavat kysyä poliisilta joitakin pankkien petoksista!
Tähän mennessä pitäisi olla selvää, miksi tietyt asiat ovat tarpeen loppukäyttäjien suojelemiseksi itsestään. Mutta tehokäyttäjät, järjestelmänvalvojat ja muut geeksit ovat yleensä (vaikkakin on poikkeuksia) hieman varovaisempia näistä uhkista, tietäen, miten ne voidaan havaita ja helposti välttää, ja haluavat vain saada työnsä. Tätä varten heidän on joko poistettava käytöstä tai työskenneltävä muutaman tieliikennekappaleen ympärillä:
- PowerShell ei salli ulkoisen komentosarjan suorittamista oletusarvoisesti.
PowerShellin ExecutionPolicy-asetus estää ulkoisten komentosarjojen suorittamisen oletuksena kaikissa Windows-versioissa. Joissakin Windows-versioissa oletus ei salli komentosarjan suorittamista ollenkaan. Näytimme sinulle, miten voit muuttaa tätä asetusta kohdassa PowerShell-komentosarjojen suorittaminen Windows 7 -käyttöjärjestelmässä, mutta käsittelemme sen myös muutamalla tasolla. - PowerShell ei ole oletusarvoisesti liitetty .PS1-tiedostotunnisteeseen.
Esittimme tämän aluksi PowerShell Geek School -sarjassa. Windows asettaa .PS1-tiedostojen oletustoiminnon avaamaan ne Notepadissa sen sijaan, että ne lähetettäisiin PowerShell-komentojen tulkkiin. Tämä estää suoraan vahingollisten komentosarjojen tahattoman suorittamisen, kun ne yksinkertaisesti kaksoisnapsautuvat. - Jotkut PowerShell-skriptit eivät toimi ilman järjestelmänvalvojan oikeuksia.
Jopa silloin, kun käytät järjestelmänvalvojatason tiliä, sinun täytyy silti käydä läpi User Account Control (UAC), jotta voit suorittaa tiettyjä toimintoja. Komentorivityökalujen osalta tämä voi olla vähän hankalampaa. Emme halua poistaa UAC: ia käytöstä, mutta se on silti mukavaa, kun voimme käsitellä sitä hieman helpommin.
Nämä samat ongelmat tuodaan esiin, kun käytät erätiedostoa PowerShellin komentosarjojen helpottamiseksi suoritettavaksi, jossa käymme läpi erätiedoston kirjoittamisen väliaikaisesti niiden ympärille. Nyt näytämme sinulle, miten järjestelmäsi voidaan asettaa pitkän aikavälin ratkaisulla. Muista, että näitä muutoksia ei pitäisi yleensä tehdä sellaisissa järjestelmissä, joita ei käytetä yksinomaan - muuten muut käyttäjät saavat suuremman riskin joutua samoihin ongelmiin..
.PS1-tiedoston yhdistämisen muuttaminen.
Ensimmäinen ja ehkä ennen kaikkea ärsyttävä kiihtyvyys on .PS1-tiedostojen oletusjärjestys. Näiden tiedostojen liittäminen johonkin muuhun kuin PowerShell.exe-tiedostoon on järkevää estää ei-toivottujen komentosarjojen tahaton suorittaminen. Kun kuitenkin otetaan huomioon, että PowerShellissä on integroitu komentosarjaympäristö (ISE), joka on suunniteltu erityisesti PowerShell-skriptien muokkaamiseen, miksi haluaisimme avata .PS1-tiedostot Notepadissa oletusarvoisesti? Vaikka et ole valmis siirtymään täysin päälle kaksoisnapsauttamalla -toimintoa varten, haluat ehkä muuttaa näitä asetuksia.
Voit muuttaa .PS1-tiedostoyhdistelmän haluamallesi ohjelmalle oletusohjelmien ohjauspaneelilla, mutta kaivaminen suoraan rekisteriin antaa sinulle hieman enemmän valvontaa siitä, miten tiedostot avataan. Tämän avulla voit myös määrittää tai muuttaa muita asetuksia, jotka ovat käytettävissä .PS1-tiedostojen kontekstivalikossa. Älä unohda tehdä varmuuskopiota rekisteristä ennen kuin teet tämän!
Rekisterin asetukset, jotka ohjaavat PowerShell-skriptien avaamista, tallennetaan seuraavaan paikkaan:
HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell
Jos haluat tutkia näitä asetuksia ennen niiden muuttamista, katso Regeditillä tätä avainta ja sen aliavainta. Shell-näppäimellä pitäisi olla vain yksi arvo ("Oletus"), joka on asetettu "Avaa". Tämä on osoitin oletustoimintoon kaksoisnapsauttamalla tiedostoa, jota näemme ali-näppäimissä.
Laajenna Shell-näppäintä ja näet kolme alivaihtoehtoa. Kukin näistä edustaa toimintaa, jonka voit suorittaa ja joka on ominaista PowerShell-skripteille.
Voit laajentaa kutakin näppäintä tutkiaksesi arvoja sisällä, mutta ne vastaavat periaatteessa seuraavia oletusarvoja:
- 0 - Suorita PowerShellilla. "Run with PowerShell" on itse asiassa PowerShell-skriptien kontekstivalikossa olevan vaihtoehdon nimi. Teksti vedetään vain toisesta sijainnista sen sijaan, että käytettäisiin avainnimeä kuin muutkin. Ja se ei ole vieläkään oletuksena kaksoisnapsautus.
- Muokkaa - Avaa PowerShell ISE: ssä. Tämä on paljon järkevämpää kuin Muistio, mutta sinun täytyy silti hiiren kakkospainikkeella .PS1-tiedostoa tehdä se oletusarvoisesti.
- Avaa - Avaa Notepadissa. Huomaa, että tämä avainnimi on myös merkkijono, joka on tallennettu Shell-avaimen “(Default)” -arvoon. Tämä tarkoittaa, että tiedoston kaksoisnapsauttaminen avaa sen ja toiminto on yleensä asetettu käyttämään Notepadia.
Jos haluat kiinnittää jo valmiiksi asennetut komentosarjat, voit muuttaa "(Oletus)" -arvoa Shell-näppäimellä vastaamaan sen näppäimen nimeä, joka vastaa sitä, mitä haluat kaksoisnapsauttamalla. Tämä voidaan helposti tehdä Regeditistä, tai voit käyttää opetusohjelmasta saatuja kokemuksia rekisterin tutkimisesta PowerShellillä (sekä pieni PSDrive-nipistys), jotta voit aloittaa rakentamisen uudelleenkäytettävän komentosarjan, joka pystyy määrittämään järjestelmiäsi. Alla olevat komennot on suoritettava nostetusta PowerShell-istunnosta, kuten CMD: n käyttö järjestelmänvalvojana.
Ensinnäkin haluat määrittää PSDriven HKEY_CLASSES_ROOTille, koska tätä ei ole määritetty oletusarvoisesti. Tämän komento on:
Uusi PSDrive HKCR -rekisteri HKEY_CLASSES_ROOT
Nyt voit navigoida ja muokata HKEY_CLASSES_ROOT-rekisteriavaimia ja -arvoja aivan kuten tavallisissa HKCU- ja HKLM-PSDriveissä.
Voit määrittää kaksoisnapsauttamalla käynnistääksesi PowerShell-skriptit suoraan:
Set-ItemProperty HKCR: Microsoft.PowerShellScript.1 Shell '(oletus)' 0
Voit määrittää PowerShell-skriptit kaksoisnapsauttamalla PowerShell ISE: ssä:
Set-ItemProperty HKCR: Microsoft.PowerShellScript.1 Shell (oletus) "Muokkaa"
Voit palauttaa oletusarvon (asettaa kaksoisnapsauttamalla avataksesi PowerShell-komentosarjat Notepadissa):
Set-ItemProperty HKCR: Microsoft.PowerShellScript.1 Shell (oletus) "Avaa"
Tämä on vain perusasetukset kaksoisnapsautuksen oletustoiminnon muuttamiseksi. Siirrymme yksityiskohtaisemmin siihen, miten PowerShell-komentosarjoja käsitellään, kun ne avataan PowerShellissa Explorerista seuraavassa osassa. Pidä mielessä, että laajuus estää PSD-tiedostojen jatkuvan istuntojen välillä. Haluat siis todennäköisesti sisällyttää New-PSDrive-rivin minkä tahansa tähän tarkoitukseen rakennetun määrityskomentosarjan alkuun tai lisätä sen PowerShell-profiiliin. Muussa tapauksessa sinun on suoritettava kyseinen bitti manuaalisesti ennen kuin yrität tehdä muutoksia tällä tavalla.
PowerShell ExecutionPolicy -asetuksen muuttaminen.
PowerShellin ExecutionPolicy on toinen suojaus haittaohjelmien suorittamista vastaan. Tähän on useita vaihtoehtoja, ja pari eri tapaa se voidaan asettaa. Käytettävissä olevat vaihtoehdot ovat vähiten suojattuja:
- Rajoitettu - Komentosarjoja ei saa käyttää. (Useimpien järjestelmien oletusasetus.) Tämä estää jopa profiilisi komentosarjan.
- AllSigned - Luotettavan julkaisijan on allekirjoitettava kaikki skriptit digitaalisesti, jotta ne eivät näyttäisi käyttäjää. Kirjoittajia, jotka ovat allekirjoittaneet nimenomaan epäluotettaviksi määritellyt julkaisijat, tai skriptejä, joita ei ole allekirjoitettu digitaalisesti, ei suoriteta. PowerShell kehottaa käyttäjää vahvistamaan, jos kirjoitus on allekirjoitettu julkaisijalla, jota ei ole vielä määritelty luotettavaksi tai epäluotettavaksi. Jos et ole allekirjoittanut digitaalista profiiliasi ja luottanut tähän allekirjoitukseen, se ei voi suorittaa. Ole varovainen, mitkä julkaisijat luotat, koska voit silti lopettaa haittaohjelmia, jos luotat väärään.
- RemoteSigned - Internetistä ladattujen komentosarjojen kohdalla tämä on sama kuin "AllSigned". Paikallisesti luotuja tai muista lähteistä kuin Internetistä tuotuja komentosarjoja voidaan kuitenkin käyttää ilman vahvistuskehotusta. Täällä sinun täytyy myös olla varovainen, mitkä digitaaliset allekirjoitukset luotat, mutta olla varovaisempia myös allekirjoittamattomista skripteistä. Tämä on korkein suojaustaso, jolla voit käyttää työprofiilia ilman, että sinun täytyy allekirjoittaa digitaalisesti.
- Rajoittamaton - Kaikki komentosarjat ovat sallittuja, mutta Internet-skripteille tarvitaan vahvistuskehote. Tästä lähtien sinun on voitava välttää epäluotettavien komentosarjojen suorittaminen.
- Ohitus - Kaikki toimii ilman varoitusta. Ole varovainen tämän kanssa.
- Määrittelemätön - Nykyisessä laajuudessa ei ole määritelty mitään politiikkaa. Tämän avulla voidaan sallia alarajalla määriteltyjen käytäntöjen palauttaminen (lisätietoja alla) tai käyttöjärjestelmän oletusarvoihin.
Määrittelemättömän kuvauksen mukaan edellä mainitut käytännöt voidaan asettaa yhteen tai useampaan soveltamisalaan. Voit käyttää Get-ExecutionPolicy -ohjelmaa, jossa on -List-parametri, nähdäksesi kaikki laajuudet ja niiden nykyiset asetukset.
Soveltamisalueet on lueteltu etusijajärjestyksessä, ja korkein määritelty laajuus ohittaa kaikki muut. Jos käytäntöjä ei ole määritetty, järjestelmä palautuu oletusasetukseensa (useimmissa tapauksissa tämä on rajoitettu).
- MachinePolicy edustaa tietokonetasolla voimassa olevaa ryhmäkäytäntöä. Tätä käytetään yleensä vain verkkotunnuksessa, mutta se voidaan tehdä myös paikallisesti.
- UserPolicy edustaa käyttäjäpolitiikkaa. Tätä käytetään myös vain yritysympäristöissä.
- Prosessi on PowerShellin tähän tapaukseen liittyvä laajuus. Muutokset tämän alan politiikkaan eivät vaikuta muihin käynnissä oleviin PowerShell-prosesseihin, ja ne ovat tehottomia tämän istunnon päättymisen jälkeen. Tämä voidaan määrittää -ExecutionPolicy-parametrilla, kun PowerShell käynnistetään, tai se voidaan asettaa oikean Set-ExecutionPolicy-syntaksin avulla istunnon sisällä.
- CurrentUser on alue, joka on määritetty paikallisessa rekisterissä ja koskee käyttäjätiliä, jota käytetään käynnistämään PowerShell. Tätä soveltamisalaa voidaan muuttaa Set-ExecutionPolicy -toiminnolla.
- LocalMachine on alue, joka on määritetty paikallisessa rekisterissä ja joka koskee kaikkia järjestelmän käyttäjiä. Tämä on oletusalue, jota muutetaan, jos Set-ExecutionPolicy suoritetaan ilman -Scope-parametria. Koska se koskee kaikkia järjestelmän käyttäjiä, sitä voidaan muuttaa vain korotetusta istunnosta.
Koska tämä artikkeli koskee lähinnä turvallisuuden kiertämistä käytettävyyden helpottamiseksi, olemme vain huolissamme kolmesta alemmasta laajuudesta. MachinePolicy- ja UserPolicy-asetukset ovat todella hyödyllisiä vain, jos haluat valvoa rajoittavaa politiikkaa, joka ei ole niin yksinkertaisesti ohitettu. Pitämällä muutokset prosessitasolla tai sen alapuolella, voimme helposti käyttää mitä tahansa politiikkaa, jota pidämme sopivana tietylle tilanteelle milloin tahansa.
Jos haluat säilyttää tasapainon turvallisuuden ja käytettävyyden välillä, kuvakaappauksessa näkyvä käytäntö on luultavasti paras. LocalMachine-käytännön asettaminen rajoitetuksi estää yleensä muiden kuin sinä suorittamien komentosarjojen suorittamisen. Tietysti tämä voidaan ohittaa käyttäjät, jotka tietävät, mitä he tekevät ilman paljon vaivaa. Mutta sen pitäisi pitää kaikki muut kuin teknologiset tahot käyttämättä vahingossa jotakin katastrofista PowerShellissa. Nykyisen käyttäjän (ts. Sinut) asettamisen rajoittamattomana avulla voit suorittaa komentosarjat manuaalisesti haluamallasi tavalla, mutta säilyttää muistutuksen varovaisuudesta Internetistä ladatuille skripteille. Prosessitason RemoteSigned-asetus on tehtävä PowerShell.exe-pikakuvakkeella tai (kuten teemme alla) rekisterin arvoissa, jotka ohjaavat PowerShell-komentosarjojen käyttäytymistä. Tämä mahdollistaa helppokäyttöisen kaksoisnapsauttavan toiminnon kaikilla kirjoittamillasi skripteillä samalla, kun asetat vahvemman esteen (mahdollisesti haitallisen) komentosarjojen tahattomalle suorittamiselle ulkoisista lähteistä. Haluamme tehdä tämän täällä, koska on paljon helpompaa kaksoisnapsauttaa skriptiä kuin se yleensä kutsutaan manuaalisesti interaktiivisesta istunnosta.
Jos haluat määrittää nykyisen käyttäjän ja paikallisen koneen käytännöt kuten yllä olevassa kuvassa, suorita seuraavat komennot kohotetusta PowerShell-istunnosta:
Set-ExecutionPolicy Restricted Set-ExecutionPolicy Unrestricted -Scope CurrentUser
Jotta voisimme valvoa RemoteSigned-käytäntöä komentosarjoista, jotka suoritetaan Explorerista, meidän on muutettava arvoa jossakin aikaisemmin katsomassamme rekisteriavaimissa. Tämä on erityisen tärkeää, koska PowerShell- tai Windows-versiosta riippuen oletuskokoonpano saattaa olla ohitettu kaikista ExecutionPolicy-asetuksista, paitsi AllSigned. Jos haluat nähdä, mitä nykyinen kokoonpano on tietokoneellesi, voit suorittaa tämän komennon (varmista, että HKCR PSDrive on ensin kartoitettu):
Get-ItemProperty HKCR: Microsoft.PowerShellScript.1 Shell-komento Valitse-objekti '(oletus)'
Oletuskokoonpano on todennäköisesti yksi seuraavista kahdesta merkkijonosta tai jotain melko samanlaista:
(Windows 7 SP1 x64: ssä, PowerShell 2.0: lla)
"C: Windows System32 WindowsPowerShell v1.0 powerhell.exe" "-file"% 1 "
(Windows 8.1 x64: ssä, PowerShell 4.0: lla)
"C: Windows System32 WindowsPowerShell v1.0 powerhell.exe" "-Komento" "jos ((Get-ExecutionPolicy) -ne 'AllSigned') Set-ExecutionPolicy -Sopeusprosessin ohitus; & '% 1 '"
Ensimmäinen ei ole liian huono, koska kaikki se suorittaa komentosarjan olemassa olevien ExecutionPolicy-asetusten alla. Se voitaisiin tehdä paremmin, kun tiukemmat rajoitukset asetetaan onnettomuuden aiheuttamalle toiminnalle, mutta sitä ei alun perin ollut tarkoitus käynnistää kaksoisnapsauttamalla, ja oletuskäytäntö on yleensä rajoitettu. Toinen vaihtoehto on kuitenkin mikä tahansa ExecutionPolicy-ohjelman täydellinen ohitus, vaikka sinulla on todennäköisesti rajoituksia. Koska ohitus on käytössä prosessin laajuudessa, se vaikuttaa vain istuntoihin, jotka käynnistetään, kun komentosarjoja suoritetaan Explorerista. Tämä tarkoittaa kuitenkin, että saatat päätyä käynnistämään skriptejä, jotka muuten voisivat odottaa (ja haluavat) politiikkasi kieltävän.
Jos haluat määrittää Explorer-ohjelmasta käynnistettyjen komentosarjojen prosessitason suorittamisenPolitiikka yllä olevan kuvakaappauksen mukaisesti, sinun on muutettava samaa rekisteriarvoa, jonka juuri kysyimme. Voit tehdä sen manuaalisesti Regeditissä muuttamalla sen tähän:
"C: Windows System32 WindowsPowerShell v1.0 powershell.exe" "-ExecutionPolicy" "RemoteSigned" "-file" "% 1"
Voit myös muuttaa asetusta PowerShellin sisällä, jos haluat. Muista tehdä tämä nostetusta istunnosta, kun HKCR PSDrive on kartoitettu.
Set-ItemProperty HKCR: Microsoft.PowerShellScript.1 Shell-komento (oletus) "" C: Windows System32 WindowsPowerShell v.0.0 powerhell.exe "" -ExecutionPolicy "RemoteSigned" "-file" " % 1" '
Suorita PowerShell-skriptit pääkäyttäjänä.
Aivan kuten on huono idea poistaa UAC kokonaan käytöstä, on myös huono tietoturvakäytäntö suorittaa skriptejä tai ohjelmia, joilla on korotetut oikeudet, ellet tarvitse niitä suorittamaan toimintoja, jotka edellyttävät järjestelmänvalvojan pääsyä. UAC-kehotteen rakentaminen PowerShell-skriptien oletustoimintoon ei siis ole suositeltavaa. Voimme kuitenkin lisätä uuden kontekstivalikon vaihtoehdon, jotta voimme helposti suorittaa komentosarjoja korotetuissa istunnoissa, kun tarvitsemme. Tämä on samanlainen kuin menetelmä, jota käytetään lisäämään "Open with Notepad" -toimintoa kaikkien tiedostojen kontekstivalikkoon - mutta täällä me vain kohdistamme PowerShell-skriptejä. Aiomme myös siirtää joitakin edellisessä artikkelissa käytettyjä tekniikoita, joissa käytimme erätiedostoa rekisterihahmojen sijasta käynnistääkseen PowerShell-komentosarjamme.
Voit tehdä tämän Regeditissä siirtymällä takaisin Shell-avaimeen osoitteessa:
HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell
Luo siellä uusi aliavain. Soita se "Run with PowerShell (Admin)". Luo sen alapuolelle toinen aliavain, jota kutsutaan nimellä ”Komento”. Aseta sitten "(Oletus)" -arvo komennon alle:
"C: Windows System32 WindowsPowerShell v1.0 powershell.exe" "-Komento" "" ja Käynnistä prosessin PowerShell.exe -ArgumentList "-ExecutionPolicy RemoteSigned -File"% 1 "" -Verb RunAs "
Saman tekeminen PowerShellissa tarvitsee tällä kertaa kolme riviä. Yksi jokaiselle uudelle näppäimelle ja toinen asetukselle "(Oletus)" -arvo Commandille. Älä unohda korkeutta ja HKCR-kartoitusta.
Uusi artikkeli 'HKCR: Microsoft.PowerShellScript.1 Shell Käynnistä PowerShellin kanssa (Admin)' Uusi kohde 'HKCR: Microsoft.PowerShellScript.1 Shell Käynnistä PowerShellillä (Admin) Komento "Set-ItemProperty" HKCR: Microsoft.PowerShellScript.1 Shell Käynnistä PowerShellilla (Admin) Komento "(Oletus)" "C: Windows System32 WindowsPowerShell v.0.0 powerhell.exe" "-komento" "" & Käynnistysprosessin PowerShell.exe -ArgumentList "-ExecutionPolicy RemoteSigned -File"% 1 "" - Verb RunAs ""
Huomaa myös, että PowerShellin kautta syötettävän merkkijonon ja rekisteriin menevän arvon välillä on eroja. Erityisesti meidän on pakattava koko asia yksittäisiin lainausmerkkeihin ja kaksinkertaistettava sisäiset yksittäiset lainaukset, jotta vältettäisiin virheitä komentojen jäsentämisessä.
Nyt sinun pitäisi olla uusi kontekstivalikon merkintä PowerShell-skripteille, nimeltään "Suorita PowerShellillä (Admin)".
Uusi vaihtoehto tuottaa kaksi peräkkäistä PowerShell-esiintymää. Ensimmäinen on vain toisen käynnistin, joka käyttää Käynnistysprosessia parametrilla "-Verb RunAs" pyytääkseen korotusta uudelle istunnolle. Sieltä käsikirjoituksen pitäisi pystyä suorittamaan järjestelmänvalvojan käyttöoikeudet, kun olet napsauttanut UAC-kehotetta.
Viimeistelyt.
Tähän on vain pari pari, mikä voi auttaa tekemään elämästä hieman helpompaa. Ensinnäkin, miten Notepad-toiminnon vapauttaminen on täysin mahdollista? Kopioi ”(Oletus)” -arvo komento-näppäimestä Muokkaa (alla) -kohdasta samaan kohtaan Avaa-kohdassa.
"C: Windows System32 WindowsPowerShell v1.0 powerhell_ise.exe" "% 1"
Voit myös käyttää tätä PowerShell-bittiä (tietysti Admin & HKCR):
Set-ItemProperty HKCR: Microsoft.PowerShellScript.1 Shell Avaa komento "(oletus)" "C: Windows System32 WindowsPowerShell v.0.0 powerhell_ise.exe" "% 1"
Vielä yksi vähäinen ärsytys on konsolin tapana hävitä, kun skripti on valmis. Kun näin tapahtuu, meillä ei ole mahdollisuutta tarkistaa komentosarjan lähdön virheiden tai muun hyödyllisen tiedon käsittelyyn. Tämä voidaan huolehtia asettamalla tauko jokaisen komentosarjan loppuun. Vaihtoehtoisesti voimme muokata "(Default)" -arvoja Command-näppäimillemme sisällyttämällä parametrin "-NoExit". Alla on muutetut arvot.
(Ilman Admin-käyttöoikeutta)
"C: Windows System32 WindowsPowerShell v1.0 powershell.exe" "-NoExit" "-ExecutionPolicy" "RemoteSigned" "-file" "% 1"
(Admin-käyttöoikeudella)
"C: Windows System32 WindowsPowerShell v1.0 powerhell.exe" "-komento" "& Käynnistä prosessin PowerShell.exe -ArgumentList '-NoExit -ExecutionPolicy RemoteSigned -File \ t Verb RunAs "
Ja tietysti annamme sinulle myös PowerShellin komentoja. Viimeisin muistutus: Korkeus & HKCR!
(Non-Admin)
Set-ItemProperty HKCR: Microsoft.PowerShellScript.1 Shell-komento (oletus) "C: Windows System32 WindowsPowerShell v1.0 powershell.exe" "-NoExit" "-ExecutionPolicy" RemoteSigned "" -file "% 1" '
(Admin)
Set-ItemProperty 'HKCR: Microsoft.PowerShellScript.1 Shell Käynnistä PowerShellilla (Admin) Komento "(Oletus)" "C: Windows System32 WindowsPowerShell v.0.0 powerhell.exe" "-Command" "" & Start-Process PowerShell.exe -ArgumentList "-NoExit -ExecutionPolicy RemoteSigned -File \ t
Ottaen sen spin.
Voit kokeilla tätä, käytämme skriptiä, joka näyttää meille ExecutionPolicy-asetukset ja onko komentosarja käynnistetty järjestelmänvalvojan oikeuksilla. Skriptiä kutsutaan nimellä "MyScript.ps1" ja se tallennetaan "D: Script Lab" -ohjelmaan. Koodi on jäljempänä viitaten.
jos (([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetCurrent ()) IsInRole ([Security.Principal.WindowsBuiltInRole] "Järjestelmänvalvoja")) Kirjoita-lähtö "Suorita järjestelmänvalvojana!" muu Kirjoita-ulostulo "Juoksu rajoitettu!" Get-ExecutionPolicy -List
"Suorita PowerShellillä" -toiminnon avulla:
Käyttämällä "Suorita PowerShell (Admin)" -toiminnolla, kun olet napsauttanut UAC: ia:
Jotta voisit osoittaa ExecutionPolicy-toiminnon prosessissa, voimme tehdä Windowsista, että tiedosto tuli Internetistä tällä PowerShell-koodilla:
Add-Content -Path D: Komentolaboratorio MyScript.ps1 '-Value "[ZoneTransfer]' nZoneId = 3" -Stream "Zone.Identifier"
Onneksi meillä oli -NoExit käytössä. Muuten tämä virhe olisi juuri vilkkunut, emmekä olisi tiennyt!
Zone.Identifier voidaan poistaa tällä tavalla:
Clear-Content -Path D: Komentolaboratorio MyScript.ps1 '-Stream' Zone.Identifier '
Hyödyllisiä viitteitä:
- PowerShell-komentosarjojen suorittaminen erätiedostosta - Daniel Schroederin ohjelmointi-blogi
- Järjestelmänvalvojan käyttöoikeuksien tarkistaminen PowerShellissa - Hei, komentosarjoja! blogi