Ako nakonfigurovať systém Windows na prácu s skriptmi PowerShell ľahšie

Obsah:

Ako nakonfigurovať systém Windows na prácu s skriptmi PowerShell ľahšie
Ako nakonfigurovať systém Windows na prácu s skriptmi PowerShell ľahšie

Video: Ako nakonfigurovať systém Windows na prácu s skriptmi PowerShell ľahšie

Video: Ako nakonfigurovať systém Windows na prácu s skriptmi PowerShell ľahšie
Video: WiFi (Wireless) Password Security - WEP, WPA, WPA2, WPA3, WPS Explained - YouTube 2024, Apríl
Anonim
Windows a PowerShell majú zabudované bezpečnostné funkcie a predvolené konfigurácie, ktoré zabraňujú koncovým používateľom náhodne spustiť skripty v priebehu ich každodenných činností. Ak však vaše každodenné aktivity bežne zahŕňajú písanie a spustenie vlastných skriptov PowerShell, môže to byť viac nepríjemné ako výhoda. Tu vám ukážeme, ako tieto funkcie vyriešiť bez úplného ohrozenia bezpečnosti.
Windows a PowerShell majú zabudované bezpečnostné funkcie a predvolené konfigurácie, ktoré zabraňujú koncovým používateľom náhodne spustiť skripty v priebehu ich každodenných činností. Ak však vaše každodenné aktivity bežne zahŕňajú písanie a spustenie vlastných skriptov PowerShell, môže to byť viac nepríjemné ako výhoda. Tu vám ukážeme, ako tieto funkcie vyriešiť bez úplného ohrozenia bezpečnosti.

Ako a prečo Windows a PowerShell zabraňujú vykonávaniu skriptov.

PowerShell je efektívne príkazový shell a skriptovací jazyk, ktorý má nahradiť CMD a dávkové skripty na systémoch Windows. Ako taký, skript PowerShell môže byť nakonfigurovaný tak, aby urobil všetko, čo by ste mohli urobiť manuálne z príkazového riadku. To sa rovná praktickej možnej zmene vo vašom systéme až po obmedzenia platné vo vašom používateľskom účte. Ak by ste mohli jednoducho dvakrát kliknúť na skript PowerShell a spustiť ho s úplnými oprávneniami administrátora, jednoduchý takýto liner by mohol skutočne zničiť váš deň:

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

NIE spustiť vyššie uvedený príkaz!

To jednoducho prechádza súborovým systémom a vymaže všetko, čo môže. Zaujímavé je, že systém nemusí byť nefunkčný tak rýchlo, ako si myslíte - aj keď je spustený z vyššej relácie. Ale ak vás niekto zavolá po spustení tohto skriptu, pretože zrazu nemôžu nájsť svoje súbory alebo spustiť niektoré programy, "vypnutie a opätovné zapnutie" pravdepodobne len viedlo ich k Windows Startup Repair, kde sa im bude povedať, že tam je nič, čo možno urobiť na vyriešenie problému. Čo by mohlo byť horšie, namiesto toho, aby ste dostali skript, ktorý práve trasuje ich súborový systém, môže byť váš priateľ podvedený k tomu, že sa spustí ten, ktorý stiahne a nainštaluje keylogger alebo službu vzdialeného prístupu. Potom namiesto toho, aby ste sa vás opýtali na otázky týkajúce sa opravy pri uvedení do prevádzky, môžu skončiť s otázkami polície o bankových podvodoch!

Teraz by malo byť zrejmé, prečo sú potrebné určité veci na ochranu koncových užívateľov pred sebou. Ale užívatelia energie, systémoví administrátori a iní geeki sú vo všeobecnosti (aj keď existujú výnimky) oveľa obozretnejší z týchto hrozieb, vedia, ako ich skrývať a ľahko sa im vyhnúť, a chcú len pokračovať v práci. Ak to chcete urobiť, budú musieť buď zakázať alebo obísť niekoľko cestných blokov:

  • Funkcia PowerShell neumožňuje predvolené spustenie externých skriptov. Nastavenie ExecutionPolicy v PowerShell zabraňuje vo všetkých verziách systému Windows štandardne vykonávať externé skripty. V niektorých verziách systému Windows štandardne neumožňuje vykonanie skriptov. Ukázali sme vám, ako zmeniť toto nastavenie v programe Ako povoliť vykonávanie skriptov PowerShell v systéme Windows 7, ale aj na niekoľkých úrovniach.
  • Funkcia PowerShell nie je predvolene priradená k rozšíreniu súboru.PS1. Prvýkrát sme to priviedli do série PowerShell Geek School. Systém Windows nastaví predvolenú akciu pre súbory.PS1, aby ich otvoril v programe Poznámkový blok, namiesto ich odoslania do interpretačného príkazu PowerShell. To je priamo zabrániť náhodnému spusteniu škodlivých skriptov, keď sú jednoducho dvojitým kliknutím.
  • Niektoré skripty PowerShell nebudú fungovať bez oprávnení správcu. Dokonca aj s účtom na úrovni Administrator, stále musíte prejsť ovládaním používateľských kont (UAC), aby ste vykonali určité činnosti. V prípade nástrojov príkazového riadku to môže byť trochu ťažkopádne. Nechceme deaktivovať UAC, ale je to stále pekné, keď môžeme s ňou ľahko zvládnuť.

Tieto rovnaké problémy sú uvedené v časti Ako používať dávkový súbor na to, aby boli skripty PowerShell ľahšie spustené, kde vás budeme prechádzať písaním dávkového súboru a dočasne ich obísť. Teraz vám ukážeme, ako nastaviť systém s dlhodobejším riešením. Majte na pamäti, že tieto zmeny by ste všeobecne nemali robiť na systémoch, ktoré nie sú výhradne používané inak. V opačnom prípade ste vystavení iným používateľom väčšiemu riziku, že sa dostanú do rovnakých problémov, ktoré majú tieto funkcie zabrániť.

Zmena priradenia súboru.PS1.

Prvý a možno najdôležitejšie obťažovanie, ako sa dostať, je predvolená asociácia súborov.PS1. Priradenie týchto súborov k inému než PowerShell.exe má zmysel pre zabránenie náhodnému vykonaniu neželaných skriptov. Avšak vzhľadom na to, že PowerShell je vybavený integrovaným skriptovacím prostredím (ISE), ktoré je špeciálne navrhnuté na úpravu skriptov PowerShell, prečo by sme chceli v programe Poznámkový blok predvolene otvoriť súbory.PS1? Aj keď nie ste pripravení na úplné prepnutie na funkciu dvojitého kliknutia, pravdepodobne budete chcieť tieto nastavenia upraviť.

Pomocou ovládacieho panela Predvolené programy môžete zmeniť priradenie súboru.PS1 k akémukoľvek programu, ktorý chcete, ale kopanie priamo do registra vám dá trochu väčšiu kontrolu nad tým, ako sa budú súbory otvárať. To tiež umožňuje nastaviť alebo zmeniť ďalšie možnosti, ktoré sú k dispozícii v kontextovej ponuke pre súbory.PS1. Nezabudnite urobiť zálohu registra pred tým, ako to urobíte!

Nastavenia databázy Registry, ktoré kontrolujú otvorenie skriptov PowerShell, sú uložené v nasledujúcom umiestnení:

HKEY_CLASSES_ROOTMicrosoft.PowerShellScript.1Shell

Ak chcete preskúmať tieto nastavenia skôr, než ich zmeníme, pozrite sa na tento kľúč a jeho podkľúče s programom Regedit. Kláves Shell by mal mať iba jednu hodnotu, "(predvolené)", ktorá je nastavená na "Open". Toto je ukazovateľ na predvolenú akciu pre dvojité kliknutie na súbor, ktorý sa zobrazí v podkľúčoch.

Rozbaľte kľúč Shell a uvidíte tri podkľúče. Každý z nich predstavuje akciu, ktorú môžete vykonať, ktorá je špecifická pre skripty PowerShell.

Môžete rozšíriť každý kľúč a preskúmať hodnoty v rámci, ale v podstate sa zhodujú s nasledujúcimi predvolenými hodnotami:
Môžete rozšíriť každý kľúč a preskúmať hodnoty v rámci, ale v podstate sa zhodujú s nasledujúcimi predvolenými hodnotami:
  • 0 - Spustite s PowerShell. "Spustiť s PowerShell" je v skutočnosti názov možnosti už v kontextovej ponuke skriptov PowerShell. Text je práve vytiahnutý z iného miesta namiesto použitia názvu kľúče, ako ostatné. A stále to nie je predvolené dvojité kliknutie.
  • Upraviť - Otvoriť v PowerShell ISE. To má oveľa väčší zmysel ako program Poznámkový blok, ale stále musíte kliknúť pravým tlačidlom na súbor.PS1, aby ste to urobili štandardne.
  • Otvoriť - Otvoriť v programe Poznámkový blok. Upozorňujeme, že tento názov kľúča je tiež reťazec uložený v "(Predvolená)" hodnota kľúča Shell. To znamená, že dvojitým kliknutím na súbor sa otvorí a že táto akcia je zvyčajne nastavená na používanie programu Poznámkový blok.

Ak sa chcete držať predvolených príkazových reťazcov, ktoré sú už k dispozícii, stačí zmeniť hodnotu "(Predvolené)" v kľúči Shell tak, aby zodpovedala názvu kľúča, ktorý zodpovedá tomu, čo chcete dvojitým kliknutím urobiť. To sa dá ľahko vykonať v rámci nástroja Regedit, alebo môžete využiť skúsenosti získané z nášho tutoriálu pri skúmaní registra s nástrojom PowerShell (plus malý vylepšený systém PSDrive) a začať vytvárať opakovane použiteľný skript, ktorý vám môže nakonfigurovať systémy. Nižšie príkazy musia byť spustené zo zvýšenej relácie PowerShell, podobne ako spustenie CMD ako správca.

Najprv budete chcieť nakonfigurovať PSDrive pre HKEY_CLASSES_ROOT, pretože v predvolenom nastavení nie je nastavený. Príkazom je:

New-PSDrive HKCR Registry HKEY_CLASSES_ROOT

Teraz môžete navigovať a upravovať kľúče a hodnoty databázy Registry v HKEY_CLASSES_ROOT rovnako, ako by ste robili v bežných HKCU a HKLM PSDrives.

Ak chcete nakonfigurovať dvojité kliknutie, spustite priamo PowerShell skripty:

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

Ak chcete nakonfigurovať dvojité kliknutie, otvorte skripty PowerShell v PowerShell ISE:

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

Obnovenie predvolenej hodnoty (nastavenie dvojitého kliknutia na otvorenie skriptov PowerShell v programe Poznámkový blok):

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

To je základná zmena predvoleného dvojitého kliknutia. Prejdeme podrobnejšie o prispôsobení spôsobu, akým sa skripty PowerShell spracúvajú, keď sú v programe PowerShell otvorené v ďalšej sekcii. Majte na pamäti, že určovanie rozsahu bráni tomu, aby PSDrives pretrvával v priebehu relácií. Takže pravdepodobne budete chcieť zaradiť riadok New-PSDrive na začiatok akéhokoľvek konfiguračného skriptu, ktorý ste vytvorili na tento účel, alebo ho pridať do svojho profilu PowerShell. V opačnom prípade musíte túto bit spustiť ručne, skôr než sa pokúsite vykonať zmeny týmto spôsobom.

Zmena nastavenia PowerShell ExecutionPolicy.

PowerShell ExecutionPolicy je ďalšia vrstva ochrany pred vykonávaním škodlivých skriptov. Existuje niekoľko možností a niekoľko rôznych spôsobov, ako sa dá nastaviť. Väčšina z najnebezpečnejších dostupných možností je:

  • Obmedzené - žiadne skripty nemožno spustiť. (Predvolené nastavenie pre väčšinu systémov.) To dokonca zabráni spusteniu vášho profilového skriptu.
  • AllSigned - Všetky skripty musia byť digitálne podpísané dôveryhodným vydavateľom, aby sa mohli zobrazovať bez toho, aby ich používateľ vyzval. Skripty podpísané vydavateľmi explicitne definované ako nedôveryhodné alebo skripty, ktoré nie sú digitálne podpísané, sa nebudú zobrazovať. PowerShell vyzve užívateľa na potvrdenie, ak je skript podpísaný vydavateľom, ktorý ešte nie je definovaný ako dôveryhodný alebo nedôveryhodný. Ak ste svoj profilový skript neaktualizovali digitálne a ste získali dôveru v tento podpis, nebudete ho môcť spustiť. Buďte opatrní, na ktorých vydavateľoch dôverujete, pretože stále môžete skončiť so škodlivými skriptami, ak dôverujete nesprávnemu skriptu.
  • RemoteSigned - Pre skripty stiahnuté z internetu je to efektívne rovnaké ako "AllSigned". Skripty vytvorené lokálne alebo importované z iných zdrojov ako z Internetu však môžu bežať bez akéhokoľvek výzvy na potvrdenie. Tu budete musieť byť tiež opatrní, ktoré digitálne podpisy máte dôveru, ale dokonca budete mať väčšiu pozornosť v prípade nesignízovaných skriptov, ktoré sa rozhodnete spúšťať. Toto je najvyššia úroveň zabezpečenia, pod ktorou môžete mať pracovný profilový skript bez digitálneho podpisu.
  • Bez obmedzenia - všetky skripty môžu byť spustené, ale pre skripty z internetu sa vyžaduje výzva na potvrdenie. Od tohto okamihu je úplne na vás, aby ste sa vyhli spusteniu nedôveryhodných skriptov.
  • Bypass - Všetko beží bez varovania. Buďte opatrní s týmto.
  • Neurčené - v súčasnom rozsahu nie je definovaná žiadna politika. Toto sa používa na umožnenie spätného odopnutia na pravidlá definované v nižších oblastiach (podrobnosti nižšie) alebo na predvolené nastavenia operačného systému.

Ako je navrhnuté v opise Nedefinované, vyššie uvedené pravidlá môžu byť nastavené v jednom alebo viacerých oblastiach. Na zobrazenie všetkých rozsahov a ich aktuálnej konfigurácie môžete použiť Get-ExecutionPolicy s parametrom -List.

Oblasti sú uvedené v prioritnom poradí, pričom najvyššie definovaný rozsah prevyšuje všetky ostatné. Ak nie sú definované žiadne pravidlá, systém sa vráti do svojho predvoleného nastavenia (vo väčšine prípadov je to obmedzené).
Oblasti sú uvedené v prioritnom poradí, pričom najvyššie definovaný rozsah prevyšuje všetky ostatné. Ak nie sú definované žiadne pravidlá, systém sa vráti do svojho predvoleného nastavenia (vo väčšine prípadov je to obmedzené).
  • MachinePolicy predstavuje skupinovú politiku platnú na úrovni počítača. Toto sa spravidla používa iba v doméne, ale môže byť vykonané aj lokálne.
  • UserPolicy predstavuje skupinovú politiku platnú pre používateľa. Toto sa typicky používa iba v podnikových prostrediach.
  • Proces je rozsah špecifický pre tento prípad PowerShell. Zmeny pravidiel v tomto rozsahu nebudú mať vplyv na ostatné bežné procesy PowerShell a po ukončení tejto relácie budú neúčinné. Toto môže byť nakonfigurované parametrom -ExecutionPolicy pri spustení programu PowerShell alebo môže byť nastavené so správnou syntaxou Set-ExecutionPolicy v rámci relácie.
  • CurrentUser je rozsah, ktorý je nakonfigurovaný v miestnom registri a vzťahuje sa na používateľský účet použitý na spustenie PowerShell. Tento rozsah je možné upraviť pomocou funkcie Set-ExecutionPolicy.
  • LocalMachine je oblasť konfigurovaná v lokálnom registri a vzťahujúca sa na všetkých používateľov systému. Toto je predvolený rozsah, ktorý sa zmení, ak sa spustí Set-ExecutionPolicy bez parametra -Scope. Vzhľadom na to, že sa to týka všetkých používateľov v systéme, môže sa zmeniť len z vyššej relácie.

Vzhľadom na to, že tento článok sa týka predovšetkým zabezpečenia bezpečnosti a uľahčenia použiteľnosti, sme práve znepokojení nižším tromi oblasťami. Nastavenia MachinePolicy a UserPolicy sú naozaj užitočné len vtedy, ak chcete presadiť reštriktívne pravidlá, ktoré nie sú tak jednoducho vynechané. Tým, že udržíme zmeny na úrovni procesov alebo nižšie, môžeme kedykoľvek ľahko použiť akékoľvek nastavenie politiky, ktoré považujeme za vhodné pre danú situáciu.

Ak chcete udržať určitú rovnováhu medzi bezpečnosťou a použiteľnosťou, pravidlo zobrazené na snímke obrazovky bude pravdepodobne najlepšie. Nastavenie politiky LocalMachine na obmedzené všeobecne zabraňuje spusteniu skriptov nikom iným ako vy. Samozrejme, to môžu byť vynechané používateľmi, ktorí vedia, čo robia bez veľkého úsilia. Ale malo by zabrániť všetkým používateľom, ktorí nie sú technikmi, aby neúmyselne spustili niečo katastrofické v systéme PowerShell. Použitie funkcie CurrentUser (t.j.: vás) ako Neobmedzený umožňuje ručné spúšťanie skriptov z príkazového riadku, ktoré sa vám páčia, ale ponecháva pripomenutie upozornenia na skripty stiahnuté z Internetu. Nastavenie RemoteSigned na úrovni procesu by bolo potrebné vykonať v skratke pre PowerShell.exe alebo (ako to urobíme nižšie) v hodnotách databázy Registry, ktoré riadia správanie skriptov PowerShell. To umožní jednoduchú funkciu dvojitého kliknutia na spúšťanie všetkých skriptov, ktoré píšete, a zároveň vytvára silnejšiu bariéru proti neúmyselnému vykonaniu (potenciálne škodlivých) skriptov z externých zdrojov. Chceme to urobiť, pretože je oveľa jednoduchšie náhodne dvakrát kliknúť na skript, než je všeobecne nazývať ručne z interaktívnej relácie.

Ak chcete nastaviť pravidlá CurrentUser a LocalMachine ako na obrázku vyššie, spustite nasledujúce príkazy zo zvýšenej relácie PowerShell:

Set-ExecutionPolicy Restricted Set-ExecutionPolicy Unrestricted -Scope CurrentUser

Ak chcete presadzovať zásadu RemoteSigned na skripty spustené z aplikácie Explorer, budeme musieť zmeniť hodnotu v rámci jedného z kľúčov databázy Registry, na ktoré sme sa už pozerali. Toto je obzvlášť dôležité, pretože v závislosti od vašej verzie PowerShell alebo Windows môže byť predvolená konfigurácia obísť všetky nastavenia ExecutionPolicy okrem AllSigned. Ak chcete zistiť, akú aktuálnu konfiguráciu máte pre svoj počítač, môžete spustiť tento príkaz (uistite sa, že je najprv namapovaný HKCR PSDrive):

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

Vaša predvolená konfigurácia bude pravdepodobne jeden z nasledujúcich dvoch reťazcov, alebo niečo podobného:

(Vidieť na Windows 7 SP1 x64 s PowerShell 2.0)

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

(Videný na systéme Windows 8.1 x 64 s PowerShell 4.0)

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

Prvá z nich nie je príliš zlá, pretože všetko, čo robí, je spustiť skript pod existujúcimi nastaveniami ExecutionPolicy. Mohlo by to byť lepšie, pretože by sme presadzovali prísnejšie obmedzenia pre akciu, ktorá je náchylnejšia na nehody, ale pôvodne to nebolo určené na spustenie dvojitým kliknutím a predvolená politika je zvyčajne obmedzená. Druhou možnosťou je však úplný bypass akéhokoľvek ExecutionPolicy, ktorý pravdepodobne budete mať na svojom mieste - dokonca aj obmedzený. Vzhľadom na to, že sa obtok použije v rozsahu procesov, ovplyvní to iba relácie, ktoré sa spustia pri spustení skriptov z programu Explorer. To však znamená, že by ste mohli ukončiť spustenie skriptov, ktoré by inak očakávali (a chcú) vašu politiku zakázať.

Ak chcete nastaviť výkonovú politiku na úrovni procesov pre skripty spustené z programu Explorer, v súlade s vyššie uvedenou snímkou obrazovky, budete musieť upraviť rovnakú hodnotu registra, ktorú sme práve spýtali. Môžete to urobiť manuálne v programe Regedit, a to tak,

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

Môžete tiež zmeniť nastavenie z PowerShell, ak chcete. Nezabudnite to urobiť zo zvýšenej relácie s mapovaním HKCR PSDrive.
Môžete tiež zmeniť nastavenie z PowerShell, ak chcete. Nezabudnite to urobiť zo zvýšenej relácie s mapovaním HKCR PSDrive.

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

Spustite PowerShell skripty ako správca.

Rovnako ako je zlý nápad úplne zakázať UAC, je tiež zlá bezpečnostná prax spustiť skripty alebo programy so zvýšeným oprávnením, pokiaľ ich skutočne nepotrebujete na vykonávanie operácií vyžadujúcich prístup správcu. Preto nie je odporúčané vytvoriť výzvu nástroja UAC pre predvolenú akciu pre skripty PowerShell. Môžeme však pridať nové kontextové menu, ktoré nám umožní ľahko spustiť skripty vo zvýšených reláciách, keď to potrebujeme. Toto je podobné metóde používajúcej pridať "Open with Notepad" do kontextového menu všetkých súborov - ale tu budeme len zacieliť skripty PowerShell. Budeme tiež niesť niektoré techniky používané v predchádzajúcom článku, kde sme použili dávkový súbor namiesto registra hacks na spustenie nášho skriptu PowerShell.

Ak to chcete urobiť v Regedite, vráťte sa späť do kľúča Shell, na adrese:

HKEY_CLASSES_ROOTMicrosoft.PowerShellScript.1Shell

Tu vytvorte nový podkľúč. Zavolajte "Spustite s PowerShell (Admin)". Pod tým vytvorte ďalší podkľúč s názvom "Príkaz".Potom nastavte hodnotu "(Predvolené)" pod príkazom:

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

Robiť to isté v programe PowerShell bude potrebovať tri riadky tentoraz. Jeden pre každý nový kľúč a jeden na nastavenie hodnoty "(Predvolené)" pre príkaz. Nezabudnite na výšku a mapovanie HKCR.
Robiť to isté v programe PowerShell bude potrebovať tri riadky tentoraz. Jeden pre každý nový kľúč a jeden na nastavenie hodnoty "(Predvolené)" pre príkaz. Nezabudnite na výšku a mapovanie HKCR.

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}''

Tiež venujte veľkú pozornosť rozdielom medzi reťazcom, ktorý je vložený cez PowerShell, a skutočnou hodnotou, ktorá sa dostane do registra. Najmä musíme zabaliť celú vec v jednoduchých úvodzovkách a zdvojnásobiť sa na internách jednotlivých úvodzoviek, aby sa zabránilo chybám v príkazovom parsovaní.

Teraz by ste mali mať novú položku kontextového menu pre skripty PowerShell s názvom "Spustiť s PowerShell (Admin)".

Nová možnosť prinesie dve po sebe idúce prípady PowerShell. Prvý je len spustiteľ pre druhú, ktorá používa štart-proces s parametrom "-Verb RunAs" na vyžiadanie nadmorskej výšky pre novú reláciu. Odtiaľ by mal váš skript byť spustený s oprávneniami správcu po kliknutí na výzvu UAC.
Nová možnosť prinesie dve po sebe idúce prípady PowerShell. Prvý je len spustiteľ pre druhú, ktorá používa štart-proces s parametrom "-Verb RunAs" na vyžiadanie nadmorskej výšky pre novú reláciu. Odtiaľ by mal váš skript byť spustený s oprávneniami správcu po kliknutí na výzvu UAC.

Dokončenia.

Existuje len pár vylepšení, ktoré vám pomôžu ešte trochu uľahčiť život. Za prvé, ako sa úplne zbaviť funkcie programu Poznámkový blok? Jednoducho skopírujte hodnotu "(Predvolené)" z príkazového kľúča pod Upraviť (dole) do rovnakého umiestnenia pod Otvoriť.

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

Alebo môžete použiť tento bit PowerShell (samozrejme s Admin & HKCR):

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

Jeden menší darebák je konzola zvyk miznúť, akonáhle skript je dokončený. Keď k tomu dôjde, nemáme žiadnu šancu skontrolovať výstup skriptov kvôli chybám alebo iným užitočným informáciám. To je možné postarať sa tým, že na konci každého z vašich skriptov, samozrejme, položíme pauzu. Alternatívne môžeme zmeniť hodnoty "(predvolené)" pre naše príkazové kľúče tak, aby obsahovali parameter "-NoExit". Nižšie sú upravené hodnoty.

(Bez prístupu pre správcov)

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

(S prístupom pre správcov)

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

A samozrejme vám dáme aj príkazy PowerShell. Posledná pripomenutie: Elevation & HKCR!

(Non-správcu)

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

(Správca)

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}''

Urobil to pre spin.

Ak to chcete vyskúšať, použijeme skript, ktorý nám ukáže nastavenia ImplementationPolicy na mieste a či bol skript spustený s oprávneniami správcu. Skript sa bude nazývať "MyScript.ps1" a bude uložený v "D: Script Lab" v našom vzorovom systéme. Kód je uvedený nižšie.

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

Použitie akcie "Spustiť s PowerShell":

Použitie akcie "Spustiť s PowerShell (Admin)" po kliknutí cez UAC:
Použitie akcie "Spustiť s PowerShell (Admin)" po kliknutí cez UAC:
Ak chcete demonštrovať funkciu ExecutionPolicy v činnosti v rámci rozsahu procesov, môžeme systém Windows mysliť, že súbor pochádza z internetu pomocou tohto kódu PowerShell:
Ak chcete demonštrovať funkciu ExecutionPolicy v činnosti v rámci rozsahu procesov, môžeme systém Windows mysliť, že súbor pochádza z internetu pomocou tohto kódu PowerShell:

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

Našťastie sme aktivovali funkciu -NoExit. V opačnom prípade by táto chyba práve blikala a my by sme to nevedeli!
Našťastie sme aktivovali funkciu -NoExit. V opačnom prípade by táto chyba práve blikala a my by sme to nevedeli!

Zóna.identifikátor možno odstrániť takto:

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

Užitočné odkazy:

  • Spúšťanie skriptov PowerShell z dávkového súboru - programovací blog Daniel Schroeder
  • Kontrola oprávnení správcu v systéme PowerShell - Hej, skriptovací chlap! Blog

Odporúča: