Kako preprosteje konfigurirati operacijski sistem Windows za delo s skripti PowerShell
Windows in PowerShell imata vgrajene varnostne funkcije in privzete konfiguracije, ki končnim uporabnikom preprečujejo nenamerno zagon skriptov med vsakodnevnimi dejavnostmi. Vendar, če vaše dnevne dejavnosti rutinsko vključujejo pisanje in izvajanje lastnih skriptov PowerShell, je to lahko več nadloga kot korist. Tukaj vam bomo pokazali, kako se izogniti tem funkcijam, ne da bi popolnoma ogrozili varnost.
Kako in zakaj Windows & PowerShell preprečuje izvajanje skriptov.
PowerShell je dejansko ukazna lupina in skriptni jezik, ki naj bi nadomestil CMD in paketne skripte v sistemih Windows. Skript PowerShell je lahko konfiguriran tako, da naredite vse, kar lahko naredite ročno iz ukazne vrstice. To pomeni, da lahko praktično vsako spremembo na vašem sistemu naredite do omejitev, ki veljajo na vašem uporabniškem računu. Torej, če bi lahko samo dvokliknili skript PowerShell in ga zagnali s polnimi skrbniškimi pravicami, bi lahko en sam liner, kot je ta, resnično uničil vaš dan:
Get-ChildItem "$ env: SystemDrive" -Recurse -ErrorAction SilentlyContinue | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
NE izvajajte zgornjega ukaza!
To preprosto gre skozi datotečni sistem in izbriše vse, kar lahko. Zanimivo je, da to ne pomeni, da sistem ne bo deloval tako hitro, kot si morda mislite - tudi če ste zagnali s povišane seje. Toda, če vas kdo pokliče po zagonu tega skripta, ker nenadoma ne najdejo svojih datotek ali zaženejo nekaterih programov, jih bo »izklop in ponovni vklop« verjetno samo pripeljalo do popravila ob zagonu sistema Windows, kjer bodo povedali, da obstaja nič, kar je mogoče storiti, da bi odpravili težavo. Kaj bi lahko bilo slabše, namesto da bi dobili scenarij, ki samo trashes njihov datotečni sistem, vaš prijatelj bi lahko Prelisičil v teče tisti, ki prenaša in namesti keylogger ali storitev oddaljenega dostopa. Nato namesto vprašanj o popravilu ob zagonu lahko na policijo vprašajo nekaj vprašanj o bančnih goljufijah!
Zdaj bi moralo biti jasno, zakaj so določene stvari potrebne za zaščito končnih uporabnikov od njih samih. Ampak močni uporabniki, sistemski administratorji in drugi geeksi so na splošno (čeprav obstajajo izjeme) malo bolj previdni pri teh grožnjah, saj vedo, kako jih opaziti in se jim zlahka izogniti, in samo želijo nadaljevati z opravljanjem svojega dela. To storite tako, da onemogočijo ali zaobidejo nekaj cestnih blokov:
- PowerShell privzeto ne dovoljuje zunanje izvedbe skriptov.
Nastavitev programa ExecutionPolicy v PowerShell onemogoči izvajanje zunanjih skriptov v vseh različicah sistema Windows. V nekaterih različicah operacijskega sistema Windows privzeto sploh ne dovoljuje izvajanja skriptov. Pokazali smo vam, kako spremeniti to nastavitev v razdelku Kako dovoliti izvajanje skriptov PowerShell v operacijskem sistemu Windows 7, vendar bomo tudi tukaj pokrili nekaj stopenj.. - PowerShell privzeto ni povezan s pripono datoteke .PS1.
To smo najprej predstavili v seriji PowerShell Geek School. Windows nastavi privzeto dejanje za datoteke .PS1, da jih odpre v beležnici, namesto da jih pošlje v tolmač ukazov PowerShell. To naj bi neposredno preprečilo nenamerno izvajanje zlonamernih skriptov, ko jih preprosto dvakrat kliknemo. - Nekateri skripti PowerShell ne bodo delovali brez dovoljenj skrbnika.
Tudi če uporabljate račun skrbnika na ravni skrbnika, morate še vedno opraviti nadzor uporabniškega računa (UAC) za izvajanje določenih dejanj. Za orodja v ukazni vrstici je to lahko najmanj zapleteno. Ne želimo onemogočiti UAC-a, vendar je še vedno lepo, ko lahko naredimo nekaj lažjega.
Ta ista vprašanja se pojavijo v poglavju Kako uporabiti paketno datoteko za lažje izvajanje skriptov PowerShell, kjer vas vodimo skozi pisanje paketne datoteke, da jih začasno obiščete. Pokazali vam bomo, kako lahko sistem postavite bolj dolgoročno. Upoštevajte, da teh sprememb na splošno ne smete izvajati v sistemih, ki jih ne uporabljate izključno - v nasprotnem primeru tveganje drugih uporabnikov, da bi se srečali z enakimi težavami, ki jih te funkcije preprečujejo, so večje..
Spreminjanje povezave datoteke .PS1.
Prva, morda celo najpomembnejša, motnja, ki jo je treba doseči, je privzeto združenje za datoteke .PS1. Povezovanje teh datotek v kaj drugega kot v PowerShell.exe je smiselno za preprečevanje naključne izvedbe nezaželenih skriptov. Toda če upoštevamo, da je PowerShell opremljen z integriranim okoljem za skriptiranje (ISE), ki je posebej zasnovan za urejanje skriptov PowerShell, zakaj bi želeli odpreti datoteke .PS1 v beležnici po privzetku? Tudi če niste pripravljeni popolnoma preklopiti na omogočanje funkcije dvojnega klikanja za zagon, boste verjetno želeli prilagoditi te nastavitve.
Datoteko .PS1 lahko spremenite v kateri koli program, ki ga želite, z nadzorno ploščo Privzeti programi, toda kopanje neposredno v register vam bo dalo malo več nadzora nad tem, kako bodo datoteke odprte. To vam omogoča tudi, da nastavite ali spremenite dodatne možnosti, ki so na voljo v kontekstnem meniju za datoteke .PS1. Ne pozabite narediti varnostne kopije registra, preden to naredite!
Nastavitve registra, ki nadzorujejo, kako so odprte skripte PowerShell, so shranjene na naslednjem mestu:
HKEY_CLASSES_ROOT Microsoft.PowerShellScript.1 Shell
Če želite raziskati te nastavitve, preden jih spremenite, si oglejte ta ključ in njegove pod-ključe s programom Regedit. Tipka Shell mora imeti samo eno vrednost, "(Privzeto)", ki je nastavljena na "Odpri". To je kazalec na privzeto dejanje za dvojni klik na datoteko, ki ga bomo videli v pod-ključih.
Razširite ključ Shell in videli boste tri pod-tipke. Vsak od njih predstavlja dejanje, ki ga lahko izvedete in je specifično za skripte PowerShell.
Vsak ključ lahko razširite, da raziščete vrednosti znotraj njih, vendar v bistvu enačijo z naslednjimi privzetimi nastavitvami:
- 0 - Zaženite s PowerShell. »Run with PowerShell« je dejansko ime možnosti, ki je že v kontekstnem meniju za skripte PowerShell. Besedilo je samo potegnjeno iz druge lokacije, namesto da bi uporabili ime ključa, kot so druga. In to še vedno ni privzeta akcija z dvojnim klikom.
- Uredi - Odpri v PowerShell ISE. To je veliko bolj smiselno kot Notepad, vendar morate še vedno z desno miškino tipko klikniti datoteko .PS1.
- Odpri - Odpri v Beležnici. Upoštevajte, da je to ime ključa tudi niz, shranjen v vrednosti “(Privzeto)” ključa Shell. To pomeni, da se bo dvojni klik na datoteko "Odprl" in da je dejanje običajno nastavljeno za uporabo beležnice.
Če se želite držati že vgrajenih ukaznih nizov, lahko preprosto spremenite vrednost »(privzeto)« v ključu Shell, da se bo ujemala z imenom ključa, ki se ujema z želenim dvoklikom. To lahko zlahka izvedete znotraj Regedita ali pa uporabite izkušnje, ki ste jih pridobili iz našega vodnika o raziskovanju registra z PowerShell (in majhno prilagoditvijo PSDrive), da začnete graditi skript za večkratno uporabo, ki lahko konfigurira vaše sisteme za vas. Spodaj navedene ukaze je treba zagnati iz povišane seje PowerShell, podobno kot zagnan CMD kot skrbnik.
Najprej boste želeli konfigurirati PSDrive za HKEY_CLASSES_ROOT, ker to ni privzeto nastavljeno. Ukaz za to je:
New-PSDrive HKCR registracija HKEY_CLASSES_ROOT
Zdaj lahko krmarite in urejate registrske ključe in vrednosti v HKEY_CLASSES_ROOT, tako kot v običajnih HKCU in HKLM PSDrivesih.
Če želite konfigurirati dvojni klik za zagon skriptov PowerShell neposredno:
Set-ItemProperty HKCR: Microsoft.PowerShellScript.1 Shell '(privzeto)' 0
Če želite konfigurirati dvojni klik, da odprete skripte PowerShell v PowerShell ISE:
Set-ItemProperty HKCR: Microsoft.PowerShellScript.1 Shell (privzeto) "Uredi"
Če želite obnoviti privzeto vrednost (nastavi dvoklik, da odprete skripte PowerShell v beležnici):
Set-ItemProperty HKCR: Microsoft.PowerShellScript.1 Shell (privzeto) "Odpri"
To je samo osnova za spreminjanje privzete akcije z dvojnim klikom. V naslednjem razdelku bomo podrobneje opisali prilagajanje rokovanja s skripti PowerShell, ko se odprejo v PowerShell iz Raziskovalca. Upoštevajte, da določanje obsega preprečuje, da bi PSDrives vztrajal na vseh sejah. Tako boste verjetno želeli vključiti vrstico New-PSDrive na začetku konfiguracijskega skripta, ki ga izdelate v ta namen, ali ga dodati v svoj profil PowerShell. V nasprotnem primeru boste morali ročno zagnati ta bit, preden boste tako poskušali narediti spremembe.
Spreminjanje nastavitve PowerShell ExecutionPolicy.
PowerShell's ExecutionPolicy je druga plast zaščite pred izvajanjem zlonamernih skript. Za to obstaja več možnosti in nekaj različnih načinov, ki jih je mogoče nastaviti. Od večine do najmanj varnih, so na voljo naslednje možnosti:
- Omejeno - Izvajanje skriptov ni dovoljeno. (Privzeta nastavitev za večino sistemov.) To bo celo preprečilo, da bi se vaš skript profila zagnal.
- AllSigned - vse skripte mora digitalno podpisati zaupanja vreden izdajatelj, da jih lahko poganjajo brez pozivanja uporabnika. Skripti, ki so jih podpisali izdajatelji, ki so izrecno definirani kot nezaupni, ali skripti, ki sploh niso digitalno podpisani, se ne bodo izvajali. PowerShell bo uporabnika pozval k potrditvi, če skript podpiše izdajatelj, ki še ni opredeljen kot zaupanja vreden ali nezaupan. Če še niste digitalno podpisali svojega skripta profila in ugotovili zaupanje v ta podpis, se ne bo mogel zagnati. Bodite previdni, katerim izdajateljem zaupate, saj lahko še vedno zaženete zlonamerne skripte, če zaupate napačnemu.
- RemoteSigned - Za skripte, prenesene iz interneta, je to dejansko enako kot »AllSigned«. Vendar se lahko skripte, izdelane lokalno ali uvožene iz virov, ki niso internet, izvajajo brez poziva za potrditev. Pri tem morate paziti tudi na to, katerim digitalnim podpisom zaupate, pač pa bodite še previdnejši pri ne podpisanih skriptih, ki jih izberete. To je najvišja raven varnosti, pod katero lahko imate skript za delovni profil, ne da bi ga morali digitalno podpisati.
- Neomejen - Vse skripte se smejo izvajati, vendar bo za skripte z interneta potreben poziv za potrditev. Od te točke naprej je v celoti odvisno od vas, da se izognete zagonu nezaupljivih skript.
- Bypass - Vse poteka brez opozorila. Bodite previdni s tem.
- Nedefinirano - v trenutnem obsegu ni definirana nobena politika. To se uporablja, da se omogoči vračanje k pravilnikom, definiranim v nižjih področjih (več podrobnosti spodaj) ali privzetim OS.
Kot je opisano v opisu Nedefinirano, lahko zgornje politike nastavite v enem ali več različnih področjih. Za ogled vseh področij in njihove trenutne konfiguracije lahko uporabite Get-ExecutionPolicy, s parametrom -List..
Območja so navedena v vrstnem redu prednostnih vrst, pri čemer je najvišji definirani obseg razveljavil vse druge. Če ni določenih pravil, se sistem vrne na privzeto nastavitev (v večini primerov je to omejeno).
- MachinePolicy predstavlja pravilnik skupine, ki velja na računalniški ravni. To se na splošno uporablja samo v domeni, lahko pa tudi lokalno.
- UserPolicy predstavlja pravilnik skupine, ki velja za uporabnika. To se običajno uporablja samo v podjetniških okoljih.
- Proces je področje, specifično za ta primerek PowerShell. Spremembe pravilnika v tem obsegu ne bodo vplivale na druge procese PowerShell in bodo po zaključku te seje neučinkovite. To lahko konfigurirate s parametrom -ExecutionPolicy, ko se zažene PowerShell, ali pa ga nastavite s pravilno sintakso Set-ExecutionPolicy iz seje..
- CurrentUser je področje, ki je konfigurirano v lokalnem registru in velja za uporabniški račun, uporabljen za zagon PowerShell. To področje lahko spremenite s Set-ExecutionPolicy.
- LocalMachine je področje, ki je konfigurirano v lokalnem registru in velja za vse uporabnike sistema. To je privzeti obseg, ki se spremeni, če se Set-ExecutionPolicy izvaja brez parametra -Scope. Ker se uporablja za vse uporabnike v sistemu, se lahko spremeni samo s povišane seje.
Ker je ta članek namenjen predvsem varnosti, da bi olajšali uporabnost, smo zaskrbljeni zaradi spodnjih treh področij. Nastavitve MachinePolicy in UserPolicy so resnično uporabne le, če želite uveljaviti omejevalno politiko, ki ni tako preprosto obidana. Z ohranjanjem sprememb na ravni Procesa ali spodaj lahko zlahka uporabimo katerokoli nastavitev politike, za katero menimo, da je primerna za dano situacijo kadar koli.
Da bi ohranili ravnotežje med varnostjo in uporabnostjo, je politika, prikazana na posnetku zaslona, verjetno najboljša. Če nastavite pravilnik LocalMachine na Omejeno, na splošno preprečite izvajanje skriptov, ki jih izvaja kdorkoli drug. Seveda lahko to zaobidejo uporabniki, ki vedo, kaj počnejo brez veliko truda. Vendar pa bi moral vsak uporabnik, ki ni tehnično zdrava pamet, nehote sprožiti nekaj katastrofalnega v PowerShell. Če imate trenutni uporabnik (tj. Vi), ki ste ga nastavili kot neomejeno, lahko ročno izvajate skripte iz ukazne vrstice, kar želite, vendar obdrži opomnik za previdnost pri skriptih, prenesenih iz interneta. Nastavitev RemoteSigned na ravni procesa bi bilo treba opraviti v bližnjici do PowerShell.exe ali (kot bomo izvedli spodaj) v vrednostih registra, ki nadzorujejo vedenje skriptov PowerShell. To bo omogočilo enostavno dvoklikanje za zagon za vse skripte, ki jih pišete, hkrati pa postavili močnejšo oviro pred nenamernim izvajanjem (potencialno zlonamernih) skriptov iz zunanjih virov. To želimo storiti tukaj, ker je veliko lažje, če pomotoma dvokliknete skript, kot ga običajno pokličete ročno iz interaktivne seje.
Za nastavitev pravilnikov CurrentUser in LocalMachine, kot je prikazano na zgornji sliki zaslona, zaženite naslednje ukaze iz povišane seje PowerShell:
Set-ExecutionPolicy Restricted Set-ExecutionPolicy Unrestricted -Scope CurrentUser
Če želite uveljaviti politiko RemoteSigned za skripte, ki se izvajajo v Raziskovalcu, bomo morali spremeniti vrednost znotraj enega od registrskih ključev, ki smo jih iskali prej. To je še posebej pomembno, ker je, odvisno od vaše različice PowerShell ali Windows, privzeta konfiguracija lahko obiti vse nastavitve ExecutionPolicy, razen AllSigned. Če želite videti, kakšna je trenutna konfiguracija za vaš računalnik, lahko zaženete ta ukaz (najprej preverite, ali je HKCR PSDrive preslikan):
Get-ItemProperty HKCR: Microsoft.PowerShellScript.1 ukazna lupina lupine | Izberi predmet »(privzeto)«
Privzeta konfiguracija bo verjetno ena od naslednjih dveh nizov ali nekaj podobnega:
(Prikazano v operacijskem sistemu Windows 7 SP1 x64, z PowerShell 2.0)
"C: Windows System32 WindowsPowerShell v1.0 powerhell.exe" "-file" "% 1"
(Prikazano v operacijskem sistemu Windows 8.1 x64 s programom PowerShell 4.0)
"C: Windows System32 WindowsPowerShell v1.0" "-Command" "če ((Get-ExecutionPolicy) -ne" AllSigned ") Set-ExecutionPolicy-Obseg procesa obvoda; & '% 1 ""
Prva ni slaba, saj vse, kar naredi, je izvršiti skript pod obstoječimi nastavitvami ExecutionPolicy. Lahko bi bilo boljše, če bi uveljavili strožje omejitve za bolj nagnjene nesreče, vendar to prvotno ni bilo predvideno, da se sproži ob dvojnem kliku, privzeta politika pa je navadno omejena. Druga možnost pa je popolna obvoznica katerekoli ExecutionPolicy, ki jo boste verjetno imeli - celo omejeno. Ker bo obvod uporabljen v področju Process, vpliva le na seje, ki se zaženejo, ko se skripti zaženejo iz Explorerja. Vendar to pomeni, da boste lahko na koncu zagnali skripte, ki bi jih sicer lahko pričakovali (in želeli), da jih vaša politika prepove.
Če želite nastaviti politiko izvrševanja na ravni procesa za skripte, zagnane v Raziskovalcu, v skladu z zgornjim prikazom zaslona, boste morali spremeniti isto vrednost registra, ki smo jo pravkar preiskali. To lahko storite ročno v programu Regedit, tako da ga spremenite v to:
"C: Windows System32 WindowsPowerShell v1.0 powerhell.exe" "-ExecutionPolicy" "RemoteSigned" "-file" "% 1"
Nastavitev lahko spremenite tudi iz PowerShell, če želite. Ne pozabite, da to storite s povišane seje, s preslikavo HKCR PSDrive.
Set-ItemProperty HKCR: Microsoft.PowerShellScript.1 Shema ukazne vrstice "(privzeto)" "C: Windows System32 WindowsPowerShell v1.0 powerhell.exe" -ExecutionPolicy "" RemoteSigned "" -file "" % 1 ""
Zaženite skripte PowerShell kot skrbnik.
Prav tako kot je slaba ideja, da onemogočite UAC v celoti, je tudi slaba varnostna praksa, da izvajate skripte ali programe s povišanimi privilegiji, razen če jih dejansko potrebujete za izvajanje operacij, ki zahtevajo skrbniški dostop. Torej gradnja UAC-a v privzeto dejanje za skripte PowerShell ni priporočljiva. Vendar pa lahko dodamo novo možnost v kontekstnem meniju, ki nam bo omogočila preprosto izvajanje skriptov na povišanih sejah, ko bo to potrebno. To je podobno metodi, ki je bila uporabljena za dodajanje »Odpri z beležnico« v kontekstni meni vseh datotek, vendar bomo tukaj ciljali le na skripte PowerShell. Prenašali bomo tudi nekatere tehnike, uporabljene v prejšnjem članku, kjer smo namesto registrskih datotek uporabili paketno datoteko, da smo zagnali naš PowerShell skript.
Če želite to narediti v programu Regedit, se vrnite v ključ Shell na naslovu:
HKEY_CLASSES_ROOT Microsoft.PowerShellScript.1 Shell
V njej ustvarite nov podključ. Pokličite ga »Run with PowerShell (Admin)«. Pod njim ustvarite še en pod-ključ, imenovan "Command". Nato pod vrednostjo »Command« nastavite vrednost »(privzeto)«:
"C: Windows System32 WindowsPowerShell v1.0 powerhell.exe -Command" "" & Start-Process PowerShell.exe -ArgumentList '-ExecutionPolicy RemoteSigned -File "% 1" -Verb RunAs "
Če to storite v PowerShell, boste tokrat potrebovali tri vrstice. Ena za vsako novo tipko in ena za nastavitev vrednosti »(privzeto)« za ukaz »Command«. Ne pozabite višine in kartiranja HKCR.
HKCR za novo postavko: Microsoft.PowerShellScript.1 Shell Zažene s PowerShell (Admin) HKCR za novo postavko: Microsoft.PowerShellScript.1 Shell Zaženi s PowerShell (Admin) Ukaz 'Set-ItemProperty' HKCR: Microsoft.PowerShellScript.1 Shell Zaženi z ukazom PowerShell (Admin) Ukaz "(privzeto)" "C: Windows System32 WindowsPowerShell v1.0 powerhell.exe" "-Command" "" & Start-Process PowerShell.exe -AggumentList "-ExecutionPolicy RemoteSigned -File \ _"% 1 \ t
Prav tako bodite pozorni na razlike med nizom, ki ga vstavljate skozi PowerShell, in dejansko vrednostjo, ki se vnese v register. Predvsem moramo celotno stvar zaviti v enojne narekovaje in se podvojiti na notranjih enojnih narekovajih, da bi se izognili napakam pri razčlenjevanju ukazov.
Zdaj bi morali imeti nov vnos v kontekstnem meniju za skripte PowerShell, ki se imenuje »Zaženi s PowerShell (Admin)«.
Nova možnost bo ustvarila dve zaporedni primerki PowerShell. Prvi je samo zaganjalnik za drugo, ki uporablja Start-Process s parametrom “-Verb RunAs”, da zahteva povišanje za novo sejo. Od tam mora biti vaš skript sposoben zagnati s skrbniškimi pravicami, ko kliknete ukaz UAC.
Zaključni dotiki.
Obstaja le še nekaj novih potez, ki lahko pomagajo, da je življenje še lažje. Prvič, kako bi se popolnoma znebili funkcije Notepad? Preprosto kopirajte vrednost »(privzeto)« iz ukazne tipke pod možnostjo Urejanje (spodaj) na isto mesto pod možnostjo Odpri.
"C: Windows System32 WindowsPowerShell v1.0 powerhell_ise.exe" "% 1"
Lahko pa uporabite ta bit PowerShell (z Admin & HKCR seveda):
Set-ItemProperty HKCR: Microsoft.PowerShellScript.1 Shell Odprite ukaz "(privzeto)" "C: Windows System32 WindowsPowerShell v1.0 powerhell_ise.exe" "% 1" "
Še ena manjša motnja je navada konzole, da izgine, ko je scenarij končan. Ko se to zgodi, ne moremo pregledati izhodne skripte za napake ali druge koristne informacije. To lahko poskrbimo tako, da na koncu vsakega scenarija naredimo premor. Lahko pa spreminjamo vrednosti »(privzeto)« za naše ukazne tipke, da vključimo parameter »-NoExit«. Spodaj so spremenjene vrednosti.
(Brez skrbniškega dostopa)
"C: Windows System32 WindowsPowerShell v1.0 powerhell.exe" "-NoExit" "-ExecutionPolicy" "RemoteSigned" "-file" "% 1"
(Z skrbniškim dostopom)
"C: Windows System32 WindowsPowerShell v1.0 powerhell.exe -Command" "" & Start-Process PowerShell.exe -ArgumentList '-NoExit -ExecutionPolicy RemoteSigned -File "% 1 \ t Verb RunAs "
In seveda vam bomo dali tudi tiste v ukazih PowerShell. Zadnji opomnik: Elevation in HKCR!
(Brez skrbnika)
Set-ItemProperty HKCR: Microsoft.PowerShellScript.1 Shema ukazne vrstice "(privzeto)" "C: Windows System32 WindowsPowerShell v1.0 powerhell.exe" "-NoExit" -ExecutionPolicy "" RemoteSigned "" -file ""% 1 ""
(Admin)
Set-ItemProperty 'HKCR: Microsoft.PowerShellScript.1 Shell Zaženi z ukazom PowerShell (Admin) Ukaz "(Privzeto)" "C: Windows System32 WindowsPowerShell v1.0 powerhell.exe" -Command " "" & Start-Process PowerShell.exe -ArgumentList "-NoExit -ExecutionPolicy RemoteSigned -File \ _"% 1 \ _ "- Verb RunAs \ t
Vzamem ga za vrtenje.
Da bi to preizkusili, bomo uporabili skript, ki nam bo pokazal nastavitve ExecutionPolicy in ali se je skript zagnal z skrbniškimi dovoljenji. Skript se bo imenoval »MyScript.ps1« in bo shranjen v »D: Script Lab« na našem vzorčnem sistemu. Koda je spodaj, za referenco.
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
Uporaba dejanja »Zaženi s PowerShell«:
Uporaba dejanja »Zaženi z PowerShell (Admin)« po kliku preko UAC:
Če želite prikazati ExecutionPolicy v akciji na področju Process, lahko sistem Windows pomisli, da je datoteka prišla iz interneta s tem bitom kode PowerShell:
Add-Content -Path 'D: Skriptni laboratorij MyScript.ps1' -Value "[ZoneTransfer] 'nZoneId = 3" -Stream' Zone.Identifier '
Na srečo smo imeli -NoExit omogočen. V nasprotnem primeru bi ta napaka le utripnila in mi ne bi vedeli!
Zone.Identifier lahko s tem odstranite:
Clear-Content -Path 'D: Skriptni laboratorij MyScript.ps1' -Stream 'Zone.Identifier'
Koristne reference:
- Zagon skriptov PowerShell iz paketne datoteke - Blog programerja Daniela Schroederja
- Preverjanje skrbniških dovoljenj v PowerShell - Hej, Scripting Guy! Blog