Kako konfigurirati sustav Windows za rad s PowerShell skriptama jednostavnije

Sadržaj:

Kako konfigurirati sustav Windows za rad s PowerShell skriptama jednostavnije
Kako konfigurirati sustav Windows za rad s PowerShell skriptama jednostavnije

Video: Kako konfigurirati sustav Windows za rad s PowerShell skriptama jednostavnije

Video: Kako konfigurirati sustav Windows za rad s PowerShell skriptama jednostavnije
Video: Cracking WiFi WPA2 Handshake - YouTube 2024, Svibanj
Anonim
Windows i PowerShell imaju ugrađene sigurnosne značajke i zadane konfiguracije čiji je cilj spriječiti krajnje korisnike da slučajno pokrenu skripte tijekom njihovih svakodnevnih aktivnosti. Međutim, ako vaše dnevne aktivnosti rutinski uključuju pisanje i pokretanje vlastitih PowerShell skripti, to može biti više smetnja nego koristi. Ovdje ćemo vam pokazati kako raditi oko ovih značajki bez potpunog ugrožavanja sigurnosti.
Windows i PowerShell imaju ugrađene sigurnosne značajke i zadane konfiguracije čiji je cilj spriječiti krajnje korisnike da slučajno pokrenu skripte tijekom njihovih svakodnevnih aktivnosti. Međutim, ako vaše dnevne aktivnosti rutinski uključuju pisanje i pokretanje vlastitih PowerShell skripti, to može biti više smetnja nego koristi. Ovdje ćemo vam pokazati kako raditi oko ovih značajki bez potpunog ugrožavanja sigurnosti.

Kako i zašto Windows i PowerShell sprječavaju izvršavanje skripte.

PowerShell je zapravo naredba ljuska i skriptni jezik koji je namijenjen za zamjenu CMD i skupno skripte na Windows sustavima. Kao takav, PowerShell skripta može se prilično konfigurirati za sve što možete učiniti ručno iz naredbenog retka. To podrazumijeva praktičnu izmjenu na vašem sustavu, do ograničenja koja su na vašem korisničkom računu. Dakle, ako samo dvaput kliknete PowerShell skriptu i pokrenete ga s punim administratorskim ovlastima, jednostavan ovakav linijski ovakav model mogao bi zapravo uništiti vaš dan:

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

NEMOJTE pokrenuti gore navedenu naredbu!

To jednostavno prolazi kroz datotečni sustav i briše sve što može. Zanimljivo je da sustav ne može funkcionirati onoliko brzo koliko možete misliti - čak i kada se izvodi s povišene sesije. No, ako vas netko pozove nakon pokretanja ove skripte, jer iznenada ne mogu pronaći svoje datoteke ili pokrenuti programe, "isključivanje i ponovno uključivanje" vjerojatno će ih dovesti samo u Windows Startup Repair gdje će im se reći da postoji ništa što se može učiniti da se riješi problem. Što bi moglo biti gore, umjesto da dobije skriptu koja samo odbaci njihov datotečni sustav, vaš prijatelj može biti prevaren u pokretanje jedne koja preuzima i instalira keylogger ili daljinski pristup uslugu. Zatim, umjesto da vam postavljaju pitanja o popravci pri pokretanju, mogu završiti postavljanjem policijskih pitanja o bankovnim prijevarama!

Do sada bi trebalo biti očito zašto su određene stvari potrebne kako bi se zaštitili krajnji korisnici od sebe, tako da govore. No, korisnici energije, administratori sustava i drugi gejevi općenito (iako postoje iznimke) malo su oprezniji od tih prijetnji, znajući kako ih prepoznati i lako ih izbjeći, a samo se žele nastaviti sa svojim radom. Da biste to učinili, morat će onemogućiti ili raditi na nekoliko blokova za ceste:

  • PowerShell ne dopušta izvršavanje vanjske skripte prema zadanim postavkama. Postavka ExecutionPolicy u programu PowerShell sprječava izvršavanje vanjskih skripti prema zadanim postavkama u svim verzijama sustava Windows. U nekim verzijama sustava Windows zadana ne dopušta izvršavanje skripte. Pokazali smo vam kako promijeniti ovu postavku u odjeljku Kako omogućiti izvršavanje PowerShell skripti na sustavu Windows 7, no pokriti ćemo ga i na nekoliko razina ovdje.
  • Po defaultu PowerShell nije pridružen.PS1 datoteci. To smo u početku donijeli u seriji PowerShell Geek School. Windows postavlja zadanu radnju za.PS1 datoteke kako bi ih otvorio u Notepad, umjesto da ih šalje na naredbeni tumač PowerShell. To je izravno spriječiti slučajno izvršavanje zlonamjernih skripti kada ih jednostavno kliknete dvostrukim klikom.
  • Neke PowerShell skripte neće raditi bez dozvola administratora. Čak i ako se pokrećete s računom na razini administratora, još uvijek trebate proći kontrolu korisničkih računa (UAC) za obavljanje određenih radnji. Za alate naredbenog retka ovo može biti pomalo nezgodno reći najmanje. Ne želimo onemogućiti UAC, ali još uvijek je lijepo kad bismo ga mogli lakše riješiti.

Ti se problemi pojavljuju u odjeljku Kako koristiti batch datoteku kako bi PowerShell skripte lakše pokrenuli, gdje vas hodamo kroz pisanje batch datoteke kako bismo ih privremeno okupili. Sada ćemo vam pokazati kako postaviti svoj sustav s dugoročnim rješenjem. Imajte na umu da te promjene ne bi trebale generalno provoditi na sustavima koji vas ne upotrebljavaju isključivo - inače stavljate druge korisnike da imaju veći rizik od pokretanja istih problema s kojima te značajke žele spriječiti.

Promjena pridružene datoteke.PS1.

Prva, a možda i najvažnija smetnja za kretanje je zadana povezanost za.PS1 datoteke. Povezivanje tih datoteka na bilo što drugo osim PowerShell.exe ima smisla za sprječavanje slučajnog izvođenja neželjenih skripti. No, s obzirom da PowerShell dolazi s integriranim scenarijskim okruženjem (ISE), koji je posebno dizajniran za uređivanje PowerShell skripti, zašto bismo htjeli otvoriti.PS1 datoteke u programu Notepad prema zadanim postavkama? Čak i ako niste spremni za potpuno prebacivanje na omogućivanje funkcije dvostrukog klika za pokretanje, vjerojatno ćete htjeti uvećati ove postavke.

Možete promijeniti asocijaciju datoteke.PS1 na bilo koji program koji želite pomoću upravljačke ploče Zadane programe, ali kopiranje izravno u registar daje vam malo više nadzora nad točno kako će se datoteke otvarati. To vam omogućuje i postavljanje ili promjenu dodatnih opcija dostupnih u kontekstnom izborniku za.PS1 datoteke. Nemojte zaboraviti napraviti sigurnosnu kopiju registra prije nego što to učinite!

Postavke registra koje kontroliraju otvaranje PowerShell skripti spremaju se na sljedećem mjestu:

HKEY_CLASSES_ROOTMicrosoft.PowerShellScript.1Shell

Da biste istražili te postavke prije nego što ih promijenimo, pogledaj taj ključ i njegove podključeve s Regeditom. Shell ključ bi trebao imati samo jednu vrijednost, "(Default)", koja je postavljena na "Open". To je pokazivač zadane radnje za dvostruk klik na datoteku, što ćemo vidjeti u podključima.

Proširite Shell ključ i vidjet ćete tri podključa. Svaka od njih predstavlja radnju koju možete izvesti, a koja je specifična za PowerShell skripte.

Možete proširiti svaki ključ da biste istražili vrijednosti unutar, ali u osnovi se razlikuju prema sljedećim zadanim postavkama:
Možete proširiti svaki ključ da biste istražili vrijednosti unutar, ali u osnovi se razlikuju prema sljedećim zadanim postavkama:
  • 0 - Pokreni s PowerShellom. "Pokreni s PowerShellom" zapravo je naziv opcije već u kontekstnom izborniku za PowerShell skripte. Tekst se jednostavno izvlači s druge lokacije umjesto da upotrebljava naziv ključa poput ostalih. I još uvijek nije zadana radnja dvostrukog klika.
  • Uredi - Otvori u PowerShell ISE. To ima puno više smisla od Notepad, ali još uvijek morati desnom tipkom miša kliknite. PS1 datoteku to učiniti po defaultu.
  • Otvori - Otvori u Notepadu. Imajte na umu da je ovo naziv ključa također niz koji je pohranjen u "(Default)" vrijednosti Shell ključa. To znači da ćete dvaput kliknuti na datoteku "Otvoriti", a ta će radnja normalno biti postavljena na Notepad.

Ako se želite pridržavati unaprijed izgrađenih zapovjednih nizova koji su već dostupni, možete jednostavno promijeniti vrijednost "(zadano)" u Shell ključu kako biste podudarali naziv ključa koji odgovara onome što želite učiniti dvostrukim klikom. To se lako može obaviti iz Regedita ili možete koristiti lekcije naučene iz našeg vodiča o istraživanju registra pomoću programa PowerShell (uz malu PSDrive ugađanje) za početak izgradnje ponovljive skripte koja vam može konfigurirati svoje sustave. Daljnje naredbe moraju biti pokrenute iz povišene PowerShell sesije, slično pokretanju CMD-a kao administratora.

Prvo, trebate konfigurirati PSDrive za HKEY_CLASSES_ROOT jer to nije postavljeno prema zadanim postavkama. Naredba za ovo je:

New-PSDrive HKCR Registry HKEY_CLASSES_ROOT

Sada možete kretati i urediti ključeve i vrijednosti registra u HKEY_CLASSES_ROOT baš kao i kod redovnih HKCU i HKLM PSDrives.

Za konfiguriranje dvostrukog klika za pokretanje skripti PowerShell izravno:

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

Da biste konfigurirali dvostruko klikom da biste otvorili PowerShell skripte u PowerShell ISE-u:

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

Da biste vratili zadanu vrijednost (postavite dvaput da biste otvorili PowerShell skripte u Notepad):

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

To su samo osnove promjene zadane radnje dvostrukog klika. U nastavku ćemo detaljnije prilagoditi način na koji se PowerShell skripte obrađuju kada se otvore u programu PowerShell iz Explorera u sljedećem odjeljku. Imajte na umu da ograničenje sprječava PSDrives da nastavi tijekom sesija. Dakle, vjerojatno ćete htjeti uključiti novu liniju PSDrive na početak svake konfiguracijske skripte koju izrađujete za tu svrhu ili ga dodati u profil PowerShell. U suprotnom, morat ćete ručno pokrenuti taj bit prije nego što pokušate izvršiti promjene na ovaj način.

Promjena postavke PowerShell ExecutionPolicy.

PowerShell's ExecutionPolicy je još jedan sloj zaštite od izvršenja zlonamjernih skripti. Postoji više mogućnosti za to i nekoliko različitih načina na koje se može postaviti. Od najviše do najmanje sigurne, dostupne opcije su:

  • Ograničeno - Nije dopušteno pokretanje skripti. (Zadana postavka za većinu sustava). To će čak spriječiti pokretanje skripte profila.
  • AllSigned - Sve skripte moraju biti digitalno potpisani od pouzdanog izdavača da bi se pokrenuli bez potrebe za upućivanjem korisnika. Skripte koje su potpisali izdavači koji su izričito definirani kao nepouzdani, ili skripte koje se uopće nisu digitalno potpisale, neće se pokrenuti. PowerShell će potaknuti korisnika na potvrdu je li skripta potpisala izdavač koji još nije definiran kao pouzdan ili nepouzdan. Ako niste digitalno potpisali skriptu profila i uspostavili povjerenje u taj potpis, nećete ga moći pokrenuti. Budite oprezni u koje izdavače imate povjerenja jer još uvijek možete završiti prikazivati zlonamjerne skripte ako vjerujete pogrešnom.
  • RemoteSigned - Za skripte preuzete s Interneta, ovo je učinkovito isto kao i "AllSigned". Međutim, skripte izrađene lokalno ili uvezene iz drugih izvora osim interneta dopuštene su za pokretanje bez potvrdnog upita. Ovdje ćete također morati biti oprezni u kojim digitalnim potpisama imate povjerenja, ali budite oprezniji i bez potpisanih skripti koje odaberete za pokretanje. To je najviša razina sigurnosti na kojoj možete imati skriptu za radni profil bez digitalnog potpisa.
  • Neograničeno - Sve skripte mogu se pokrenuti, ali za skripte s Interneta potreban je potvrdni upit. Od ovog trenutka, posve je na vama da izbjegavate nepoštivanje skripti.
  • Bypass - Sve radi bez upozorenja. Budite oprezni s ovim.
  • Nedefinirano - U trenutnom opsegu nije definirana nikakva politika. To se koristi za dopuštanje odustajanja od pravila definiranih u nižim opsegima (više pojedinosti u nastavku) ili na OS zadane postavke.

Kao što je sugerirao opis nedefiniranog, gornja pravila mogu se postaviti u jednom ili više od nekoliko opsega. Možete koristiti Get-ExecutionPolicy, s parametrom -List, da biste vidjeli sve opsege i njihovu trenutnu konfiguraciju.

Ciljevi su navedeni u redoslijedu prethodnika, s najvišim definiranim opsegom koji nadilazi sve ostale. Ako nijedna pravila nisu definirana, sustav se vraća na zadanu postavku (u većini slučajeva to je ograničeno).
Ciljevi su navedeni u redoslijedu prethodnika, s najvišim definiranim opsegom koji nadilazi sve ostale. Ako nijedna pravila nisu definirana, sustav se vraća na zadanu postavku (u većini slučajeva to je ograničeno).
  • MachinePolicy predstavlja grupnu politiku na snazi na razini računala. To se obično primjenjuje samo na domeni, ali se može obaviti i na lokalnoj razini.
  • UserPolicy predstavlja grupnu politiku koja je na snazi na korisnika. To se obično upotrebljava samo u okruženjima poduzeća.
  • Proces je opseg specifičan za ovu instancu PowerShell. Izmjene pravila u ovom opsegu neće utjecati na ostale pokrenute PowerShell procese te će biti neučinkovite nakon prekida ove sesije. To se može konfigurirati -ExecutionPolicy parametrom kada je PowerShell pokrenut ili se može postaviti odgovarajućom Set-ExecutionPolicy sintaksom unutar sesije.
  • CurrentUser je opseg koji je konfiguriran u lokalnom registru i odnosi se na korisnički račun koji se koristi za pokretanje programa PowerShell. Ovaj opseg može se mijenjati pomoću Set-ExecutionPolicy.
  • LocalMachine je opseg konfiguriran u lokalnom registru i primjenjuje se na sve korisnike na sustavu. Ovo je zadani opseg koji se mijenja ako se Set-ExecutionPolicy pokrene bez parametra -Scope. Kao što se odnosi na sve korisnike na sustavu, može se izmijeniti samo s povišene sesije.

Budući da se ovaj članak uglavnom odnosi na približavanje sigurnosti kako bi se olakšala upotreba, samo smo zabrinuti za niže tri opsega. Postavke MachinePolicy i UserPolicy doista su korisne samo ako želite uvesti restriktivnu politiku koja se ne može jednostavno zaobići. Čuvanje naših promjena na razini Procesa ili niže, lako možemo koristiti bilo koju postavku pravila koja smatramo prikladnima za određenu situaciju u bilo kojem trenutku.

Da bi se zadržala neka ravnoteža između sigurnosti i upotrebljivosti, pravila prikazana na snimci zaslona vjerojatno su najbolja. Postavljanje pravila LocalMachine na Ograničeno uglavnom sprječava pokretanje skripti od strane bilo koga osim vas. Naravno, to se može zaobići korisnicima koji znaju što rade bez puno truda. No, on bi trebao zadržati bilo koji ne-tech-pamet korisnici od slučajno pokreće nešto katastrofalno u PowerShell. Ako vam CurrentUser (tj. Vi) postavite kao Neograničeno, ručno izvodite skripte iz naredbenog retka, međutim vam se sviđa, ali zadržava podsjetnik opreza za skripte preuzete s Interneta. Postavka RemoteSigned na razini Procesa trebala bi biti izvršena u prečacu PowerShell.exe ili (kao što ćemo učiniti dolje) u vrijednostima registra koje kontroliraju ponašanje PowerShell skripti. To će omogućiti jednostavnu funkcionalnost dvostrukog klika za sve skripte koje pišete, a istodobno povećavate prepreku od nenamjernog izvođenja (potencijalno zlonamjernih) skripti iz vanjskih izvora. Želimo to učiniti ovdje jer je puno lakše slučajno dvaput kliknuti na skriptu nego što je općenito ručno nazvati s interaktivne sesije.

Da biste postavili pravila CurrentUser i LocalMachine kao na gore opisanom screenshotu, pokrenite sljedeće naredbe s povišene sesije programa PowerShell:

Set-ExecutionPolicy Restricted Set-ExecutionPolicy Unrestricted -Scope CurrentUser

Da biste izvršili pravila o RemoteSignedu na skriptama koje pokreću Explorer, morat ćemo promijeniti vrijednost unutar jednog od ključeva registra koji smo ranije gledali. To je osobito važno jer, ovisno o PowerShell ili verziji sustava Windows, zadana konfiguracija može biti zaobilaženje svih postavki izvršne politike osim AllSigned. Da biste vidjeli koja je trenutna konfiguracija za vaše računalo, možete pokrenuti ovu naredbu (provjerite je li HKCR PSDrive prvo mapiran):

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

Vaša zadana konfiguracija vjerojatno će biti jedna od sljedećih dva nizova ili nešto slično:

(Vidio na Windows 7 SP1 x64, s PowerShell 2.0)

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

(Vidio u sustavu Windows 8.1 x64, s PowerShell 4.0)

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

Prvi nije previše loš, jer sve to čini izvršavanje skripte pod postojećim postavkama izvršne policije. To bi se moglo poboljšati, primjenom strožih ograničenja za akciju koja je sklona nesrećama, ali to nije izvorno bilo namijenjeno dvostrukim klikom i svejedno je zadana pravila obično ograničena. Druga je opcija, međutim, puni zaobilaženje bilo kojeg izvršnog pravila za koju ste vjerojatno imali na mjestu - čak i ograničeno. Budući da će zaobići biti primijenjen u sklopu Procesa, ona utječe samo na sesije koje se pokreću kada se skripte izvode iz Explorera. Međutim, to znači da biste mogli završiti pokretanje skripti koje biste inače mogli očekivati (i žele) da se vaša pravila zabrane.

Da biste postavili procjenu izvedbe na razini procesa za skripte pokrenute iz programa Explorer, u skladu s gornjim screenshotom, morat ćete izmijeniti istu vrijednost registra koju smo upitali. To možete učiniti ručno u regeditu, promjenom na ovo:

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

Postavku možete promijeniti i iz programa PowerShell ako želite. Ne zaboravite to učiniti s povišene sesije, s mapom HKCR PSDrive.
Postavku možete promijeniti i iz programa PowerShell ako želite. Ne zaboravite to učiniti s povišene sesije, s mapom HKCR PSDrive.

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

Pokrenite PowerShell skripte kao administrator.

Baš kao što je loša ideja onemogućiti UAC u potpunosti, također je loša sigurnosna praksa za pokretanje skripti ili programa s povišenim povlasticama, osim ako ih zaista ne trebate obavljati operacije koje zahtijevaju pristup administratoru. Dakle, izgradnja UAC upita u zadanu akciju za PowerShell skripte nije preporučljivo. Međutim, možemo dodati novu opciju kontekstualnog izbornika kako bismo mogli jednostavno pokrenuti skripte u povišenim sesijama kada trebamo. To je slično metodi koja se koristi za dodavanje "Open with Notepad" u kontekstni izbornik svih datoteka - ali ovdje ćemo samo ciljati PowerShell skripte. Također ćemo preusmjeriti neke tehnike korištene u prethodnom članku, gdje smo koristili batch datoteku umjesto hakera registra za pokretanje PowerShell skripte.

Da biste to učinili u regeditu, vratite se u Shell ključ na:

HKEY_CLASSES_ROOTMicrosoft.PowerShellScript.1Shell

Tamo stvorite novu podključ. Nazovite ga "Run with PowerShell (Admin)". Ispod toga stvorite još jednu potključnicu pod nazivom "Naredba".Zatim postavite "(Zadano)" vrijednost u naredbi na ovo:

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

Učinite isto u PowerShellu, ovaj put će trebati tri reda. Jedan za svaki novi ključ i jedan za postavljanje "(zadano)" vrijednost za naredbu. Nemojte zaboraviti elevaciju i mapiranje HKCR-a.
Učinite isto u PowerShellu, ovaj put će trebati tri reda. Jedan za svaki novi ključ i jedan za postavljanje "(zadano)" vrijednost za naredbu. Nemojte zaboraviti elevaciju i mapiranje HKCR-a.

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

Također, pripazite na razlike između niza koji se stavlja kroz PowerShell i stvarnu vrijednost koja ulazi u Registar. Posebno, moramo zamotati cijelu stvar u jednokratnim citatima, i dvostruko povećati interne jednokratne citate, kako bismo izbjegli pogreške u parsiranju naredbe.

Sada biste trebali imati novi unos izbornika u kontekstu za PowerShell skripte, nazvane "Run with PowerShell (Admin)".

Nova opcija će stvoriti dvije uzastopne PowerShellove primjerke. Prvi je samo pokretač za drugi, koji koristi Start-Process s "-Verb RunAs" parametrom za zatraživanje visine za novu sesiju. Od tamo, vaša skripta bi trebala biti u mogućnosti pokrenuti s pravilima administratora nakon što kliknete UAC prompt.
Nova opcija će stvoriti dvije uzastopne PowerShellove primjerke. Prvi je samo pokretač za drugi, koji koristi Start-Process s "-Verb RunAs" parametrom za zatraživanje visine za novu sesiju. Od tamo, vaša skripta bi trebala biti u mogućnosti pokrenuti s pravilima administratora nakon što kliknete UAC prompt.

Dovršava se.

Postoji samo još par tweakova koji mogu pomoći da život još lakše postane. Za jednu, kako se riješiti funkcije Notepad u cijelosti? Jednostavno kopirajte vrijednost "(zadano)" iz naredbe Command u odjeljku Uredi (dolje), na istu lokaciju pod stavkom Otvori.

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

Ili, možete upotrijebiti ovaj dio PowerShell-a (s administratorom i HKCR-om, naravno):

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

Još jedan manji smetnja je konzola navika nestanka nakon što je skripta završena. Kada se to dogodi, nemamo nikakve šanse da pregledamo izlaz skeniranja za pogreške ili druge korisne informacije. To se može pobrinuti stavljanjem pauze na kraju svake vaše skripte, naravno. Alternativno, možemo promijeniti "(Default)" vrijednosti za naše Command tipke za uključivanje "-NoExit" parametar. Ispod su izmijenjene vrijednosti.

(Bez administratorskog pristupa)

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

(S pristupom administratoru)

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

I naravno, dat ćemo vam i one u PowerShell naredbi. Posljednji podsjetnik: Elevation & HKCR!

(Non-Admin)

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

(Administrator)

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

Uzimajući ga za spin.

Da biste ovo testirali, koristit ćemo skriptu koja nam može pokazati postavke ExecutionPolicy i hoće li se skripta pokrenuti s dozvolama administratora. Skripta će se zvati "MyScript.ps1" i pohraniti u "D: Script Lab" na našem uzorku sustava. Kôd je niže za referencu.

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

Upotreba radnje "Pokreni s PowerShellom":

Pomoću radnje "Pokreni s PowerShell (Admin)", nakon što kliknete UAC:
Pomoću radnje "Pokreni s PowerShell (Admin)", nakon što kliknete UAC:
Kako bismo demonstrirali izvršnu politiku u akciji u okviru Procesa, možemo Windowsu misliti da je datoteka došla s Interneta s ovim bitom PowerShell koda:
Kako bismo demonstrirali izvršnu politiku u akciji u okviru Procesa, možemo Windowsu misliti da je datoteka došla s Interneta s ovim bitom PowerShell koda:

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

Srećom, imali smo -NoExit omogućen. Inače bi ta pogreška upravo mogla treptati, a mi ne bismo znali!
Srećom, imali smo -NoExit omogućen. Inače bi ta pogreška upravo mogla treptati, a mi ne bismo znali!

Zone.Identifier se može ukloniti s ovim:

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

Korisne reference:

  • Pokretanje skripti PowerShell iz batch datoteke - Daniel Schroederov programski blog
  • Provjera dopuštenja administratora u sustavu PowerShell - Hej, scenaristička tip! Blog

Preporučeni: