Windowsin määrittäminen PowerShell-komentojonojen toimimiseksi entistä helpommin

Sisällysluettelo:

Windowsin määrittäminen PowerShell-komentojonojen toimimiseksi entistä helpommin
Windowsin määrittäminen PowerShell-komentojonojen toimimiseksi entistä helpommin
Anonim
Windowsissa ja PowerShellissä on sisäänrakennetut tietoturvaominaisuudet ja oletusasetukset, joiden tarkoituksena on estää loppukäyttäjiä vahingossa käynnistämästä komentosarjoja päivittäisten toimintojensa aikana. Kuitenkin, jos jokapäiväisessä toiminnassasi käytetään rutiininomaisesti oman PowerShell-skriptien kirjoittamista ja suorittamista, tämä voi olla enemmän haittaa kuin hyötyä. Seuraavassa kerromme, miten näitä ominaisuuksia voidaan käsitellä vaarantamatta täysin turvallisuutta.
Windowsissa ja PowerShellissä on sisäänrakennetut tietoturvaominaisuudet ja oletusasetukset, joiden tarkoituksena on estää loppukäyttäjiä vahingossa käynnistämästä komentosarjoja päivittäisten toimintojensa aikana. Kuitenkin, jos jokapäiväisessä toiminnassasi käytetään rutiininomaisesti oman PowerShell-skriptien kirjoittamista ja suorittamista, tämä voi olla enemmän haittaa kuin hyötyä. Seuraavassa kerromme, miten näitä ominaisuuksia voidaan käsitellä vaarantamatta täysin turvallisuutta.

Miten ja miksi Windows & PowerShell estää komentosarjan suorittamisen.

PowerShell on tehokkaasti komentojohto ja komentosarjakieli, joka on tarkoitettu korvaamaan CMD- ja sarjaskriptit Windows-järjestelmissä. Sellaisena PowerShell-skripti voi olla melko paljon konfiguroitu tekemään mitä tahansa manuaalisesti komentoriviltä. Tämä tarkoittaa käytännössä mahdollisten mahdollisten muutosten tekemistä järjestelmässäsi aina käyttäjän tilillesi asetettuihin rajoituksiin asti. Joten, jos voisit vain kaksoisnapsauttaa PowerShell-skriptiä ja käyttää sitä täysiä järjestelmänvalvojan oikeuksia, yksinkertainen yksinkertainen linja-auto voisi todella vahingoittaa päiväsi:

Get-ChildItem '$env:SystemDrive' -Recurse -ErrorAction SilentlyContinue | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue

ÄLÄ suorita yllä olevaa komentoa!

Se yksinkertaisesti menee tiedostojärjestelmän läpi ja poistaa mitä tahansa. Mielenkiintoista, tämä ei välttämättä tee järjestelmää käyttökelvottomaksi niin nopeasti kuin luulisi - vaikka sitä ajettaisiin korotetusta istunnosta. Mutta jos joku soittaa sinut tämän scriptin suorittamisen jälkeen, koska he eivät yhtäkkiä löydä tiedostojaan tai suorittavat joitain ohjelmia, "sammuttaminen ja uudelleen käynnistäminen" luultavasti johtaa heidät Windowsin käynnistyskorjaukseen, jossa heille kerrotaan, että heillä on mitään, mitä voidaan tehdä ongelman korjaamiseksi. Mikä voisi olla huonompi, sen sijaan, että saisi käsikirjoituksen, joka vain kerääntyy tiedostojärjestelmäänsä, ystäväsi saatetaan joutua käyttämään sellaista, joka lataa ja asentaa keiloggerin tai etäkäyttöpalvelun. Sitten sen sijaan, että kysytte Startup Repairista, he saattavat päätyä pyytämään poliisin kysymyksiä pankkien petoksista!

Nyt on selvää, miksi tietyt asiat ovat tarpeen loppukäyttäjien suojelemiseksi itseltään, niin sanotusti. Mutta sähkön käyttäjät, järjestelmänvalvojat ja muut geeksit ovat yleisesti (vaikkakin poikkeuksia lukuun ottamatta) hieman varovaisempia näistä uhkista, tietäen, miten he voivat löytää ja helposti välttää heitä, ja haluavat vain päästä tekemään työnsä. Tätä varten heidän on joko poistettava käytöstä tai kehitettävä muutama tieverkko:

  • PowerShell ei salli ulkoisten komentojen suorittamista oletuksena. PowerShellin ExecutionPolicy-asetus estää ulkoisten skriptien suorittamisen oletusarvoisesti kaikissa Windows-versioissa. Joissakin Windows-versioissa oletusarvo ei salli komentojen suorittamista ollenkaan. Näytimme, kuinka voit muuttaa tätä asetusta Windows 7: n PowerShell-komentotiedostojen suorittamisen sallimisessa, mutta katamme sen muutamalla tasolla tässäkin.
  • PowerShell ei ole liitetty.PS1-tiedostopäätteeseen oletuksena. Tuomasimme tämän aluksi PowerShell Geek School -sarjassa. Windows asettaa oletustoiminnon.PS1-tiedostoille avaamaan ne Notepadissa sen sijaan, että ne lähetettäisiin PowerShell-komentotulkkeihin. Tämä estää suoraan vahingollisten haittaohjelmien suorittamisen, kun he yksinkertaisesti klikataan kaksoisnapsauttamalla.
  • Jotkin PowerShell-komentosarjat eivät toimi ilman järjestelmänvalvojan oikeuksia. Jopa käynnissä olevan järjestelmänvalvojatason tilin kanssa, sinun on silti ajettava käyttäjän tilien valvonnassa (UAC) tiettyjen toimintojen suorittamiseen. Komentorivityökaluilla tämä voi olla vähän hankala sanoa vähiten. Emme halua poistaa käytöstä UAC: ää, mutta se on silti mukavaa, kun voimme käsitellä hieman helpommin.

Nämä samat ongelmat tuodaan esiin Erätiedoston käyttäminen PowerShell-komentojonojen helppokäyttöisempiä suorittamista varten, jossa käymme läpi komentojonotiedoston, jotta voimme tilapäisesti kiertää niitä. Nyt aiomme näyttää, kuinka järjestelmäsi asetetaan pitkäaikaisemmalle ratkaisulle. Muista, että näitä muutoksia ei yleensä pitäisi tehdä järjestelmissä, joita ei käytä yksinomaan - muuten lisäämällä muita käyttäjiä suuremman vaaran joutua samaan ongelmaan, jonka näiden ominaisuuksien on tarkoitus estää.

.PS1-tiedostoyhteyden muuttaminen.

Ensimmäinen ja ehkä kaikkein kiusallinen kiertäminen on oletusyhdistys.PS1-tiedostoille. Näiden tiedostojen yhdistäminen mihinkään muuhun kuin PowerShell.exe-versioon on järkevää estää epätoivottavien skriptien tapahtuvan vahingossa. Mutta kun otetaan huomioon, että PowerShellillä on integroitu komentosympäristö (ISE), joka on erityisesti suunniteltu PowerShell-skriptien muokkaamiseen, miksi haluaisimme avata.PS1-tiedostot Notepadissa oletuksena? Vaikka et olisikaan valmis siirtymään kokonaan kaksoisnapsauttamalla toimintoihin, luultavasti haluat säätää näitä asetuksia.

Voit muuttaa.PS1-tiedostoyhdistelmää haluamaasi ohjelmaan oletusohjelmien ohjauspaneelilla, mutta kaivaminen suoraan rekisteriin antaa sinulle hieman paremman hallinnan kuin tiedostot avataan. Tämän avulla voit myös asettaa tai muuttaa muita vaihtoehtoja, jotka ovat käytettävissä.PS1-tiedostojen pikavalikossa. Älä unohda tehdä varmuuskopiota rekisteristä ennen kuin teet tämän!

Rekisteriasetukset, jotka ohjaavat PowerShell-komentosarjoja, avautuvat seuraavaan sijaintiin:

HKEY_CLASSES_ROOTMicrosoft.PowerShellScript.1Shell

Näiden asetusten tutkiminen ennen niiden muuttamista on tarkasteltava kyseisen avaimen ja sen alaavainten kanssa Regedit-ohjelmalla. Shell-avaimella pitäisi olla vain yksi arvo, "(Oletus)", joka on asetettu "Avaa". Tämä on oletustoiminnon osoitin, jos haluat kaksoisnapsauttamalla tiedostoa, jonka näemme alatyypillä.

Laajenna Shell-näppäin ja näet kolme aliavainta. Kukin näistä edustaa toimintaa, jota voit tehdä, joka on erityinen PowerShell-komentosarjoille.

Voit laajentaa jokaista avainta, jotta voit tutkia arvot, mutta ne pohjimmiltaan vastaavat seuraavia oletusasetuksia:
Voit laajentaa jokaista avainta, jotta voit tutkia arvot, mutta ne pohjimmiltaan vastaavat seuraavia oletusasetuksia:
  • 0 - Suorita PowerShellillä. "Run with PowerShell" on itse asiassa vaihtoehto PowerShell-komentosarjojen pikavalikossa. Tekstiä vedetään vain toisesta sijainnista sen sijaan, että käytät avaimen nimeä kuten muut. Ja se ei ole vielä kaksoisnapsautustoiminnon oletusarvo.
  • Muokkaa - Avaa PowerShell ISE. Tämä on paljon järkevämpää kuin Muistio, mutta sinun on vielä napsautettava.PS1-tiedostoa oletuksena.
  • Avaa - Avaa Muistiossa. Huomaa, että tämä avaimenimi on myös merkkijono, joka on tallennettu Shell-avaimen "(Oletus)" -arvoon. Tämä tarkoittaa sitä, että tiedostoa kaksoisnapsauttamalla avautuu "Avaa" se, ja toiminto on tavallisesti käytössä Notes-muistilla.

Jos haluat kiinni valmiiksi rakennettu komentojonoista jo käytettävissä, voit vain muuttaa”(oletus)” arvo Shell avain vastaa nimeä avaimen, joka vastaa mitä haluat kaksoisnapsauttamalla tehdä. Tämä voidaan helposti tehdä käsin Rekisterieditoria tai voit käyttää saatuja kokemuksia meidän opetusohjelma tutustua rekisterin PowerShell (plus pieni PSDrive nipistää) alkaa rakentaa uudelleen käytettävä skripti, joka voi määrittää järjestelmät sinulle. Alla olevat komennot on suoritettava korotetusta PowerShell-istunnosta, samanlainen kuin käynnissä oleva CMD kuin ylläpitäjä.

Ensin sinun on määritettävä PSDrive HKEY_CLASSES_ROOT, koska sitä ei ole määritetty oletuksena. Komento on:

New-PSDrive HKCR Registry HKEY_CLASSES_ROOT

Nyt voit selata ja muokata rekisteriavaimet ja arvot HKEY_CLASSES_ROOT aivan kuin sinulla olisi säännöllinen HKCU ja HKLM PSDrives.

Jos haluat määrittää kaksoisnapsauttamalla PowerShell-komentosarjoja suoraan:

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1Shell '(Default)' 0

Jos haluat määrittää kaksoisnapsauttamalla PowerShell-komentosarjoja PowerShell ISE: ssä:

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1Shell '(Default)' 'Edit'

Oletusarvon palauttaminen (kaksoisnapsauttamalla PowerShell-komentosarjoja Muistiossa):

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1Shell '(Default)' 'Open'

Tämä on vain perusasetusten muuttaminen oletusarvoisen kaksoisnapsautuksen avulla. Käymme yksityiskohtaisemmin räätälöimällä, miten PowerShell-komentosarjoja käsitellään, kun ne avautuvat PowerShellissä Resurssienhallinnasta seuraavassa osiossa. Muista, että rajaus estää PSDrivien pysyvän koko istuntojen välillä. Joten, et luultavasti halua sisällyttää Uuden-PSDrive rivin alussa mitään asetuksia käsikirjoituksen rakentaa tähän tarkoitukseen, tai lisää se PowerShell profiilin. Muuten sinun on suoritettava tämä bitti manuaalisesti ennen kuin yrität tehdä muutoksia tällä tavalla.

PowerShell ExecutionPolicy -asetuksen muuttaminen.

PowerShellin ExecutionPolicy on toinen suojakerros vahingollisten komentosarjojen suorittamisesta. Tässä on useita vaihtoehtoja ja pari eri tapaa, jolla se voidaan asettaa. Useimmista vähiten turvallisiin, käytettävissä olevat vaihtoehdot ovat:

  • Rajoitettu - Ei komentosarjoja voi käyttää. (Useimpien järjestelmien oletusasetus). Tämä estää profiilikirjoituksesi toimimasta.
  • AllSigned - Kaikkien skriptien on luotava luotettava julkaisija digitaalisesti, jotta se toimisi pyytämättä käyttäjää. Kustantajien allekirjoittamat komentosarjat, jotka on nimenomaan määritelty epäluotettaviksi, tai skriptit, joita ei ole digitaalisesti allekirjoitettu lainkaan, eivät toimi. PowerShell kehottaa käyttäjää vahvistamaan, onko kustantaja allekirjoittanut julkaisija, jota ei ole vielä määritelty luotettavaksi tai epäluotettavaksi. Jos et ole allekirjoittanut digitaalisesti profiilikirjoitustasi ja luotu siihen, että allekirjoitus ei onnistu, se ei pysty suorittamaan. Ole varovainen, mihin kustantajiin luotat, koska voit silti päätyä haittaohjelmien käsittelemiseen, jos luotat väärään.
  • RemoteSigned - Internetistä ladattujen skriptien osalta tämä on täysin sama kuin "AllSigned". Kuitenkin paikallisesti luotuja tai muiden lähteistä kuin Internetistä tuotuja skriptejä voidaan käyttää ilman vahvistusta. Täällä sinun on myös oltava varovainen, mihin digitaalisiin allekirjoituksiin luotat, mutta ole varovainen myös allekirjoittamattomista skripteistä, jotka päätät suorittaa. Tämä on korkein suojaustaso, jolla voit käyttää työprofiilitiedostoa ilman allekirjoittamista digitaalisesti.
  • Rajoittamaton - Kaikki komentosarjat sallitaan käynnistyä, mutta komentosarjoja tarvitaan Internetistä. Tästä lähtien on täysin sinun tehtäväsi välttää epäluotettavia komentosarjoja.
  • Ohitus - Kaikki toimii ilman varoitusta. Ole varovainen tämän kanssa.
  • Määrittelemätön - Nykyisessä soveltamisalassa ei ole määritelty politiikkaa. Tätä käytetään palaamaan alaluokkiin määriteltyihin käytäntöihin (lisätietoja alla) tai käyttöjärjestelmän oletusarvoihin.

Kuten määritelmä ei määritellyt, edellä mainitut toimintatavat voidaan asettaa yhdeksi tai useammaksi useammasta alueesta. Voit käyttää Get-ExecutionPolicy -ohjelmaa, jossa -List-parametri, nähdäksesi kaikki laajuudet ja niiden nykyisen kokoonpanon.

Tavoitteet on lueteltu ensisijaisessa järjestyksessä, ja ylimmällä määritellyllä soveltamisalueella ohitetaan kaikki muut. Jos sääntöjä ei ole määritetty, järjestelmä palaa oletusasetukselle (useimmissa tapauksissa tämä on rajoitettu).
Tavoitteet on lueteltu ensisijaisessa järjestyksessä, ja ylimmällä määritellyllä soveltamisalueella ohitetaan kaikki muut. Jos sääntöjä ei ole määritetty, järjestelmä palaa oletusasetukselle (useimmissa tapauksissa tämä on rajoitettu).
  • MachinePolicy edustaa ryhmäkäytäntöä tietokoneen tasolla. Tätä käytetään yleensä vain verkkotunnuksessa, mutta se voidaan tehdä myös paikallisesti.
  • UserPolicy edustaa käyttäjäkohtaista ryhmäkäytäntöä. Tätä käytetään tyypillisesti vain yritysympäristöissä.
  • Prosessi on soveltamisala tässä PowerShell-instanssissa. Tämän soveltamisalan käytäntöjen muutokset eivät vaikuta muihin käynnissä oleviin PowerShell-prosesseihin, ja ne ovat tehottomia tämän istunnon lopettamisen jälkeen. Tämä voidaan konfiguroida -ExecutionPolicy parametri PowerShelliä käynnistetään, tai se voidaan asettaa asianmukaisen Set-ExecutionPolicy syntaksien istunnon aikana.
  • CurrentUser on soveltamisala, joka on määritetty paikallisessa rekisterissä ja koskee PowerShell-käynnistämiseen käytettyä käyttäjätiliä. 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 oletuskenttä, jota muutetaan, jos Set-ExecutionPolicy-arvo suoritetaan ilman -Scope-parametria. Koska se koskee kaikkia järjestelmän käyttäjää, sitä voidaan muuttaa vain korotetusta istunnosta.

Koska tämä artikkeli koskee lähinnä turvallisuutta käytettävyyden helpottamiseksi, olemme vain huolissamme alhaisimmista kolmesta laajuudesta. MachinePolicy- ja UserPolicy-asetukset ovat todella hyödyllisiä vain, jos haluat noudattaa rajoittavaa käytäntöä, jota ei yksinkertaisesti ohittaa. Jatkamalla muutoksia Prosessitasolla tai alla, voimme helposti käyttää mitä tahansa sopivaa toimintaympäristöä milloin tahansa.

Jotta salasanan ja käytettävyyden välinen tasapaino säilyisi, kuvassa näkyvä käytäntö on luultavasti paras. LocalMachine-käytännön rajoitettu rajoittaminen yleensä estää komentosarjoja kaikkien muiden kuin sinä. Tietenkin tämä voi ohittaa käyttäjät, jotka tietävät, mitä he tekevät ilman paljon vaivaa. Mutta sen pitäisi pitää kaikki ei-tech-osaavat käyttäjät vahingossa käynnistämästä jotain katastrofaalista PowerShellissä. Ottavat NykyinenKäyttäjä (ts.: sinä) asettaa rajoittamattomat voit manuaalisesti suorittaa ohjelmia komentoriviltä kuitenkin haluat, mutta ei säilyttää muistutus varoituksen skriptejä ladata Internetistä. RemoteSigned asetus prosessitasolla olisi tehtävä pikakuvakkeen PowerShell.exe tai (kuten teemme alla) rekisterissä arvot, jotka ohjaavat käyttäytymistä PowerShell skriptejä. Tämä mahdollistaa helppokäyttöisen kaksoisnapsautuksen toimivuuden mille tahansa kirjoittamalle komentosarjalle, samalla kun luodaan vahvempi este (mahdollisesti haittaohjelmien) käsikirjoitusten tahattomasta suorittamisesta ulkoisista lähteistä. Haluamme tehdä tämän täällä, koska on paljon helpompaa vahingossa kaksoisnapsauta komentosarjaa kuin yleensä kutsua sitä manuaalisesti vuorovaikutteisesta istunnosta.

Jos haluat asettaa CurrentUser- ja LocalMachine-käytännöt yllä kuvatulla kuvakkeella, suorita seuraavat komennot korkeammasta PowerShell-istunnosta:

Set-ExecutionPolicy Restricted Set-ExecutionPolicy Unrestricted -Scope CurrentUser

RemoteSigned-käytäntöjen noudattamisen valvomiseksi komentosarjoista suoritetaan Explorerista, joten joudumme muuttamaan jonkin rekisteriavaimen sisältämää arvoa, jota aiemmin tarkastelimme. Tämä on erityisen tärkeää, koska PowerShell- tai Windows-versiosta riippuen oletusasetukset voivat olla ohittamalla kaikki ExecutionPolicy-asetukset, paitsi AllSigned. Jos haluat nähdä, mikä nykyinen kokoonpano on tietokoneellesi, voit suorittaa tämän komennon (varmista ensin, että HKCR PSDrive on ensin kartoitettu):

Get-ItemProperty HKCR:Microsoft.PowerShellScript.1ShellCommand | Select-Object '(Default)'

Oletusasetuksesi on todennäköisesti yksi seuraavista kahdesta merkkijonosta tai jotain melko samanlaisesta:

(Näkyy Windows 7 SP1 x64: ssä, PowerShell 2.0: ssa)

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-file' '%1'

(Näkyy Windows 8.1 x64, PowerShell 4.0: n kanssa)

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' 'if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1''

Ensimmäinen ei ole huono, sillä kaikki se tekee komentosarjan olemassa olevissa ExecutionPolicy-asetuksissa. Se voisi tehdä paremmin, pakottamalla tiukempia rajoituksia entistä tapaturma-altis toimia, mutta tämä ei ollut alun perin tarkoitus laukaista on tuplaklikkaa muutenkin, ja oletus politiikka rajoittuu yleensä loppujen lopuksi. Toinen vaihtoehto on kuitenkin täydellinen ohitus, mitä tahansa ExecutionPolicy-toimintoa, jota sinulla todennäköisesti on, jopa rajoitettu. 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äsikirjoitusten käynnistämiseen, joita muuten voisit odottaa (ja haluat), että käytäntösi kieltää.

Jos haluat määrittää Resurssienhallinnasta käynnistetyistä komentosarjoista suoritettavan prosessitason ExecutionPolicy-ohjelman edellä kuvatun kuvaruudun mukaisesti, sinun on muokattava samaa rekisteriarvoa, jota me vain kysyttiin. Voit tehdä sen manuaalisesti Regeditissä muuttamalla sitä tähän:

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-ExecutionPolicy' 'RemoteSigned' '-file' '%1'

Voit myös muuttaa asetusta PowerShellissä, jos haluat. Muista tehdä tämä korotetusta istunnosta, jossa HKCR PSDrive kartoitetaan.
Voit myös muuttaa asetusta PowerShellissä, jos haluat. Muista tehdä tämä korotetusta istunnosta, jossa HKCR PSDrive kartoitetaan.

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1ShellCommand '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-ExecutionPolicy' 'RemoteSigned' '-file' '%1''

Suorita PowerShell-komentosarjat järjestelmänvalvojana.

Aivan kuten onkin huono ajatus poistaa UAC käytöstä kokonaan, on myös huonoa tietoturvakäytäntöä käyttää komentosarjoja tai ohjelmia, joilla on korkeammat käyttöoikeudet, ellei niitä todella tarvita suorittamaan toimintoja, jotka edellyttävät järjestelmänvalvojan pääsyä. Niinpä UAC-kehotteen rakentaminen PowerShell-komentosarjoihin ei ole suositeltavaa. Voimme kuitenkin lisätä uuden kontekstivalikon vaihtoehdon, jotta voimme helposti käyttää komentosarjoja kohotetuissa istunnoissa, kun tarvitsemme. Tämä on samanlainen kuin menetelmä, jota käytetään lisätäksesi "Open with Notepad" kaikkien tiedostojen kontekstivalikkoon - mutta tässä vain kohdistamme PowerShell-komentosarjoja. Aiomme myös siirtää joitakin edellisessä artikkelissa käytettyjä tekniikoita, joissa käytimme erätiedostoa rekisterimerkintöjen sijasta PowerShell-komentosarjan käynnistämiseen.

Voit tehdä tämän Regeditissa palaamalla Shell-avaimeen osoitteessa:

HKEY_CLASSES_ROOTMicrosoft.PowerShellScript.1Shell

Luo siellä uusi aliavain. Soita se "Run with PowerShell (Admin)". Alle tämän, luo toinen aliavain nimeltä "Komento".Sitten asetetaan "(Oletus)" arvo Command:

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' ''& {Start-Process PowerShell.exe -ArgumentList '-ExecutionPolicy RemoteSigned -File '%1'' -Verb RunAs}'

Image
Image

PowerShellin tekeminen tosiasiassa vaatii tällä hetkellä kolme riviä. Yksi jokaisesta uudesta avaimesta ja yksi, jolla asetetaan "(oletus)" arvo komennolle. Älä unohda korkeus ja HKCR-kartoitus.

New-Item 'HKCR:Microsoft.PowerShellScript.1ShellRun with PowerShell (Admin)' New-Item 'HKCR:Microsoft.PowerShellScript.1ShellRun with PowerShell (Admin)Command' Set-ItemProperty 'HKCR:Microsoft.PowerShellScript.1ShellRun with PowerShell (Admin)Command' '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' ''& {Start-Process PowerShell.exe -ArgumentList ''-ExecutionPolicy RemoteSigned -File '%1''' -Verb RunAs}''

Kiinnitä huomiota myös PowerShellin kautta syötettävän merkkijonon ja todellisen arvon välillä. Erityisesti meidän on käärittävä koko asia yksittäisiin lainausmerkkeihin ja kaksinkertaistettava sisäisiin yksittäisiin lainausmerkkeihin, jotta vältetään komentojen jäsentämisen virheet.

Nyt sinun pitäisi olla uusi kontekstivalikon syöte PowerShell-komentosarjoille, nimeltään "Run with PowerShell (Admin)".

Uusi vaihtoehto kertoo kaksi peräkkäistä PowerShell-tapausta. Ensimmäinen on vain käynnistyslaite, joka käyttää Start-Process-ohjelmaa "-Verb RunAs" -parametrilla, jotta se pyytää korkeutta uudelle istunnolle. Sieltä komentojasi pitäisi pystyä toimimaan järjestelmänvalvojan oikeuksien kanssa, kun napsautat UAC-kehotteen.
Uusi vaihtoehto kertoo kaksi peräkkäistä PowerShell-tapausta. Ensimmäinen on vain käynnistyslaite, joka käyttää Start-Process-ohjelmaa "-Verb RunAs" -parametrilla, jotta se pyytää korkeutta uudelle istunnolle. Sieltä komentojasi pitäisi pystyä toimimaan järjestelmänvalvojan oikeuksien kanssa, kun napsautat UAC-kehotteen.

Viimeistelyt.

Tässä on vain pari muuta tweaksia, jotka voivat auttaa tekemään elämästä vielä helpompaa. Yhden, kuinka päästä eroon Notepad-toiminnosta kokonaan? Kopioi "(oletus)" arvo Command-näppäimen kohdasta Muokkaa (alla), samaan kohtaan kohdassa Avaa.

'C:WindowsSystem32WindowsPowerShellv1.0powershell_ise.exe' '%1'

Tai voit käyttää tätä PowerShell-bittiä (tietysti Admin & HKCR):

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1ShellOpenCommand '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell_ise.exe' '%1''

Yksi lievempi ärsytys on konsolin tapana katoaa, kun käsikirjoitus on valmis. Kun näin tapahtuu, meillä ei ole mahdollisuutta tarkistaa käsikirjoitustuloksia virheistä tai muista hyödyllisistä tiedoista. Tämä voidaan huolehtia asettamalla tauko jokaisen skriptien lopussa tietenkin. Vaihtoehtoisesti voimme muuttaa "(Oletus)" arvoja komentopainikkeillamme, johon sisältyy "-NoExit" -parametri. Alla ovat muutetut arvot.

(Ilman järjestelmänvalvojan käyttöoikeutta)

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-NoExit' '-ExecutionPolicy' 'RemoteSigned' '-file' '%1'

(Admin-käyttöoikeus)

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' ''& {Start-Process PowerShell.exe -ArgumentList '-NoExit -ExecutionPolicy RemoteSigned -File '%1'' -Verb RunAs}'

Ja tietenkin, annamme sinulle myös PowerShell-komentoja. Viimeinen muistutus: Korkeus & HKCR!

(Non-Admin)

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1ShellCommand '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-NoExit' '-ExecutionPolicy' 'RemoteSigned' '-file' '%1''

(Admin)

Set-ItemProperty 'HKCR:Microsoft.PowerShellScript.1ShellRun with PowerShell (Admin)Command' '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' ''& {Start-Process PowerShell.exe -ArgumentList ''-NoExit -ExecutionPolicy RemoteSigned -File '%1''' -Verb RunAs}''

Otan sen spin.

Testaa tämä, käytämme komentosarjaa, joka näyttää meille ExecutionPolicy-asetukset ja onko käsikirjoitus käynnistetty järjestelmänvalvojan oikeuksilla. Skriptiä kutsutaan nimellä "MyScript.ps1" ja se tallennetaan "D: Script Lab": een näytejärjestelmässä. Koodi on alla viitaten.

if(([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) {Write-Output 'Running as Administrator!'} else {Write-Output 'Running Limited!'} Get-ExecutionPolicy -List

Run with PowerShell -toiminnon käyttäminen:

Käytä "Suorita PowerShell (Admin)" -toiminnon avulla napsauttamalla UAC: n kautta:
Käytä "Suorita PowerShell (Admin)" -toiminnon avulla napsauttamalla UAC: n kautta:
Osoittamalla ExecutionPolicy-toiminnon prosessin soveltamisalueella voimme tehdä Windows-käsityksestä, että tiedosto saapui Internetistä tämän PowerShell-koodin avulla:
Osoittamalla ExecutionPolicy-toiminnon prosessin soveltamisalueella voimme tehdä Windows-käsityksestä, että tiedosto saapui Internetistä tämän PowerShell-koodin avulla:

Add-Content -Path 'D:Script LabMyScript.ps1' -Value '[ZoneTransfer]`nZoneId=3' -Stream 'Zone.Identifier'

Onneksi meillä oli -NoExit käytössä. Muutoin tämä virhe olisi vain vilkaissut, eikä me olisikaan tiedä!
Onneksi meillä oli -NoExit käytössä. Muutoin tämä virhe olisi vain vilkaissut, eikä me olisikaan tiedä!

Zone.Identifier voidaan poistaa tämän avulla:

Clear-Content -Path 'D:Script LabMyScript.ps1' -Stream 'Zone.Identifier'

Hyödyllisiä viitteitä:

  • Running PowerShell-komentosarjat erätiedostosta - Daniel Schroederin ohjelmointikirja
  • PowerShellin järjestelmänvalvojan käyttöoikeuksien tarkistaminen - Hei, komentosarja! blogi

Suositeltava: