Ako nakonfigurovať Windows pre prácu s PowerShell skripty ľahšie
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 než obťažovanie 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 čokoľvek, čo by ste mohli urobiť manuálne z príkazového riadku. To znamená, že prakticky urobíte akékoľvek zmeny vo vašom systéme až po obmedzenia platné vo vašom používateľskom účte. Takže ak by ste mohli jednoducho dvakrát kliknúť na skript PowerShell a spustiť ho s úplnými oprávneniami administrátora, tak jednoduchý jeden-liner by mohol skutočne zničiť váš deň:
Get-ChildItem "$ env: SystemDrive \" -Rekurse -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 čokoľvek. Zaujímavé je, že to nemusí robiť systém nefunkčný tak rýchlo, ako si myslíte - dokonca aj keď beží z zvýšenej relácie. Ale ak vás niekto zavolá po spustení tohto skriptu, pretože zrazu nemôže nájsť svoje súbory alebo spustiť niektoré programy, "vypnutie a opätovné zapnutie" pravdepodobne povedie len do 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, by váš priateľ mohol byť podvedený do spúšťania ten, ktorý stiahne a nainštaluje keylogger alebo službu vzdialeného prístupu. Potom namiesto toho, aby ste sa vás pýtali na otázky týkajúce sa opravy pri uvedení do prevádzky, môžu sa nakoniec opýtať polície na niektoré otázky o bankovom podvode!
Teraz by malo byť zrejmé, prečo sú určité veci potrebné na ochranu koncových užívateľov pred sebou, aby sme tak povedali. Ale užívatelia energie, systémoví administrátori a iní geeki sú všeobecne (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:
- 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 predvolená hodnota vôbec 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 pokryjeme ho 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 administrátora, stále musíte prejsť kontrolou 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 trochu ľahšie zvládnuť.
Tieto rovnaké problémy sú uvedené v časti Ako používať dávkový súbor na zjednodušenie spustenia skriptov PowerShell, kde vás budeme prechádzať písaním dávkového súboru, ktorý sa dočasne dostane okolo nich. Teraz vám ukážeme, ako nastaviť systém s dlhodobejším riešením. Majte na pamäti, že tieto zmeny by ste spravidla nemali robiť na systémoch, ktoré nie sú výlučne používané inými používateľmi - v opačnom prípade ste vystavení iným používateľom vyššiemu riziku, že budú používať rovnaké problémy, ktoré majú tieto funkcie zabrániť.
Zmena priradenia súboru .PS1.
Prvým a možno najdôležitejšou nepríjemnosťou sa stane 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žiaducich 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 na spustenie, pravdepodobne budete chcieť tieto nastavenia vyladiť.
Pomocou ovládacieho panela Predvolené programy môžete zmeniť priradenie súboru .PS1 na akýkoľvek program, ktorý chcete, ale kopanie priamo do databázy Registry vám dá trochu väčšiu kontrolu nad tým, ako sa budú súbory otvárať. Toto 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 predtým, ako to urobíte!
Nastavenia databázy Registry, ktoré kontrolujú otvorenie skriptov PowerShell, sú uložené v nasledujúcom umiestnení:
HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell
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 rozbaliť každý kľúč a preskúmať hodnoty v rámci, ale v podstate sa rovnať nasledujúcim predvoleným hodnotám:
- 0 - Spustite s PowerShell. "Spustiť s PowerShell" je vlastne názov možnosti už v kontextovej ponuke skriptov PowerShell. Text je práve vytiahnutý z iného umiestnenia namiesto použitia názvu kľúča ako ostatné. A stále to nie je predvolená akcia dvojitého kliknutia.
- 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 myši na súbor .PS1, aby ste to urobili štandardne.
- Otvoriť - Otvoriť v programe Poznámkový blok. Všimnite si, že tento názov kľúča je tiež reťazec uložený v "(Predvolené)" hodnotu kľúča Shell. To znamená, že dvojitým kliknutím na súbor sa otvorí a táto činnosť sa zvyčajne nastaví na používanie programu Poznámkový blok.
Ak chcete držať už predtým vytvorené príkazové reťazce, môžete jednoducho 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 pomocou programu PowerShell (plus malý vylepšený systém PSDrive) a začať vytvárať opakovane použiteľný skript, ktorý vám môže nakonfigurovať vaše systémy. Nižšie uvedené príkazy musia byť spustené zo zvýšenej relácie PowerShell, podobne ako spustenie CMD ako správcu.
Najprv budete chcieť nakonfigurovať PSDrive pre HKEY_CLASSES_ROOT, pretože v predvolenom nastavení nie je nastavený. Príkazom je:
Registry HKCR nového systému PSDrive HKEY_CLASSES_ROOT
Teraz môžete navigovať a upravovať kľúče a hodnoty databázy Registry v HKEY_CLASSES_ROOT rovnako ako v normálnom systéme HKCU a HKLM PSDrives.
Ak chcete nakonfigurovať dvojité kliknutie, spustite skripty PowerShell priamo:
Nastaviť položku vlastníctva HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(predvolené)' 0
Ak chcete nakonfigurovať dvojité kliknutie na otvorenie skriptov PowerShell v PowerShell ISE:
Nastaviť položku vlastníctva HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(predvolené) "Upraviť"
Obnovenie predvolenej hodnoty (nastavenie dvojitého kliknutia na otvorenie skriptov PowerShell v programe Poznámkový blok):
Set-ItemProperty HKCR: \ Microsoft.PowerShellScript.1 \ Shell '(predvolené) "Open"
To je len základná zmena predvoleného dvojitého kliknutia. Prejdeme podrobnejšie o prispôsobení spôsobu, akým sa skripty PowerShell spracovávajú, keď sú v aplikácii PowerShell otvorené z nasledujúcej sekcie. Majte na pamäti, že určovanie rozsahu nedovoľuje, 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's 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ť. Z väčšiny na najbezpečnejšie dostupné možnosti sú:
- Obmedzené - žiadne skripty sa nesmú 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 mohli byť spustené bez toho, aby ich používateľa vyzvali. Skripty podpísané vydavateľmi explicitne definované ako nedôveryhodné alebo skripty, ktoré nie sú digitálne podpísané, sa nebudú spúšťať. 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 profil skriptov digitálne nepodpísali a nestanovili dôveru v tento podpis, nebude možné ho spustiť. Buďte opatrní, na ktorých vydavateľov dôverujete, pretože stále môžete skončiť so spustením škodlivých skriptov, 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 ste dôveryhodní, ale dokonca by ste boli opatrnejší než nepodpísané skripty, 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 momentu je len 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é).
- MachinePolicy predstavuje skupinovú politiku platnú na úrovni počítača. Toto sa spravidla uplatňuje iba v doméne, ale môže sa vykonať 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 túto inštanciu PowerShell. Zmeny pravidiel v tomto rozsahu nebudú mať vplyv na ostatné bežiace procesy PowerShell a po ukončení tejto relácie budú neúčinné. To 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 lokálnom 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 miestnom registri a vzťahujúca sa na všetkých používateľov v systéme. Toto je predvolený rozsah, ktorý sa zmení, ak sa spustí Set-ExecutionPolicy bez parametra -Scope. Keďže to platí pre všetkých používateľov v systéme, môže sa zmeniť iba z zvýšenej 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 sa práve obávali nižších troch oblastí. Nastavenia MachinePolicy a UserPolicy sú naozaj užitočné len vtedy, ak chcete presadzovať obmedzujúce 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 zachovať určitú rovnováhu medzi bezpečnosťou a použiteľnosťou, pravdepodobne najlepšie je pravidlo zobrazené na obrazovke. Nastavenie politiky LocalMachine na obmedzené všeobecne zabraňuje spusteniu skriptov nikým 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 uží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, ako sa vám páči, 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é napíšete, a zároveň vytvára silnejšiu bariéru proti neúmyselnému vykonaniu (potenciálne nebezpečných) skriptov z externých zdrojov. Chceme to urobiť tu, pretože je oveľa jednoduchšie náhodou 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 Obmedzená 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 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 HKCR PSDrive mapovaný ako prvý):
Získanie položky vlastníctva HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Command | Vyberte objekt (predvolené)
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: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "- súbor" "% 1"
(Videné na systéme Windows 8.1 x 64 s PowerShell 4.0)
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "ak ((Get-ExecutionPolicy) -ne 'AllSigned') Set-ExecutionPolicy -Scope Process Bypass , "
Prvá z nich nie je príliš zlá, pretože všetko, čo robí, je vykonať skript pod existujúcimi nastaveniami ExecutionPolicy. Mohlo by to byť lepšie, presadzovaním prísnejších obmedzení pre akciu, ktorá je náchylnejšia na nehody, ale pôvodne nebola pôvodne určená na spustenie dvojitým kliknutím a predvolená politika je zvyčajne obmedzená. Druhou možnosťou je však úplný obtok ľubovoľnej položky ExecutionPolicy, ktorú pravdepodobne máte na mieste - dokonca aj obmedzené. Keďže obtok bude použitý v rozsahu procesov, ovplyvní to len relácie, ktoré sa spúšťajú pri spustení skriptov z programu Explorer. To však znamená, že by ste mohli skončiť so spustením 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: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-ExecutionPolicy" "RemoteSigned" "-file" "% 1"
Môžete tiež zmeniť nastavenie z PowerShell, ak chcete. Nezabudnite to urobiť z vylepšenej relácie s mapovaním HKCR PSDrive.
Nastavenie položky vlastníctva HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Command (predvolené) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe "" ExecsionPolicy "" RemoteSigned " % 1 " '
Spustite skripty PowerShell 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. Takže nie je odporúčané vytvoriť výzvu 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 programe Regedit, vráťte sa späť do kľúča Shell, na adrese:
HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell
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: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "" & Spustenie procesu PowerShell.exe -ArgumentList '-ExecutionPolicy RemoteSigned -File \ "% 1 \"' -Verb RunAs "
Robiť to isté v aplikácii 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.
Nová položka 'HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Run s PowerShell (Admin)' Nová položka 'HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Spustiť s PowerShell (Admin) \ Command' Set-ItemProperty ' HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Spustiť s PowerShell (Admin) \ Command "(predvolené)" "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" Spustiť proces 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 do jednoduchých úvodzoviek a zdvojnásobiť na interné jednočinné úvodzovky, aby sa zabránilo chybám v príkazovom parsovaní.
Teraz by ste mali mať novú položku v kontextovej ponuke 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 spúšťač 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 zbaviť funkcie Notepadu úplne? Jednoducho skopírujte hodnotu "(Predvolené)" z príkazového tlačidla v Edit (nižšie) do rovnakého umiestnenia pod Otvoriť.
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell_ise.exe" "% 1"
Alebo môžete použiť tento bit PowerShell (s Admin & HKCR samozrejme):
HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Open \ Command "(predvolené)" "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell_ise.exe"
Jedným ďalším malým obťažovaním je zvyk konzoly na miznutie, akonáhle je skript dokončený. Keď k tomu dôjde, nemáme žiadnu šancu skontrolovať výstup skriptu 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, pauzu. Alternatívne môžeme zmeniť hodnoty "(predvolené)" pre naše príkazové kľúče tak, aby obsahovali parameter "-NoExit". Nižšie sú uvedené modifikované hodnoty.
(Bez prístupu pre správcov)
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Noexit" "-ExecutionPolicy" "RemoteSigned" "-file"
(S prístupom pre správcov)
"C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" "-Command" "" & Spustiť proces PowerShell.exe -ArgumentList '-NoExit -ExecutionPolicy RemoteSigned -File \ "% 1 \ Verb RunAs "
A samozrejme vám dáme aj príkazy PowerShell. Posledná pripomenutie: Nadmorská výška & HKCR!
(Non-správcu)
Nastaviť položku vlastníctva HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Command (predvolené) "" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe "" -NoExit "" -ExecutionPolicy "" RemoteSigned " -file ""% 1 "
(Správca)
Set-ItemProperty 'HKCR: \ Microsoft.PowerShellScript.1 \ Shell \ Spustiť s PowerShell (Admin) \ Command "(predvolené)" C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe " "" & "Spustiť proces PowerShell.exe -ArgumentList" -NoExit -ExecutionPolicy RemoteSigned -Súbor \ "% 1 \" "- Verb RunAs" '
Urobil to pre rotáciu.
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.
ak (([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetCurrent ()) IsInRole ([Security.Principal.WindowsBuiltInRole] "Administrator")) Write-Output 'Spustenie ako správca! Write-Output 'Running Limited!' Get-ExecutionPolicy -Zoznam
Použitie akcie "Spustiť s PowerShell":
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:
Add-Content-cesta "D: \ Script Lab \ MyScript.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!
Zóna.identifikátor je možné odstrániť takto:
Clear-Content-cesta "D: \ Script Lab \ MyScript.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í administrátora v systéme PowerShell - Hej, skriptovací chlap! Blog