Dėl keleto priežasčių, daugiausia su saugumu susiję PowerShell scenarijai nėra tokie lengvai perkeliami ir gali būti naudojami kaip paketiniai scenarijai. Tačiau mes galime susieti paketinį scenarijų su "PowerShell" scenarijais, kad galėtume išspręsti šias problemas. Čia mes parodysime keletą iš šių probleminių sričių ir kaip kurti partijos scenarijų, kad juos apeitume.
Jei tikslinė sistema nebuvo iš anksto sukonfigūruota, kad būtų galima paleisti savavališkus scenarijus, su reikalingomis privilegijomis ir naudojant tinkamus nustatymus, tikėtina, kad bandysite tai padaryti.
Pradėkime nuo pirmosios problemos - .PS1 failų asociacijų. Negalite dukart spustelėti paleisti .PS1 failus, tačiau tokiu būdu galite paleisti .BAT failą. Taigi, mes užrašysime partijos rinkmeną, kad galėtume paskambinti PowerShell scenarijų iš mūsų komandinėje eilutėje.
Taigi mums nereikia iš naujo parašyti paketinio failo kiekvienam scenarijui arba kiekvieną kartą, kai mes perkelti scenarijų aplink. "PowerShell" scenarijaus failo kelias bus naudojamas savarankiško kintamojo kintamojo kintamojo. Norėdami atlikti šį darbą, serijinis failas turės būti dedamas į tą patį aplanką, kuriame yra jūsų "PowerShell" scenarijus, ir turi tą patį failo vardą. Taigi, jei jūsų "PowerShell" scenarijus vadinamas "MyScript.ps1", turėtumėte pavadinti savo paketinį failą "MyScript.bat" ir įsitikinti, kad jis yra toje pačioje aplanke. Tada įterpkite šias eilutes partijos scenarijuje:
@ECHO OFF PowerShell.exe -Command "& '% ~ dpn0.ps1' 'PAUSE
Jei nebūtų taikomi kiti saugumo apribojimai, tai būtų tikrai yra viskas, ko reikia norint paleisti "PowerShell" scenarijų iš paketinio failo. Tiesą sakant, pirmoji ir paskutinė eilutės iš esmės yra tik pirmumo reikalas - tai antroji eilutė, kuri iš tikrųjų daro darbą. Štai suskaidymas:
@ECHO OFF išjungia komandų atkartojimą. Tai tik palaiko kitas komandas, rodomas ekrane, kai paleidžiamas paketinis failas. Ši eilutė savaime yra paslėpta priešais esantį simbolį (@).
PowerShell.exe -Command "& '% ~ dpn0.ps1'" iš tikrųjų paleidžia PowerShell scenarijų. Žinoma, "PowerShell.exe" gali būti iškviestas iš bet kurio CMD lango ar paketinio failo, kad "PowerShell" būtų paleistas kaip nemalonus konsolės. Taip pat galite jį naudoti komandoms paleisti iš partijos failo, įtraukdami parametrą -Command ir atitinkamus argumentus. Tai, kaip jis naudojamas mūsų .PS1 failui pasiekti, yra specialus% ~ dpn0 kintamasis. Vykdoma iš paketinio failo,% ~ dpn0 vertinamas kaip partijos disko raidė, aplanko kelias ir failo vardas (be pratęsimo). Kadangi paketinis failas ir "PowerShell" scenarijus bus toje pačioje aplanke ir turi tą patį pavadinimą,% ~ dpn0.ps1 bus išverstas į visą "PowerShell" scenarijaus failo kelią.
PAUSE tiesiog sustabdo partijos vykdymą ir laukia vartotojo įvesties. Tai dažniausiai naudinga turėti paketų rinkmenų pabaigoje, kad prieš paleidžiant langą būtų galimybė peržiūrėti bet kokią komandinę išeitį. Kai atliksime kiekvieno žingsnio bandymus, tai bus akivaizdu.
Taigi, nustatytas pagrindinis rinkmenų rinkinys. Demonstravimo tikslais šis failas yra įrašomas kaip "D: Script Lab MyScript.bat" ir toje pačioje aplanke yra "MyScript.ps1". Pažiūrėkime, kas atsitinka, kai dukart spragtelėjame MyScript.bat.
Akivaizdu, kad "PowerShell" scenarijus neveikė, bet to reikia tikėtis - vis dėlto mes nagrinėjome tik vieną iš keturių problemų. Tačiau čia yra keletas svarbių bitų:
Šiuo atveju profilis yra paprastas vieno langelio scenarijus, naudojamas šiam demonstravimui generuoti produkciją, kai profilis yra aktyvus. Taip pat galite pritaikyti savo "PowerShell" profilį, jei norite patys išbandyti šiuos scenarijus. Savo profilio scenarijui tiesiog pridėkite šią eilutę:
Rašymas-išdavimas "Galiojantis" PowerShell profilis "!
" ExecutionPolicy "bandymo sistemoje čia yra" RemoteSigned ". Tai leidžia vykdyti vietoje sukurtus scenarijus (pvz., Profilio scenarijų), tuo tarpu blokuoja scenarijus iš išorinių šaltinių, nebent jie yra pasirašyti patikimos institucijos. Demonstravimo tikslais šiai komandai buvo naudojamas MyScript.ps1 kaip išorinio šaltinio žymėjimas:
Add-Content -Path 'D: Script Lab MyScript.ps1' -Value '[ZoneTransfer]' nZoneId = 3 "-Stream" Zone.Identifier '
Tai nustato "Zone.Identifier" alternatyvių duomenų srautą "MyScript.ps1", kad "Windows" manė, kad failas buvo gautas iš interneto. Tai gali būti lengvai pakeista tokia komanda:
"Clear-Content" -Path "D: Scenarijaus laboratorija MyScript.ps1" -Stream "Zone.Identifier"
PowerShell.exe - ExecutionPolicy Bypass -Command "& '% ~ dpn0.ps1'"
Parametras -ExecutionPolicy gali naudokite, kad pakeistumėte "ExecutionPolicy", kuri naudojama iškilus naujam "PowerShell" seanso. Tai nepasileidžia per tą seansą, taigi galime paleisti "PowerShell" tokiu būdu, kai mums reikia, be susilpninti bendrosios sistemos saugumo. Dabar, kai mes tai ištaisėme, leiskite dar kartą eiti į jį:
Dabar, kai scenarijus tinkamai įvykdytas, mes galime pamatyti, ką iš tikrųjų daro. Tai leido mums žinoti, kad mes naudojame scenarijų kaip riboto naudotojo. Scenarijus iš tikrųjų yra valdomas paskyros su administratoriaus leidimais, bet vartotojo abonemento valdymas tampa įmanomas. Nors išsami informacija apie tai, kaip scenarijus tikrina administratoriaus prieigą, nepatenka į šio straipsnio taikymo sritį, čia yra naudojamas demonstravimui naudojamas kodas:
jei (([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetInstart ()) IsInRole ([Security.Principal.WindowsBuiltInRole] "Administrator"))) (Write-Output "veikia kaip administratorius!"} Else {Write-Output 'Running Limited!'} Pause
Taip pat pastebėsite, kad dabar veikia du "Pauzės" veiksmai iš scenarijaus išvesties - vienas iš "PowerShell" scenarijų ir vienas iš paketinio failo. Kitas veiksmas bus akivaizdesnis kitame žingsnyje.
3 žingsnis. Administratoriaus prieigos suteikimas.
Deja, nėra jokio būdo sukelti UAC pakilimui iš paketinio failo ar CMD sesijos. Tačiau "PowerShell" tai leidžia mums tai padaryti "Start-Process". Kai jo argumentai naudojami su "-Verb RunAs", "Start-Process" bandys paleisti programą su administratoriaus leidimais. Jei "PowerShell" sesija dar nėra padidinta, tai suaktyvins UAC raginimą. Jei norite naudoti šį scenarijų paleidimo partijos rinkmeną, mes baigsime dviejų "PowerShell" procesų neršimą - vieną paleidžiant "Start-Process", o kitą - "Start-Process" paleidžiant scenarijų. Antroji serijinio failo eilutė turi būti pakeista taip:
PowerShell.exe -Command "& {Start-Process PowerShell.exe -ArgumentList'-ExecutionPolicy Bypass -File" "% ~ dpn0.ps1" " - Verb RunAs} "
Kai paleidžiamas paketinis failas, pirmoji išvesties eilutė, kurią matysime, yra iš" PowerShell "profilio scenarijaus. Tada UAC greitis bus, kai "Start-Process" bandys paleisti "MyScript.ps1".
Paspaudus UAC raginimą atsiras naujas "PowerShell" egzempliorius. Žinoma, tai yra naujas pavyzdys, mes vėl pamatysime pranešimą apie profilio scenarijų. Tada MyScript.ps1 paleidžiamas, ir mes matome, kad mes iš tiesų yra padidėjusi sesija.
Ir čia yra priežastis, dėl kurių mes taip pat turime dvi pauzes. Jei ne, tai scenarijaus "PowerShell" scenarijaus niekada nematysime scenarijaus išvesties - "PowerShell" langas tiesiog pasirodys ir išnyks, kai tik veiks scenarijus. Ir be paketo failo pauzės mes negalėsime pamatyti, ar iš pradžių buvo paleidžiamos "PowerShell" klaidos.
4 žingsnis. "PowerShell" profilių paieška.
PowerShell.exe -NoProfile -Command "& {Start-Process PowerShell.exe -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File" "% ~ dpn0.ps1" " -Verb RunAs} "
" -NoProfile "parametro pridėjimas abiejuose scenarijaus paleidžiamuose" PowerShell "variantuose reiškia, kad naudotojo profilio scenarijus bus visiškai apeinamas abiejuose etapuose ir" PowerShell "scenarijų bus vykdoma gana nuspėjama, numatytoji aplinka. Čia galite matyti, kad nė viename iš sukurtų kriauklių nėra nestandartinio profilio pranešimo.
Jei PowerShell scenarijų jums nereikia administratoriaus teisių ir praleidote 3 žingsnį, galite atlikti be antrojo "PowerShell" instancijos ir antroji jūsų serijos failo eilutė turėtų atrodyti taip:
PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "& '% ~ dpn0.ps1' '
Išvestis bus tokia:
( Žinoma, jei esate ne Administratoriaus scenarijų, tai galėtumėte atlikti be scenarijaus pabaigos scenarijų savo PowerShell scenarijuje, nes viskas yra užfiksuota toje pačioje konsolės lange ir ten laikoma pauze pabaigoje Bet kuriuo atveju paketinis failas.)
Užbaigti serijiniai failai.
Be administratoriaus prieigos:
@ECHO OFF PowerShell.exe -NoProfile -ExecutionPoli cy Bypass -Command "& '% ~ dpn0.ps1' 'PAUZĖ
Su administratoriaus prieiga:
@ECHO OFF PowerShell.exe -NoProfile -Command" & {Start-Process PowerShell.exe -ArgumentList' -NoProfile - ExecutionPolicy Bypass -File "% ~ dpn0.ps1 " "-Verb RunAs}" PAUZĖ
Nepamirškite įdėti serijos failą tame pačiame aplanke kaip ir "PowerShell" scenarijų, kurį norite jį naudoti, ir suteikite jam tą patį pavadinimą . Tada, nesvarbu, kokią sistemą naudosite šiems failams, galėsite paleisti savo "PowerShell" scenarijų, nenaudodami jokių saugumo nustatymų sistemoje. Jūs galėtumėte kiekvieną kartą atlikti šiuos pakeitimus rankiniu būdu, tačiau tai sutaupys jums šios bėdos, ir jums nereikės jaudintis dėl pakeitimų grąžinimo vėliau.
Nuorodos:
"PowerShell" scenarijų paleidimas iš paketinio failo - "Daniel Schroeder" programavimo dienoraštis
Kaip ištrinti rankraštinius pranešimus iš nesenų sąrašų "iOS 10" pranešimuose
Kai siunčiate rankomis pranešimą "iPhone" pranešimų programoje, jis pridedamas prie paskutinio pranešimų sąrašo, kad galėtumėte naudoti dar kartą. Tačiau jei nenorite, kad tam tikri sąraše saugomi pranešimai arba nenorite jų matyti apskritai, galite ištrinti juos. SUSIJUSIOS: Kaip siųsti ranka rašytus ir skaitmeninius pranešimus "iOS 10" versijoje Renkami rašytiniai pranešimai pasirodys skirtuke "Programos" skirtuke "Žinutės", todėl galite greitai siųsti bendrus pranešimus.
Kaip "Color Splash" nuotraukas "iOS", "Android" ir "PC"
"Color splash" efektas yra kietas foto efektas, kai vaizdas pirmą kartą paverčiamas juodos ir baltos spalvos, tada spalva grąžinama tam tikroms vaizdų dalims. Tai labai gerai veikia vaizduose, kuriuose yra daug ryškių spalvų, nes jis atrodo kur kas dramatiškas, kai likusio vaizdo elementas yra paverčiamas juodos ir baltos spalvos, o vienas elementas lieka spalvotas.Šiame stra