Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Derketina nivîsê ya fermanan di pencereya wergêrê PowerShell de tenê rêyek e ku agahdariya bi rengek guncan ji têgihîştina mirovan re nîşan bide. Bi rastî roja Çarşemê oriented bi hêmanan re bixebitin: cmdlet û fonksiyon wan wekî têketinê distînin û li dergehê vegeriya, û cureyên guhêrbar ên ku bi înteraktîf û bi tîpan peyda dibin li ser çînên .NET-ê ne. Di gotara çaremîn a rêzenivîsê de, em ê bi hûrgulî xebata bi tiştan re lêkolîn bikin.

Tabloya naverokê:

Tiştên di PowerShell de
Dîtina avahiya tiştan
Parzûnkirina tiştan
Cûrtkirina tiştan
Hilbijartina tiştan û parçeyên wan
Ji boHer-Object, Kom-Object û Measure-Object
Çêkirina tiştên .NET û COM (New-Object)
Banga Rêbazên Statîk
PSCustomObject binivîsin
Çînên Xwe Diafirînin

Tiştên di PowerShell de

Werin em bînin bîra xwe ku obje berhevokek ji zeviyên daneyê (taybetî, bûyer, hwd.) û rêbazên ji bo hilanîna wan (rêbaz) e. Struktura wê ji hêla celebek ve tête diyar kirin, ku bi gelemperî li ser çînên ku di platforma yekbûyî .NET Core de têne bikar anîn ve girêdayî ye. Her weha gengaz e ku meriv bi tiştên COM, CIM (WMI) û ADSI re bixebite. Ji bo pêkanîna çalakiyên cihêreng ên li ser daneyan, taybetmendî û rêbaz hewce ne; ji bilî vê, di PowerShell de, tişt dikarin wekî arguman ji fonksiyon û cmdlets re werin derbas kirin, nirxên xwe ji guhêrbaran re werin veqetandin, û her weha heye. mekanîzmaya pêkhatina fermanê (veguhêz an lûle). Her fermanek di lûleyê de, bi dorê, tişt bi obje, derenca xwe ji ya din re derbas dike. Ji bo pêvajoyê, hûn dikarin cmdletên berhevkirî bikar bînin an jî yên xwe biafirînin taybetmendiyên pêşketîji bo pêkanîna manîpulasyonên cihêreng bi tiştên di boriyê de: Parzûnkirin, veqetandin, komkirin, û tewra guheztina strukturên wan. Veguheztina daneyan bi vê formê xwedan avantajek ciddî ye: tîmê wergir ne hewce ye ku tîra baytê (nivîsarê) pars bike, hemî agahdariya pêwîst bi gazîkirina taybetmendî û rêbazên guncan bi hêsanî têne wergirtin.

Dîtina avahiya tiştan

Mînakî, em werin cmdlet-a Get-Process bimeşînin, ku dihêle hûn di derheqê pêvajoyên ku di pergalê de têne meşandin de agahdarî bistînin:

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Ew ê hin daneyên nivîsê yên formatkirî nîşan bide ku di derheqê taybetmendiyên tiştên vegerî û rêbazên wan de ti ramanek nade. Ji bo başkirina encam, divê em fêr bibin ka meriv çawa avahiya tiştan lêkolîn dike, û cmdlet Get-Member dê di vê yekê de ji me re bibe alîkar:

Get-Process | Get-Member

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Li vir em berê celeb û avahî dibînin, û bi alîkariya pîvanên din em dikarin, mînakî, tenê taybetmendiyên tiştê ku di têketinê de tê de hene nîşan bidin:

Get-Process | Get-Member -MemberType Property

Ev zanyarî dê ji bo çareserkirina pirsgirêkên rêveberiyê bi înteraktîf an nivîsandina nivîsarên xwe hewce bike: Mînakî, ji bo bidestxistina agahdariya li ser pêvajoyên darvekirî bi karanîna taybetmendiya Bersiv.

Parzûnkirina tiştan

PowerShell dihêle ku tiştên ku şertek diyarkirî pêk tînin di boriyekê re derbas bibin:

Where-Object { блок сценария }

Encama pêkanîna bloka skrîptê ya di nav parantezê de divê nirxek boolean be. Ger rast be ($true), tiştê ku têxe nav Cmdleta Where-Object dê li ser boriyê derbas bibe, wekî din ($ xelet) ew ê were jêbirin. Mînakî, em navnîşek karûbarên Windows Servera rawestayî nîşan bidin, yanî. yên ku taybetmendiya Rewşa wan wekî "Rawestiya" hatî danîn:

Get-Service | Where-Object {$_.Status -eq "Stopped"}

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Li vir dîsa em nûnertiyek nivîsê dibînin, lê heke hûn dixwazin celeb û avahiya hundurîn a tiştên ku di boriyê re derbas dibin fam bikin, ne dijwar e:

Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Cûrtkirina tiştan

Dema ku bi xeta boriyê ya tiştan têne hilberandin, pir caran hewcedarî bi veqetandina wan heye. Cmdlet Sort-Object navên taybetmendiyan (bişkojkên birêkûpêk) tê derbas kirin û tiştên ku li gorî nirxên wan hatine rêzkirin vedigerîne. Rêzkirina hilberîna pêvajoyên xebitandinê li gorî dema derbasbûyî ya CPU-yê (mulkê cpu) hêsan e:

Get-Process | Sort-Object –Property cpu

Dema ku tê gazîkirina Sort-Object cmdlet dibe ku pîvana -Property were jêbirin; ew ji hêla xwerû ve tê bikar anîn. Ji bo verastkirina berevajî, parametreya -Descending bikar bînin:

Get-Process | Sort-Object cpu -Descending

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Hilbijartina tiştan û parçeyên wan

Hilbijêre-Object cmdlet dihêle hûn bi karanîna pîvanên -First an -Last-ê hejmarek taybetî li destpêk an dawiya boriyekê hilbijêrin. Bi alîkariya wê, hûn dikarin tiştên yekane an hin taybetmendiyan hilbijêrin, û li ser bingeha wan jî tiştên nû biafirînin. Ka em binihêrin ka cmdlet çawa bi karanîna mînakên hêsan dixebite.

Fermana jêrîn agahdariya li ser 10 pêvajoyên ku herî zêde mîqdara RAM-ê (taybetmendiya WS) dixwe nîşan dide:

Get-Process | Sort-Object WS -Descending | Select-Object -First 10

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Hûn dikarin tenê hin taybetmendiyên tiştên ku di boriyê re derbas dibin hilbijêrin û li ser bingeha wan yên nû biafirînin:

Get-Process | Select-Object ProcessName, Id -First 1

Di encama xebata boriyê de, em ê hêmanek nû bistînin, ku strukturê wê ji avahiya ku ji hêla Get-Process cmdlet ve hatî vegerandin cûda dibe. Ka em vê bi karanîna Get-Member verast bikin:

Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Bala xwe bidinê ku Hilbijêre-Object yek tişt vedigerîne (-Yekemîn 1) ku tenê du ji qadên ku me diyar kirine hene: nirxên wan ji yekem tiştê ku ji hêla Get-Process cmdlet ve di nav boriyê de derbas bûye hatine kopî kirin. Yek ji awayên afirandina tiştan di nivîsarên PowerShell de li ser bingeha karanîna Hilbijartin-Object e:

$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Bi karanîna Hilbijartin-Object, hûn dikarin taybetmendiyên hesabkirî li tiştên ku hewce ne wekî bêne destnîşan kirin zêde bikin maseyên hash. Di vê rewşê de, nirxa mifteya wê ya yekem bi navê xanî re têkildar e, û nirxa mifteya duyemîn bi nirxa taybetmendiyê ya hêmana boriyê ya heyî re têkildar e:

Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Ka em li avahiya tiştên ku di veguhezerê re derbas dibin binêrin:

Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Ji boHer-Object, Kom-Object û Measure-Object

Ji bo xebata bi tiştan re cmdletên din hene. Wek nimûne, em li ser sê yên herî bikêr biaxivin:

ForEach-Object destûrê dide te ku hûn koda PowerShell-ê ji bo her tiştê di boriyê de bimeşînin:

ForEach-Object { блок сценария }

Kom-Object tiştan li gorî nirxa taybetmendiyê kom dike:

Group-Object PropertyName

Ger hûn wê bi parametreya -NoElement bimeşînin, hûn dikarin hejmara hêmanên di koman de fêr bibin.

Pîvan-Tişt Di boriyê de ji hêla nirxên zeviyê objeyê ve pîvanên kurteya cihêreng berhev dike (hevokê hesab dike, û her weha nirxa herî kêm, herî zêde an navînî jî dibîne):

Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum

Bi gelemperî, cmdletên ku têne nîqaş kirin bi înteraktîf têne bikar anîn, û bi gelemperî di nivîsan de têne afirandin. fonksiyonên bi blokên Destpêk, Pêvajo û Dawî.

Çêkirina tiştên .NET û COM (New-Object)

Gelek hêmanên nermalavê yên bi navgînên .NET Core û COM hene ku ji rêvebirên pergalê re bikêr in. Bi karanîna çîna System.Diagnostics.EventLog, hûn dikarin rasterast ji Windows PowerShell têketinên pergalê birêve bibin. Ka em li mînakek çêkirina mînakek vê polê bi karanîna cmdlet New-Object bi parametreya -TypeName binêrin:

New-Object -TypeName System.Diagnostics.EventLog

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Ji ber ku me têketinek bûyerek taybetî diyar nekir, mînaka encam a polê ti daneyan dihewîne. Ji bo guheztina vê yekê, hûn hewce ne ku di dema afirandina wê de bi karanîna parametreya -ArgumentList bangî rêbazek çêkerek taybetî bikin. Ger em bixwazin xwe bigihînin têketina serîlêdanê, divê em rêzika "Serlêdan" wekî arguman ji çêker re derbas bikin:

$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Ji kerema xwe bala xwe bidin ku me hilberîna fermanê di guhêrbara $AppLog de tomar kir. Her çend boriyên bi gelemperî di moda înteraktîf de têne bikar anîn, nivîsandina nivîsan bi gelemperî hewce dike ku referansek li ser tiştekê were domandin. Wekî din, çînên bingehîn .NET Core di nav qada navên pergalê de hene: PowerShell ji hêla xwerû ve li celebên diyarkirî digere, ji ber vê yekê nivîsandina Diagnostics.EventLog li şûna System.Diagnostics.EventLog pir rast e.

Ji bo ku hûn bi têketinê re bixebitin, hûn dikarin rêbazên guncan bikar bînin:

$AppLog | Get-Member -MemberType Method

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Ger mafên gihîştinê hebin, em bibêjin ku ew bi rêbaza Clear() tê paqij kirin:

$AppLog.Clear()

New-Object cmdlet jî ji bo xebatê bi pêkhateyên COM re tê bikar anîn. Gelek ji wan hene - ji pirtûkxaneyên ku bi servera skrîptê ya Windows-ê re têne peyda kirin heya serîlêdanên ActiveX, wekî Internet Explorer. Ji bo afirandina objeyek COM, hûn hewce ne ku parametreya -ComObject bi ProgId-a bername ya çîna xwestî re saz bikin:

New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject

Ji bo afirandina tiştên xwe yên bi avahiyek kêfî, karanîna New-Object pir arkaîk û giran xuya dike; ev cmdlet tê bikar anîn ku bi hêmanên nermalavê yên derveyî PowerShell re bixebite. Di gotarên paşerojê de dê ev mijar bi berfirehî were nîqaş kirin. Ji bilî tiştên .NET û COM, em ê tiştên CIM (WMI) û ADSI jî bikolin.

Banga Rêbazên Statîk

Hin dersên .NET Core nayên destnîşan kirin, di nav de System.Environment û System.Math. Ew hene statîk û tenê taybetmendî û rêbazên statîk hene. Ev bi bingehîn pirtûkxaneyên referansê ne ku bêyî afirandina tiştan têne bikar anîn. Hûn dikarin bi xêzkirina navê tîpê di nav kemberên çargoşe de çînek statîk bi navgîniya wêjeyî ve binav bikin. Lêbelê, heke em bi karanîna Get-Member li avahiya objektê binêrin, li şûna System.Environment em ê celebê System.RuntimeType bibînin:

[System.Environment] | Get-Member

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Ji bo dîtina tenê endamên statîk, bi parametreya -Static bangî Get-Endamê bikin (tişê objektê bala xwe bidinê):

[System.Environment] | Get-Member -Static

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Ji bo gihîştina taybetmendî û rêbazên statîk, li şûna demajoyek piştî biwêjê, du stûnên li pey hev bikar bînin:

[System.Environment]::OSVersion

An

$test=[System.Math]::Sqrt(25) 
$test
$test.GetType()

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

PSCustomObject binivîsin

Di nav gelek celebên daneyê yên di PowerShell de hene, hêjayî gotinê ye PSCustomObject, ku ji bo hilanîna tiştên bi avahiyek kêfî hatî çêkirin. Afirandina objeyek wusa bi karanîna cmdleta New-Object wekî rêgezek klasîk, lê giran û kevnar tê hesibandin:

$object = New-Object  –TypeName PSCustomObject -Property @{Name = 'Ivan Danko'; 
                                          City = 'Moscow';
                                          Country = 'Russia'}

Ka em li avahiya objektê binêrin:

$object | Get-Member

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Bi PowerShell 3.0 dest pê dike, hevoksaziyek din heye:

$object = [PSCustomObject]@{Name = 'Ivan Danko'; 
                                          City = 'Moscow';
                                          Country = 'Russia'
}

Hûn dikarin bi yek ji awayên wekhev xwe bigihînin daneyan:

$object.Name

$object.'Name'

$value = 'Name'
$object.$value

Li vir mînakek veguhertina hashtableyek heyî ji bo tiştek heye:

$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Yek ji dezawantajên tiştên bi vî rengî ew e ku rêza taybetmendiyên wan dikare biguhezîne. Ji bo ku hûn ji vê yekê dûr nekevin, divê hûn taybetmendiya [ordered] bikar bînin:

$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko'; 
                                          City = 'Moscow';
                                          Country = 'Russia'
}

Vebijarkên din hene ji bo afirandina objeyekê: li jor me li bikaranîna cmdlet nihêrî Hilbijêrin-Object. Tiştê ku dimîne ev e ku meriv lêzêdekirin û rakirina hêmanan bibîne. Kirîna vê ji bo tiştê ji mînaka berê pir hêsan e:

$object | Add-Member –MemberType NoteProperty –Name Age  –Value 33
$object | Get-Member

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Add-Member cmdlet destûrê dide te ku hûn ne tenê taybetmendiyan, lê di heman demê de rêbazan jî li $objektek berê hatî afirandin bi karanîna avakirina "-MemberType ScriptMethod" zêde bikin:

$ScriptBlock = {
    # код 
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member

Ji kerema xwe bala xwe bidinê ku me guhêrbara $ScriptBlock ya cureyê ScriptBlock bikar anî da ku koda rêbaza nû hilîne.

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Ji bo rakirina taybetmendiyan, rêbaza têkildar bikar bînin:

$object.psobject.properties.remove('Name')

Çînên Xwe Diafirînin

PowerShell 5.0 şiyana pênasekirinê destnîşan kir polên bikaranîna taybetmendiya hevoksaziyê ya zimanên bernamesaziyê yên objekt-oriented. Peyva karûbarê Class ji bo vê yekê tête armanc kirin, piştî vê yekê divê hûn navê polê diyar bikin û laşê wê di bendikên operatorê de diyar bikin:

class MyClass
{
    # тело класса
}

Ev celebek .NET Core ya rastîn e, bi laşek ku taybetmendiyên wê, rêbaz û hêmanên din vedibêje. Ka em li mînakek danasîna çîna herî hêsan binêrin:

class MyClass 
{
     [string]$Name
     [string]$City
     [string]$Country
}

Ji bo afirandina hêmanek (nimûneya polê), cmdlet bikar bînin New-Object, an biwêjek ji cureyê [MyClass] û rêbaza pseudostatîk nû (çêkerê xwerû):

$object = New-Object -TypeName MyClass

an

$object = [MyClass]::new()

Ka em strukturên objeyê analîz bikin:

$object | Get-Member

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Berberiyê ji bîr nekin: hûn nekarin navek tîpê wekî rêzek binav bikin an jî tîpek li derveyî nivîsar an modulê ku çîn tê de hatî destnîşan kirin bikar bînin. Di vê rewşê de, fonksiyon dikarin mînakên pola (tiştên) ku dê li derveyî modul an skrîptê bigihîjin vegerînin.

Piştî afirandina objektê, taybetmendiyên wê dagirin:

$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Bala xwe bidinê ku danasîna polê ne tenê celebên taybetmendiyê, lê di heman demê de nirxên xwerû yên wan jî diyar dike:

class Example
{
     [string]$Name = 'John Doe'
}

Danasîna rêbazek polê dişibihe ravekirina fonksiyonek, lê bêyî karanîna peyva fonksiyonê. Wekî ku di fonksiyonê de, ger hewce be, parametre ji rêbazan re têne şandin:

class MyClass 
{
     [string]$Name
     [string]$City
     [string]$Country
     
     #описание метода
     Smile([bool]$param1)
     {
         If($param1) {
            Write-Host ':)'
         }
     }
}

Naha nûnerê pola me dikare bişirî:

$object = [MyClass]::new()
$object.Smile($true)

Rêbaz dikarin zêde werin barkirin; Wekî din, çînek heye taybetmendiyên statîk û rêbazên, û her weha çêkerên ku navên wan bi navê polê bixwe re hevaheng in. Çînek ku di skrîptek an modulek PowerShell de hatî destnîşan kirin dikare ji bo yekî din wekî bingehek xizmet bike - bi vî rengî mîras tê sepandin. Di vê rewşê de, destûr tê dayîn ku çînên .NET yên heyî wekî yên bingehîn bikar bînin:

class MyClass2 : MyClass
{
      #тело нового класса, базовым для которого является MyClass
}
[MyClass2]::new().Smile($true)

Danasîna me ya xebata bi tiştên li PowerShell-ê re bi zorê ne bes e. Di weşanên jêrîn de, em ê hewl bidin ku wê bi mînakên pratîkî kûrtir bikin: gotara pêncemîn di rêzê de dê ji mijarên yekkirina PowerShell bi hêmanên nermalava sêyemîn re were veqetandin. Parçeyên berê dikarin li ser lînkên jêrîn werin dîtin.

Beş 1: Taybetmendiyên bingehîn ên Windows PowerShell
Beş 2: Danasîna Zimanê Bernamesaziyê ya Windows PowerShell
Beş 3: derbaskirina parametreyan ji bo nivîsar û fonksiyonan, afirandina cmdlet

Windows PowerShell çi ye û ji bo çi tê bikar anîn? Beş 4: Karkirina bi tiştan, çînên xwe

Source: www.habr.com

Add a comment