Home
» Windows
»
PowerShell un viss, kas jums jāzina par šo utilītu
PowerShell un viss, kas jums jāzina par šo utilītu
Ko darītu, ja jūsu dators varētu paveikt ikdienišķus uzdevumus jūsu vietā? Ar Windows PowerShell tas to var. Lūk, kā izmantot PowerShell, lai automatizētu atkārtotus, ikdienas uzdevumus, kurus neviens nevēlas veikt atkal un atkal.
Microsoft PowerShell ir komandrindas utilīta un skriptvaloda, kas ir spēcīgs rīks administratoriem, lai automatizētu plašu uzdevumu klāstu datoriem un tīkliem. PowerShell satur komandrindas komponentus un ir veidots uz .NET platformas. Ja lasāt par WebTech360, jums jāzina, ka PowerShell ir IT administratoru izvēles rīks lielu tīklu pārvaldībai.
Apgūstot PowerShell lietošanu, tiks vienkāršoti daudzi garlaicīgi ikdienas uzdevumi. Varat arī veikt izmaiņas visā sistēmā tīklā, nekonfigurējot katru serveri atsevišķi. PowerShell kļūst par būtisku hibrīdmākoņvides darbības sastāvdaļu .
PowerShell ir daudz dažādu pielietojumu, lai palīdzētu jums strādāt efektīvāk un uzturēt tīkla darbību. Visvienkāršākie pielietojumi ietver: ikdienas atjauninājumu plānošanu sistēmās, pārskatu ģenerēšanu par pašreizējiem procesiem, periodiskus pakalpojumus un citus. Lai gan daudzus no šiem uzdevumiem var veikt, izmantojot grafisko lietotāja saskarni, PowerShell mērķis ir tos paveikt ātrāk.
Ja jums ir jāveic regulārs apkopes uzdevums, kura iestatīšana aizņem dažas minūtes, varat to pašu funkcionalitāti skriptēt vienā komandā ar nosaukumu PowerShell. Pēc tam, nākamreiz atverot šo skriptu, tas darbosies fonā. PowerShell skriptēšanas loģikas apgūšana, objektu un mainīgo darbības izpratne un to inteliģenta izvietošana tīklā liks jums aizdomāties, kāpēc neizmantojāt PowerShell agrāk.
Šajā apmācībā tiks aplūkoti PowerShell pamati, kas būs noderīgi iesācējiem IT jomā, īpaši, ja esat iepazinies ar Windows komandrindu. Tajā tiks aprakstīts, kā lietot pamata rīkus un komandas, kā strādāt ar failiem un mapēm, kā izprast objektus, kā izmantot mainīgos un kā pārvaldīt attālinātos serverus.
Īsa Windows komandrindas utilītu vēsture
Pēc Windows NT izlaišanas CMD.EXE kļuva par Windows komandrindas utilītu. Lai gan CMD.EXE mantoja dažus elementus no sava DOS priekšgājēja (COMMAN.COM), tā joprojām bija balstīta uz diezgan “primitīvu” skriptvalodu: Windows komandu failu (.CMD un .BAT) izmantošanu. Windows Scripting Host un VBScript un JScript valodu pievienošana ievērojami uzlaboja utilītas skriptēšanas iespējas.
Šīs tehnoloģijas ir diezgan līdzsvarots uzlabotu komandrindas utilītu un skriptēšanas vides sajaukums. Īstā problēma nav tas, cik daudz CMD.EXE, .CMD un Windows Scripting Host failu var manipulēt ar tām. Galvenā sūdzība un bažas rada dažu šķietami vienkāršu uzdevumu paveikšana.
Izmantojot komandrindas un skriptēšanas rīku “ietvaru”, jebkuram mēreni visaptverošam skriptam ir nepieciešama pakeškomandu, Windows Scripting Host un atsevišķu izpildāmo failu kombinācija. Katrs skripts izmanto atšķirīgas konvencijas izpildei un pieprasījumiem, parsēšanai un datu atgriešanai.
Slikts mainīgo atbalsts CMD.EXE, nekonsekventas saskarnes un ierobežota piekļuve Windows iestatījumiem apvienojumā ar vēl vienu trūkumu apgrūtina komandrindas skriptu ieviešanu un lietošanu. Jūs varētu jautāt, kas ir šis "cits trūkums"? Tas ir teksts. Šajās tehnoloģijās viss ir teksts. Komandas vai skripta izvade ir teksts, un tā ir jāanalizē un jāpārformatē, lai tā darbotos kā ievade nākamajai komandai. Šis ir pamata sākumpunkts, ko PowerShell ņem no visām tradicionālajām čaulām.
Iepazīstinām ar PowerShell rīkiem, komandām un moduļiem
Šajā sadaļā ieviestie trīs jēdzieni ir tikai paši pamati, lai izprastu galvenos jēdzienus, kas veido PowerShell pamatu. Pieejot PowerShell komandām, jums būs jāpavada vairāk laika, apgūstot un apgūstot sarežģītākus jēdzienus.
PowerShell rīki
PowerShell pēc noklusējuma tiek instalēts operētājsistēmās Windows 10, Windows 7, Windows Server 2008 R2 un jaunākās Windows versijās. Jaunākās PowerShell versijās ir pievienotas jaunas funkcijas un "cmdlet" (Microsoft termins PowerShell komandām - izrunā "command-lets"), un tās tiek instalētas kopā ar atbilstošo Windows pārvaldības ietvara (WMF) versiju.
Pašlaik jaunākā ieteicamā versija ir WMF 5.1. Dažos gadījumos dažas jaunās funkcijas ir atkarīgas ne tikai no WMF versijas, bet arī no operētājsistēmas. Piemēram, Windows 8 un Windows Server 2012 atbalsta cmdlet Test-NetConnection, kas ļauj pārbaudīt savienojamību ar konkrētu TCP/IP portu , taču šī cmdlet nav pieejama operētājsistēmā Windows 7 pat tad, ja darbojas jaunākā WMF versija.
Vairumā Windows sistēmu lietotājiem ir pieejamas divas PowerShell vides: PowerShell konsole un PowerShell ISE (Integrētā skriptēšanas vide). PowerShell konsole izskatās kā tradicionāla komandrinda, taču tajā ir pilna PowerShell funkcionalitāte. PowerShell konsolē ir pieejami mainīgo nosaukumi, cikli, komandu automātiskā pabeigšana un cauruļveida skriptēšana.
Paplašinātākai lietošanai (piemēram, skriptēšanai) PowerShell ISE nodrošina komandu automātisko pabeigšanu, koda izcelšanu un Microsoft Intellisense koda pabeigšanu, lai palīdzētu jums izveidot un testēt PowerShell kodu. PowerShell ISE arī ļauj vienlaikus strādāt ar vairākiem PowerShell skriptiem, izmantojot cilnes navigāciju.
cmdlet programmā PowerShell
PowerShell komandu pamatā ir cmdlet. Veidojot cmdlet PowerShell, Microsoft izmantoja vairākas dizaina stratēģijas.
Pirmkārt, tā ir spēja viegli secināt cmdlet nosaukumus vai vismaz padarīt tos vieglāk atrodamus. PowerShell komandas vai cmdlet ir arī izstrādātas tā, lai tās būtu vieglāk lietot, izmantojot standartizētu sintaksi, kas atvieglo skriptu izveidi no komandrindas saskarnes.
cmdlet izmanto darbības vārda-lietvārda formātu, piemēram, Get-Service, Stop-Service vai Import-Csv. Cmdlet nosaukuma darbības vārda daļa norāda darbību, kas veikta ar lietvārdu. Parasti cmdlet, kas tiek izmantotas informācijas izgūšanai, nosaukumā ir darbības vārds Get , piemēram, Get-Process vai Get-Content . Komandas, ko izmanto, lai kaut ko modificētu, parasti sākas ar darbības vārdu Set , un komandas, ko izmanto, lai kaut kam pievienotu jaunu entītiju, parasti sākas ar Add vai New .
Otrkārt, PowerShell parasti izmantotajiem parametriem ir arī standartizēti nosaukumi. Piemēram, parametrs -ComputerName ļauj cmdlet izpildīt vienā vai vairākos attālos datoros. -Credential tiek izmantots, lai nodrošinātu autentifikācijas objektu, kas satur lietotāja akreditācijas datus, lai palaistu komandu kā konkrēts lietotājs.
Moduļi programmā PowerShell
Varat izmantot aizstājvārdus gan cmdlet, gan parametriem, lai ietaupītu taustiņsitienu skaitu un saīsinātu komandas kopējo garumu (noderīgi, ja ķēdē apvienojat vairākas komandas). Lai gan šie aizstājvārdi ne vienmēr izmanto standarta nosaukumu piešķiršanas konvencijas, tie joprojām atspoguļo tradicionālās komandrindas utilītas.
PowerShell programmā tādi aizstājvārdi kā DIR, CD, DEL un CLS atbilst attiecīgi Get-ChildItem, Set-Location, Remove-Item un Clear-Host cmdlet. Parametru aizstājvārdi var darboties divos veidos: tie var izmantot cmdlet nodrošināto iepriekš definēto aizstājvārdu vai arī tiem var piešķirt aizstājvārdu, ievadot pietiekami daudz rakstzīmju, lai izveidotu unikālu atbilstību starp cmdlet atbalstītajiem parametriem.
Failu un mapju pārvaldība
Lielākajai daļai sistēmu administratoru darba gaitā ir jādarbojas ar failiem un mapēm, neatkarīgi no tā, vai tā ir mapes pārvietošana uz citu atrašanās vietu serverī, žurnālfailu arhivēšana vai lielu failu meklēšana. Gadījumos, kad vienas un tās pašas darbības tiek atkārtotas ar daudziem failiem, PowerShell izmantošana to automatizēšanai būs efektīvs laika taupīšanas risinājums.
Lai atrastu failus un mapes, viens no pirmajiem komandrindas rīkiem, ko administrators apguva vecajos datortehnikas laikos, bija komanda dir. Dir parādīs norādītajā direktorijā esošo failu un mapju sarakstu.
PowerShell ir līdzīga komanda Get-ChildItem cmdlet formā . Get-ChildItem ļauj ātri izveidot failu sarakstu direktorijā tā, lai jūs varētu manipulēt ar failiem, izmantojot caurules komandu, vai piešķirt izvadi mainīgajam.
Funkciju Get-ChildItem var izmantot, vienkārši norādot ceļu, izmantojot parametru -Path vai tieši aiz cmdlet nosaukuma. Lai modificētu Get-ChildItem atgriezto atbildi, ir jāņem vērā daži cmdlet pieejamie parametri.
Parametrs -Filter ir viens no failu meklēšanas veidiem. Pēc noklusējuma Get-ChildItem atgriež tikai mērķa direktorija tiešos bērnus. Šo funkcionalitāti var paplašināt, izmantojot parametru -Recurse , kas rekursīvi meklē direktorijus, kas atrodas pašreizējā direktorijā.
PowerShell 4.0 versijā Get-ChildItem pievienoja iespēju ierobežot rezultātus ar failiem vai direktorijiem, izmantojot slēdzi –File vai –Directory . Iepriekšējās PowerShell versijās rezultāti bija jānodod Where-Object, filtrējot pēc PSIsContainer rekvizīta, lai veiktu šo noteikšanu. Šeit ir parādīts abu metožu piemērs, kas tiek izmantotas, lai atgrieztu direktorijus, kas atrodas C:Users:
Lai noteiktu slēptus vai sistēmas failus, jāizmanto -Force . Get-ChildItem PowerShell 4.0 un jaunākās versijās var izmantot arī, lai atgrieztu tikai slēptus, tikai lasāmus vai sistēmas failus, izmantojot attiecīgi -Hidden, -ReadOnly un –System . Līdzīgu funkcionalitāti iepriekšējās versijās varēja panākt, filtrējot Mode īpašību, izmantojot Where-Object:
Parasti, strādājot ar failiem, viss, kas mums jāzina, ir tas, vai fails pastāv un vai direktorija ceļš ir derīgs. PowerShell nodrošina cmdlet, lai to izdarītu, Test-Path formā, kas atgriež vērtību true vai false.
Testa ceļš tiek izmantots kā piesardzības pasākums pirms konkrēta faila kopēšanas vai dzēšanas.
Failu kopēšana, pārvietošana un dzēšana
Kopēšanas vienums: Kopē vienu vai vairākus failus vai direktorijus no atrašanās vietas, kas norādīta ar parametru -Path, uz atrašanās vietu, kas norādīta ar opciju -Destination.
Pārvietot vienumu: Pārvietot failu vai mapi.
Kopējot vai pārvietojot direktoriju struktūru, jāizmanto komanda -Recurse , lai cmdlet veiktu darbību ar direktoriju un tā saturu. Dažos gadījumos ir nepieciešama arī komanda -Force , piemēram, ja kopēšanas darbība pārraksta tikai lasāmu failu.
Noņemt vienumu: Dzēst failu, mapi.
Slēdzis -Force jāizmanto, ja rodas tikai lasāms fails, un -Recurse jāizmanto, ja tiek dzēsts direktorijs un tā saturs.
Izmantojot PowerShell -WhatIf un -Confirm
Pirms nopietnas, masveida dzēšanas veikšanas izmantojiet -WhatIf . -WhatIf ļauj redzēt, kas notiktu, ja palaistu skriptu vai komandu, un vai tam būtu potenciāla negatīva ietekme, dzēšot svarīgus biznesa datus. Ir arī vērts atzīmēt, ka -WhatIf neaprobežojas tikai ar failu operācijām, to plaši izmanto PowerShell.
Skriptiem, kurus plānojat palaist manuāli vai, vēl ļaunāk, kuriem ir atkarīgas komandas, kas tiek palaistas manuāli, apsveriet iespēju izmantot -Confirm . Tas ļauj pieprasīt lietotāja mijiedarbību, pirms darbība faktiski notiek.
PowerShell skripti = partijas faili steroīdos
Pats PowerShell ir rakstīts .NET valodā un lielā mērā balstās uz .NET Framework. Tādējādi PowerShell ir izstrādāts kā objektorientēta čaula un skriptvaloda. Viss PowerShell tiek uzskatīts par objektu ar pilnām .NET Framework iespējām. Komanda atklāj objektu kolekciju, ko var izmantot, izmantojot šī objekta tipa īpašības un metodes. Ja vēlaties nodot vienas komandas izvadi citai, PowerShell faktiski nodod objektu, nevis tikai pirmās komandas teksta izvadi. Tas dod nākamajai komandai pilnīgu piekļuvi visām objekta īpašībām un metodēm cauruļvadā.
Visu uztvert kā objektu un spēt pieņemt objektus starp komandām ir lielas izmaiņas komandrindas utilītu teorijā. Tomēr PowerShell joprojām darbojas kā tradicionāls apvalks. Komandas, skriptus un izpildāmos failus var ierakstīt un palaist no komandrindas, un rezultāti tiek parādīti kā teksts. Windows .CMD un .BAT faili, VBScripts, JScripts un izpildāmie faili, kas darbojas CMD.EXE iekšpusē, joprojām darbojas PowerShell. Tomēr, tā kā tie nav objektorientēti, tiem nav pilnīgas piekļuves objektiem, kas izveidoti un izmantoti PowerShell. Šie mantotie skripti un izpildāmie faili joprojām visu apstrādās kā tekstu, taču PowerShell var apvienot ar vairākām citām tehnoloģijām. Tas ir īpaši svarīgi, ja vēlaties sākt lietot PowerShell ar esošo skriptu kolekciju, kuru nevar konvertēt visus uzreiz.
PowerShell parametru skaidrojums
Cmdlet var pieņemt parametrus, lai mainītu to darbību. Palaižot cmdlet vai funkciju, varat norādīt parametru vērtības, lai norādītu, kas, kad, kur un kā tiek izpildīta katra PowerShell komanda.
Piemēram, Get-Process izgūs un uzskaitīs visus jūsu operētājsistēmā darbojošos procesus:
Get-Process uzskaita visus darbojošos procesus.
Bet ko darīt, ja vēlaties iegūt tikai konkrētu procesu? To var izdarīt, izmantojot parametrus. Piemēram, lai iegūtu visus Slack procesus, varat izmantot parametru Name ar Get-Process cmdlet:
Get-Process -Name Slack
Tad jūs redzēsiet tikai procesus ar nosaukumu "slack":
Izmantojot Get-Process ar parametriem
Padoms . Daži parametri ir “pozicionāli”, kas nozīmē, ka to nosaukumi nav obligāti. Šajā gadījumā gan Get-Process -Name Slack , gan Get-Process Slack veic vienu un to pašu uzdevumu.
Katra cmdlet pieņems dažāda veida parametrus. Izmantojiet komandu Get-Help, lai skatītu cmdlet pieņemtos parametrus sintakses sadaļā.
Get-Help Get-Process
Jūs redzēsiet visu iespējamo veidu sarakstu, kā varat palaist doto cmdlet:
cmdlet sintakses parametri
Šajā gadījumā Get-Process cmdlet pieņem tādus parametrus kā Name, Id, ComputerName, Module, FileVersionInfo un citus bieži lietotus parametrus. Šeit izmantoto simbolu nozīme ir šāda:
Simbols
Vārds
Nozīme
Bungas
Parametrs nepieņem ievadi
-
Defise
Norādiet parametra nosaukumu
<>
cirtainās iekavas
Vietturis tekstam
[]
Iekavas
Parametrs var pieņemt vienu vai vairākas vērtības.
{}
cirtainās iekavas
Parametrs pieņem vērtību kopu.
Parametri pieņem vērtību kopu, kas norāda nepieciešamo datu veidu, piemēram, virkni, veselu skaitli, loģisku vērtību vai datumu/laiku. Piemēram, šāda komanda:
Get-Process [[-Name] ]
... nozīmē, ka parametrs Name pieņem vienu vai vairākas virknes vērtības, savukārt šī komanda:
Get-Process -Id
... nozīmē, ka Id parametrs pieņem vienu vai vairākas veselu skaitļu vērtības.
Iepriekšējā Get-Process piemērā rezultātu sašaurināšanai tika izmantots parametrs Name. Tomēr, ja vēlaties sašaurināt rezultātu līdz konkrētākam procesam, varat izmantot parametru ID , kam ir nepieciešams vesels skaitlis, kā norādīts tā sintaksē.
Get-Process -Id 3016
Tad sarakstā redzēsiet tikai vienu procesu:
Id parametra izmantošana cmdletos
Izveidot cauruļvadu
PowerShell apstrādā visus datus kā objektus. Lai izveidotu skriptu, šie objekti tiek palaisti, izmantojot virkni cmdlet vai funkciju, kas savienotas, izmantojot vertikālo līniju (|). Lai skripts darbotos efektīvi, ir svarīgi izvēlēties pareizās cmdlet un savienot tās loģiskā secībā, izmantojot cauruļvadu.
Pieņemsim, ka veidojat skriptu, lai kārtotu un parādītu 5 failus, kas direktorijā aizņem visvairāk vietas. Ir arī jaudīgāki veidi, kā uzrakstīt failu kārtošanas skriptu, taču šo vienkāršo ir viegli saprast:
Skripts Sort-LargeFiles PS1
Lai to izdarītu programmā PowerShell, izmantojiet cauruļvadu, kas izskatās šādi:
Tagad, kad mums ir darbojošs cauruļvads, varat to saglabāt kā PS1 skripta failu, lai tas nebūtu jāimportē katru reizi, kad to lietojat.
Vienkāršākais veids, kā izveidot PS1 failu, ir ielīmēt skriptu Notepad un saglabāt failu ar .ps1 paplašinājumu.
Izveidojiet skriptu, izmantojot Notepad
Kad esat izveidojis PS1 failu, varat to izmantot programmā PowerShell, palaižot ./ScriptName.ps1 :
Izmantojot PS1 skriptu
Padoms . Ja rodas atļauju kļūda, ātrākais risinājums ir palaist PowerShell ar administratora tiesībām, palaižot skriptu.
Apsveicam! Tagad varat izveidot PowerShell PS1 skriptus.
PowerShell skripta piemērs
Lasīt par jaunām tehnoloģijām un izprast to lielisko pusi ir viena lieta, bet to praktiska izmantošana – pavisam cita! Pārējā šī raksta daļā mēs izstrādāsim PowerShell skriptu, lai demonstrētu to iespējas un lietošanas pamācību.
DIR ir viena no visbiežāk izmantotajām komandām CMD.EXE . Šī komanda parāda visus failus un apakšdirektorijus, kas atrodas vecākdirektorijā (kā parādīts 1. attēlā). Papildus katra objekta nosaukumam sniegtā informācija ietver pēdējās atjaunināšanas datumu un laiku, kā arī katra faila lielumu. DIR parāda arī visu direktorijā esošo failu kopējo lielumu, kā arī kopējo failu un apakšdirektoriju skaitu.
1. attēls
Palaižot DIR programmā PowerShell, arī tiek ģenerēts direktoriju saraksts, kā parādīts 2. attēlā, bet nedaudz citādā veidā. PowerShell nav DIR komandas, bet tā vietā ir Get-ChildItem, kas veic to pašu funkciju. PowerShell programmā DIR ir Get-ChildItem aizstājvārds. Šajā rakstā es neplānoju iedziļināties aizstājvārdos. DIR programmā PowerShell var uzskatīt par Get-ChildItem saīsinājumu.
DIR failā PowerShell sniedz lielu daļu no iepriekš minētās informācijas: failu un mapju sarakstu, to pēdējās modificēšanas datumu un laiku, kā arī katra faila lielumu. Tomēr tajā trūkst kopsavilkuma informācijas, ko sniedz DIR failā CMD.EXE: visu mapē esošo failu kopējo lielumu, kopējo failu skaitu un kopējo apakšmapju skaitu.
2. attēls
Piemēra scenārijam jums būs jāizveido PowerShell skripts, kas simulē komandu CMD.EXE DIR. Zemāk es paskaidrošu skripta svarīgākās daļas.
DIR.PS1: Galvene
PowerShell skripts sastāv no PowerShell komandām vienkāršā teksta failā ar paplašinājumu .PS1. DIR vietā jāizmanto teksta fails ar nosaukumu DIR.PS1.
Lai palaistu skriptu, PowerShell ekrānā ierakstiet šādu komandu:
.DIR.PS1 X:Folder
Kur X ir diska nodalījuma burts (piemēram, C, D, E), un Folder ir mapes nosaukums.
Ja vēlaties uzzināt informāciju par diska nodalījumu, jums būs jāizmanto Windows pārvaldības instrumentācija (WMI). WMI detaļas neietilpst šī raksta tvērumā, tāpēc mēs tās šeit neaplūkosim. Taču tālāk redzamo PowerShell kodu ir pietiekami viegli saprast, neizmantojot WMI. Varat izveidot mainīgo “$filter”, ko izmantot ar komandu Get-WmiObject. Šis filtrs norāda komandai Get-WmiObject, ka vēlaties iegūt informāciju tikai par konkrētu disku. Komandas Get-WmiObject rezultāti tiek glabāti mainīgajā ar nosaukumu $volInfo. Atcerieties, ka programmā PowerShell viss ir objekts; $volInfo tagad ir objekts, ko atgriež komanda Get-WmiObject.
Tagad jums ir piekļuve visiem objektiem un metodēm, kas saistītas ar objektu. Sējuma sērijas numurs ir pieejams, izmantojot īpašību VolumeSerialNumber. Atgrieztais numurs ir 8 rakstzīmju virkne. Taču bieži vien to vēlēsities formatēt kā četrus skaitļus, atdalītus ar defisi. To var izdarīt līdzīgi kā nākamajā rindā. Defise pirmās rindas beigās ir rindas turpinājuma rakstzīme programmā PowerShell. Tā būtībā norāda PowerShell, ka rinda nepārtrūkst un ka tā ietver nākamo rindu. Rindu pārtraukumi nav nepieciešami, rakstot kodu, taču, lai samazinātu platumu un padarītu kodu lasāmāku, tas jādara.
Tagad, kad jums ir $volInfo objekts, varat ierakstīt DIR galvenes informāciju ekrānā. Ja diskam nav nosaukuma, ekrānā ierakstītais teksts nedaudz atšķirsies no teksta, ja diskam ir nosaukums. Vienkāršs If-Else priekšraksts tiek izmantots, lai pārbaudītu, vai VolumeName īpašība ir tukša virkne. Write-Host priekšraksts tiek izmantots, lai katru teksta rindiņu ierakstītu ekrānā.
If ($volInfo.VolumeName -eq "") { Write-Host (" Volume in drive " + $drive + " has no label") } Else { Write-Host (" Volume in drive " + $drive + " is " + $volInfo.VolumeName) } Write-Host (" Volume Serial Number is " + $serial) Write-Host ("`n Directory of " + $args[0] + "`n")
Rakstzīme “`n” komandas Write-Host sākumā un beigās tiek izmantota, lai ievietotu jaunu rindu pirms un pēc teksta. Write-Host komanda pievieno jaunu rindu katras rindiņas beigās. Tātad “`n” efekts ir tukšas rindas izveidošana pirms un pēc teksta.
Vai pamanījāt “-eq” komandā If? Tas ir vienādības salīdzināšanas operators. Zemāk esošajā tabulā ir parādīti visi salīdzināšanas operatori:
-eq, -ieq
Salīdzināt pēc
-nē, -īns
Salīdzinājums nav vienāds
-gt, -igt
Salīdzināt lielāks nekā
-ge, -ige
Salīdzināt ar lielāku vai vienādu ar
-lt, -ilt
Salīdzināt mazāku nekā
-le, -ile
Salīdzināt ar mazāku vai vienādu ar
Rakstzīme -i pirms salīdzināšanas operatoriem norāda, ka operators nav reģistrjutīgs.
3. attēls: Jūsu pašreizējā skripta izvades dati
DIR.PS1: Failu/mapju saraksts
Tagad jūs esat gatavs parādīt šīs mapes saturu un rekvizītus. Vispirms jāizsauc PowerShell komanda Get-ChildItem, lai iegūtu failu kolekciju un nodotu to skriptam kā parametru. Komanda Get-ChildItem iegūs failu un mapju objektu kolekciju, ne tikai to nosaukumus, bet arī tieši nodos šos objektus komandai Sort-Object, lai tos kārtotu. Pēc noklusējuma komanda Sort-Object kārtos objektus, pamatojoties uz īpašību Name. Tāpēc nav jānorāda citi parametri. Sakārtotā objektu kolekcija pēc tam tiks saglabāta mainīgajā ar nosaukumu $items.
$items = Get-ChildItem $args[0] | Sort-Object
Kad ir izveidota failu un mapju objektu kolekcija, tie ir jāapskata cikliski, lai parādītu atbilstošās īpašības. Šim nolūkam tiek izmantota komanda ForEach. Katram failam vai mapei parādītās īpašības būs pēdējās modificēšanas datums un laiks, nosaukums, garums vai faila lielums. Dīvaini izskatīgās virknes iekavās ir .NET virkņu formāta kodi. Tie tiek izmantoti, lai izlīdzinātu laukus pa kreisi/pa labi un formatētu datumus, laikus un skaitļus. Šo virkņu formāta kodu izpratne nav īpaši svarīga, jo tie nav būtiski šī skripta būtībai.
Ja priekšraksts nosaka, vai objekts ir direktorijs vai nē. Ja Mode atribūta pirmais simbols ir “d”, objekts ir direktorijs. Jums tas ir jāpārbauda vēlreiz, jo direktoriju kods bieži vien atšķiras no failu koda.
Ievērojiet rindiņu $totalDirs++ priekšrakstā If. Šis ir skaitītājs, kas atbild par direktoriju skaita izsekošanu. Līdzīgi ir mainīgais $totalFiles, kas tiek izmantots, lai izsekotu visu failu kopējo lielumu. Šīs vērtības vienmēr tiek aprēķinātas izpildes laikā. Bet tās tiek parādītas tikai tad, kad failu saraksta veidošanas process ir pabeigts.
Atliek tikai uzrakstīt ekrānā kopējo failu un direktoriju skaitu, visu failu kopējo izmēru un brīvo vietu šajā diska nodalījumā. Lai to izdarītu, jums būs jāizmanto iepriekšējā sadaļā izveidotie skaitītāja mainīgie ($totalFiles, $totalDirs, $totalSize). Brīvās vietas daudzumu var uzzināt no $volInfo mainīgā, kas izveidots skripta sākumā.
Lai gan jūsu izveidotais skripts ģenerē gandrīz identisku izvadi kā komanda CMD.EXE DIR, pastāv daži brīdinājumi, kas jums jāzina, un daži uzlabojumi, ko var veikt.
Šis skripts neveic nekādu kļūdu pārbaudi.
Ja skriptam netiek nodots derīgs ceļš, skripts neizdosies ar PowerShell kļūdas ziņojumu.
Skriptā norādītais direktoriju kopskaits ir par 2 mazāks nekā CMD.EXE DIR komandas rezultāts, jo Get-ChildItem komanda neskaita divus direktorijus “.” un “..”, kā tas ir CMD.EXE failā.
Jūsu skripts kārto tikai pēc faila nosaukuma, mapes nosaukuma un nenodrošina nekādu citu kārtošanu pēc atribūtiem.
Jūsu skripts nespēj parādīt mapes un visu apakšmapju saturu.
Kā PowerShell palīdz automatizēt jebko datorā
Rakstiet vienkāršus PowerShell skriptus
PowerShell var izmantot gandrīz jebkā automatizēšanai, piemēram, failu partijveida pārdēvēšanai konsekvences nodrošināšanai vai lietojumprogrammu automātiskai palaišanai. Uzrakstīsim dažus vienkāršus Windows PowerShell skriptus, lai redzētu, kā tas darbojas.
Piezīme . Ja, izpildot skriptu, rodas kļūda saistībā ar izpildes politiku, iespējams, būs īslaicīgi jāatļauj skripta izpilde, palaižot komandu "Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass".
Failu partijas pārdēvēšana mapē
Varat izmantot PowerShell, lai kopētu, pārvietotu un dzēstu failus savā datorā. Varat arī vairumā pārdēvēt noteikta veida failus. Piemēram, lūk, kā varat pārdēvēt vairākus teksta failus, aizstājot prefiksu "oldco" ar "newco" to failu nosaukumos:
Iepriekš minētajā skriptā faila paplašinājuma filtrs ir ".txt". To var modificēt un iestatīt uz .jpg, .docx utt., lai meklētu dažāda veida failus.
Automātiski palaist lietojumprogrammu
Ja katru dienu atverat vienu un to pašu lietojumprogrammu komplektu, varat uzrakstīt PowerShell skriptu, lai tās palaistu ar vienu klikšķi:
#Open multiple apps with a single click
Start-Process "notepad.exe"
Start-Process "calc.exe"
Start-Process "Chrome.exe"
Start-Process "slack.exe"
Ielīmējiet skriptu Notepad failā un saglabājiet to kā LaunchFavoriteApps.ps1. Pēc tam vienkārši veiciet dubultklikšķi uz faila, lai palaistu visas skriptā uzskaitītās lietotnes.
Svarīgu failu kopēšana uz dublējuma atrašanās vietu
Svarīgus failus var periodiski dublēt dublēšanas vietā, izmantojot šo skriptu. Noteikti mainiet avota un mērķa ceļus pēc nepieciešamības:
#Copy MyFiles folder contents to MyFilesBackup in D:\
Copy-Item -Path "C:\Documents\MyFiles" -Destination "D:\MyFilesBackup" -Recurse
Uzrakstiet PowerShell skriptu, lai katru dienu automātiski sakārtotu failus
Tā kā katru dienu tiek lejupielādēti daudzi failu veidi, mape “Lejupielādes” var ātri kļūt pārblīvēta ar visādiem izmētātiem failiem. Lai to labotu, varam uzrakstīt PowerShell skriptu, kas katras dienas beigās sakārto lejupielādētos failus mapēs pēc failu tipa.
Atveriet jaunu Notepad failu un ielīmējiet šo skriptu. Noteikti nomainiet avota mapes ceļu skriptā, lai tas atbilstu lejupielāžu mapes ceļam:
# Change the source folder path below
$sourcePath = "E:\Downloads"
# Add file mapping folder names; the Others folder includes all the files that do not match file types in the other categories
$fileTypes = @{
"Documents" = @("*.docx", "*.pdf", "*.txt")
"Images" = @("*.jpg", "*.png", "*.gif")
"Media" = @("*.mp4", "*.mp3", "*.mov")
"Zip" = @("*.zip", "*.rar")
"ISO" = @("*.iso")
"Others" = @("*")
}
# Iterate through each folder type and prepare a destination folder for organizing files
foreach ($folder in $fileTypes.Keys) {
# Create the destination folder path
$destPath = Join-Path -Path $sourcePath -ChildPath $folder
# Check if the destination folder exists, and create it if it doesn't
if (!(Test-Path -Path $destPath)) {
New-Item -ItemType Directory -Path $destPath | Out-Null
}
# Move matching files from the source folder to the destination folder based on file type patterns
foreach ($pattern in $fileTypes[$folder]) {
Get-ChildItem -Path $sourcePath -Filter $pattern -File -ErrorAction SilentlyContinue | ForEach-Object {
try {
Move-Item -Path $_.FullName -Destination $destPath -Force -ErrorAction Stop
Write-Output "Moved: $($_.FullName) to $destPath"
} catch {
Write-Warning "Failed to move file: $($_.FullName). Error: $_"
}
}
}
}
Write-Output "Files organized successfully!"
Lai saglabātu failu, noklikšķiniet uz Fails > Saglabāt kā un ievadiet faila nosaukumu OrganizeDownloadsFolder.ps1 . Pēc tam noklikšķiniet uz Saglabāt kā tipu un atlasiet Visi faili . Veiciet dubultklikšķi uz faila OrganizeDownloadsFolder.ps1 , lai palaistu skriptu.
Plānojiet un izpildiet uzdevumus
Protams, skripta rakstīšana ir viena no automatizācijas procesa daļām. Otra daļa ir nodrošināt, lai skriptu varētu automātiski izpildīt uzdevuma veikšanai. Lai to izdarītu, mēs varam izveidot ieplānotus uzdevumus, lai skripts tiktu palaists katru dienu vai pēc nepieciešamības.
Atveriet PowerShell, pēc tam nokopējiet un ielīmējiet tālāk norādīto skriptu un nospiediet taustiņu Enter . Noteikti aizstājiet 'J:\OrganizeDownloadsFolder.ps1' ar pilnu faila ceļu uz jūsu OrganizeDownloadsFolder.ps1 skriptu.
Kad tas ir izdarīts, nospiediet taustiņu Enter . Skripts uzdevumu plānotājā izveidos ieplānotu uzdevumu, lai katru dienu plkst. 17:00 palaistu failu sakārtošanas skriptu. Ja vēlaties citu laiku, varat to modificēt iepriekš minētajā skriptā.
Turklāt PowerShell var izmantot, lai automatizētu citus ikdienas uzdevumus, piemēram, vietas uzraudzības skriptu, kas brīdina, kad galvenajā diskā beidzas brīva vieta, PDF dokumentu partiju aizsardzību ar paroli un pat tiešraides fona attēlu lietošanu no attēlu mapes.
Lai gan PowerShell ir jaudīga utilītu un skriptvaloda, tās izpratnei un lietošanai nepieciešams nedaudz laika, it īpaši, ja neesat pazīstams ar .NET Framework vidi. Ceru, ka šis raksts un skripta piemērs būs noderīgi ikvienam, kurš vēlas izprast PowerShell. Taču rakstā izveidotais skripta piemērs ir diezgan vienkāršs. Uzskatu, ka to var veidot un attīstīt pilnīgāk, lai tas kalpotu sarežģītākām lietojumprogrammām.