Ang text output sa mga command sa PowerShell interpreter window kay usa lang ka paagi sa pagpakita sa impormasyon sa porma nga haom sa panglantaw sa tawo. Sa tinuod Miyerkules
Talaan sa mga sulod:
Mga butang sa PowerShell
Atong hinumdoman nga ang usa ka butang usa ka koleksyon sa mga natad sa datos (mga kabtangan, panghitabo, ug uban pa) ug mga pamaagi sa pagproseso niini (mga pamaagi). Ang istruktura niini gipiho sa usa ka tipo, nga kasagaran gibase sa mga klase nga gigamit sa hiniusang .NET Core nga plataporma. Posible usab nga magtrabaho sa COM, CIM (WMI) ug ADSI nga mga butang. Ang mga kabtangan ug pamaagi gikinahanglan aron mahimo ang lainlaing mga aksyon sa datos; dugang pa, sa PowerShell, ang mga butang mahimong ipasa ingon mga argumento sa mga gimbuhaton ug cmdlet, gi-assign ang ilang mga kantidad sa mga variable, ug adunay usab
Pagtan-aw sa istruktura sa mga butang
Pananglitan, atong padaganon ang Get-Process cmdlet, nga nagtugot kanimo nga makakuha og impormasyon bahin sa mga proseso nga nagdagan sa sistema:
Kini magpakita sa pipila ka na-format nga datos sa teksto nga wala maghatag ug bisan unsa nga ideya mahitungod sa mga kabtangan sa gibalik nga mga butang ug sa ilang mga pamaagi. Aron mamaayo ang output, kinahanglan natong makat-on unsaon pagsusi sa istruktura sa mga butang, ug ang Get-Member cmdlet makatabang kanato niini:
Get-Process | Get-Member
Dinhi nakita na nato ang tipo ug estraktura, ug sa tabang sa dugang nga mga parametro mahimo natong, pananglitan, ipakita lamang ang mga kabtangan sa butang nga gilakip sa input:
Get-Process | Get-Member -MemberType Property
Kini nga kahibalo gikinahanglan aron masulbad ang mga problema sa administrasyon nga interactive o sa pagsulat sa imong kaugalingon nga mga script: pananglitan, aron makakuha og impormasyon bahin sa gibitay nga mga proseso gamit ang Responding property.
Pagsala sa mga butang
Gitugotan sa PowerShell ang mga butang nga nakab-ot sa usa ka piho nga kondisyon nga ipasa sa usa ka pipeline:
Where-Object { блок сценария }
Ang resulta sa pagpatuman sa script block sulod sa mga parentesis kinahanglang boolean value. Kung kini tinuod ($ tinuod), ang butang nga gi-input sa Where-Object cmdlet ipasa sa pipeline, kung dili ($ bakak) kini mapapas. Pananglitan, ipakita nato ang usa ka lista sa nahunong nga mga serbisyo sa Windows Server, i.e. kadtong kansang Status nga kabtangan gitakda sa "Nahunong":
Get-Service | Where-Object {$_.Status -eq "Stopped"}
Dinhi pag-usab atong makita ang usa ka representasyon sa teksto, apan kung gusto nimong masabtan ang tipo ug internal nga istruktura sa mga butang nga moagi sa pipeline dili kini lisud:
Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member
Paghan-ay sa mga butang
Kung ang pagproseso sa pipeline sa mga butang, kanunay kinahanglan nga ihan-ay kini. Ang Sort-Object cmdlet gipasa ang mga ngalan sa mga kabtangan (pagsunud sa mga yawe) ug gibalik ang mga butang nga gi-order sa ilang mga kantidad. Sayon ang paghan-ay sa output sa mga proseso sa pagpadagan sa oras nga gigugol sa CPU (cpu property):
Get-Process | Sort-Object –Property cpu
Ang -Property parameter mahimong dili iapil sa pagtawag sa Sort-Object cmdlet; kini gigamit sa default. Para sa reverse sorting, gamita ang -Descending parameter:
Get-Process | Sort-Object cpu -Descending
Pagpili sa mga butang ug sa ilang mga bahin
Ang Select-Object cmdlet nagtugot kanimo sa pagpili sa usa ka piho nga gidaghanon sa mga butang sa sinugdanan o katapusan sa usa ka pipeline gamit ang -First o -Last parameters. Uban sa tabang niini, mahimo nimong pilion ang usa ka butang o piho nga mga kabtangan, ug maghimo usab mga bag-ong butang nga gibase niini. Atong tan-awon kung giunsa paglihok ang cmdlet gamit ang yano nga mga pananglitan.
Ang mosunod nga sugo nagpakita sa impormasyon mahitungod sa 10 ka proseso nga nag-ut-ot sa kinatas-ang gidaghanon sa RAM (WS property):
Get-Process | Sort-Object WS -Descending | Select-Object -First 10
Makapili ka lamang sa pipila ka mga kabtangan sa mga butang nga moagi sa pipeline ug maghimo og mga bag-o base niini:
Get-Process | Select-Object ProcessName, Id -First 1
Ingon usa ka sangputanan sa operasyon sa pipeline, makadawat kami usa ka bag-ong butang, ang istruktura nga lahi sa istruktura nga gibalik sa Get-Process cmdlet. Atong pamatud-an kini gamit ang Get-Member:
Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member
Timan-i nga ang Select-Object nagbalik sa usa ka butang (-Una 1) nga adunay duha ra sa mga natad nga among gitakda: ang ilang mga kantidad gikopya gikan sa una nga butang nga gipasa sa pipeline sa Get-Process cmdlet. Usa sa mga paagi sa paghimo og mga butang sa mga script sa PowerShell gibase sa paggamit sa Select-Object:
$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()
Gamit ang Select-Object, mahimo nimong idugang ang nakalkula nga mga kabtangan sa mga butang nga kinahanglan irepresentar ingon
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}
Atong tan-awon ang istruktura sa mga butang nga moagi sa conveyor:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member
Alang sa Matag-Buhat, Grupo-Buhat ug Sukdanan-Buhat
Adunay uban nga mga cmdlet alang sa pagtrabaho sa mga butang. Ingong pananglitan, atong hisgotan ang tulo ka labing mapuslanon:
Alang sa Matag-Buhat nagtugot kanimo sa pagpadagan sa PowerShell code alang sa matag butang sa pipeline:
ForEach-Object { блок сценария }
Grupo-Buhat grupo sa mga butang pinaagi sa bili sa kabtangan:
Group-Object PropertyName
Kung gipadagan nimo kini gamit ang -NoElement parameter, mahibal-an nimo ang gidaghanon sa mga elemento sa mga grupo.
Sukdanan-Buhat nag-aggregate sa nagkalain-laing mga summary parameters pinaagi sa object field values sa pipeline (gikalkula ang sum, ug nakit-an usab ang minimum, maximum o average value):
Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum
Kasagaran, ang mga cmdlet nga gihisgutan gigamit nga interactive, ug sagad gihimo sa mga script.
Paghimo og .NET ug COM nga mga butang (Bag-ong butang)
Adunay daghang mga sangkap sa software nga adunay mga interface sa .NET Core ug COM nga mapuslanon sa mga tigdumala sa sistema. Gamit ang System.Diagnostics.EventLog nga klase, mahimo nimong madumala ang mga log sa sistema direkta gikan sa Windows PowerShell. Atong tan-awon ang usa ka pananglitan sa paghimo sa usa ka pananglitan niini nga klase gamit ang New-Object cmdlet nga adunay -TypeName parameter:
New-Object -TypeName System.Diagnostics.EventLog
Tungod kay wala kami nagtino sa usa ka piho nga log sa panghitabo, ang resulta nga pananglitan sa klase wala’y datos. Aron mabag-o kini, kinahanglan nimo nga tawagan ang usa ka espesyal nga pamaagi sa pagtukod sa panahon sa paghimo niini gamit ang parameter -ArgumentList. Kung gusto namon nga ma-access ang log sa aplikasyon, kinahanglan namon nga ipasa ang string nga "Application" ingon usa ka argumento sa nagtukod:
$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog
Palihug timan-i nga among gitipigan ang output sa sugo sa $AppLog variable. Bisan tuod ang mga pipeline kasagarang gigamit sa interactive nga paagi, ang pagsulat sa mga script kasagaran nagkinahanglan sa pagpadayon sa usa ka reperensiya sa usa ka butang. Dugang pa, ang kinauyokan nga .NET Core nga mga klase anaa sa System namespace: Ang PowerShell pinaagi sa default nangita sa mga espesipikong tipo niini, mao nga husto ang pagsulat sa Diagnostics.EventLog imbes sa System.Diagnostics.EventLog.
Aron magamit ang log, mahimo nimong gamiton ang angay nga mga pamaagi:
$AppLog | Get-Member -MemberType Method
Ingnon ta nga kini gi-clear sa Clear() nga pamaagi kung adunay mga katungod sa pag-access:
$AppLog.Clear()
Ang New-Object cmdlet gigamit usab sa pagtrabaho uban sa COM components. Adunay daghan niini - gikan sa mga librarya nga gihatag sa Windows script server hangtod sa mga aplikasyon sa ActiveX, sama sa Internet Explorer. Aron makahimo og COM nga butang, kinahanglan nimo nga itakda ang -ComObject nga parameter gamit ang programmatic ProgId sa gusto nga klase:
New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject
Aron makamugna og kaugalingon nimong mga butang nga adunay arbitraryong estraktura, ang paggamit sa New-Object morag karaan ug hago kaayo; kini nga cmdlet kay gigamit sa pagtrabaho sa mga software component gawas sa PowerShell. Sa umaabot nga mga artikulo kini nga isyu hisgotan sa mas detalyado. Dugang sa .NET ug COM nga mga butang, kita usab mag-usisa sa CIM (WMI) ug ADSI nga mga butang.
Pagtawag sa Static Methods
Ang ubang .NET Core nga mga klase dili mahimong instantiated, lakip ang System.Environment ug System.Math. Sila mao
[System.Environment] | Get-Member
Para tan-awon lang ang mga static nga miyembro, tawga ang Get-Member gamit ang -Static parameter (timan-i ang tipo sa butang):
[System.Environment] | Get-Member -Static
Aron ma-access ang static nga mga kabtangan ug mga pamaagi, gamita ang duha ka magkasunod nga colon imbes nga usa ka tuldok pagkahuman sa literal:
[System.Environment]::OSVersion
O
$test=[System.Math]::Sqrt(25)
$test
$test.GetType()
I-type ang PSCustomObject
Taliwala sa daghang mga tipo sa datos nga magamit sa PowerShell, angay nga hisgutan ang PSCustomObject, nga gidisenyo alang sa pagtipig sa mga butang nga adunay usa ka arbitraryong istruktura. Ang paghimo sa ingon nga butang gamit ang New-Object cmdlet giisip nga usa ka klasiko, apan lisud ug karaan nga paagi:
$object = New-Object –TypeName PSCustomObject -Property @{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'}
Atong tan-awon ang istruktura sa butang:
$object | Get-Member
Sugod sa PowerShell 3.0, laing syntax ang anaa:
$object = [PSCustomObject]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Mahimo nimong ma-access ang datos sa usa sa parehas nga mga paagi:
$object.Name
$object.'Name'
$value = 'Name'
$object.$value
Ania ang usa ka pananglitan sa pag-convert sa usa ka kasamtangan nga hashtable ngadto sa usa ka butang:
$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()
Usa sa mga disadvantages sa mga butang sa niini nga matang mao nga ang han-ay sa ilang mga kabtangan mahimong mausab. Aron malikayan kini, kinahanglan nimong gamiton ang [gimando] nga hiyas:
$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Adunay uban nga mga kapilian sa paghimo sa usa ka butang: sa ibabaw gitan-aw namon ang paggamit sa cmdlet
$object | Add-Member –MemberType NoteProperty –Name Age –Value 33
$object | Get-Member
Ang Add-Member cmdlet nagtugot kanimo sa pagdugang dili lamang sa mga kabtangan, apan usab sa mga pamaagi sa usa ka nabuhat kaniadto nga $object pinaagi sa paggamit sa "-MemberType ScriptMethod" nga pagtukod:
$ScriptBlock = {
# код
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member
Palihug timan-i nga among gigamit ang $ScriptBlock variable sa tipo nga ScriptBlock aron tipigan ang code para sa bag-ong pamaagi.
Aron makuha ang mga kabtangan, gamita ang katugbang nga pamaagi:
$object.psobject.properties.remove('Name')
Paghimo sa Imong Kaugalingong mga Klase
Gipaila sa PowerShell 5.0 ang abilidad sa paghubit
class MyClass
{
# тело класса
}
Kini usa ka tinuod nga .NET Core nga tipo, nga adunay lawas nga naghulagway sa mga kabtangan niini, mga pamaagi, ug uban pang mga elemento. Atong tan-awon ang usa ka pananglitan sa paghubit sa pinakasimple nga klase:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
}
Aron makahimo usa ka butang (klase nga pananglitan), gamita ang cmdlet
$object = New-Object -TypeName MyClass
o
$object = [MyClass]::new()
Atong analisahon ang istruktura sa butang:
$object | Get-Member
Ayaw kalimti ang bahin sa kasangkaran: dili ka mahimong magtumong sa usa ka tipo nga ngalan ingon usa ka hilo o mogamit usa ka tipo nga literal sa gawas sa script o module diin gihubit ang klase. Sa kini nga kaso, ang mga gimbuhaton mahimo’g ibalik ang mga higayon sa klase (mga butang) nga ma-access sa gawas sa module o script.
Human sa paghimo sa butang, pun-a ang mga kabtangan niini:
$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object
Timan-i nga ang deskripsyon sa klase nagtino dili lamang sa mga tipo sa kabtangan, apan usab sa ilang mga default nga kantidad:
class Example
{
[string]$Name = 'John Doe'
}
Ang paghulagway sa usa ka pamaagi sa klase susama sa paghulagway sa usa ka function, apan wala gamita ang function nga pulong. Sama sa usa ka function, ang mga parameter gipasa sa mga pamaagi kung kinahanglan:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
#описание метода
Smile([bool]$param1)
{
If($param1) {
Write-Host ':)'
}
}
}
Karon ang representante sa among klase makapahiyom:
$object = [MyClass]::new()
$object.Smile($true)
Ang mga pamaagi mahimong ma-overload; dugang pa, ang usa ka klase adunay
class MyClass2 : MyClass
{
#тело нового класса, базовым для которого является MyClass
}
[MyClass2]::new().Smile($true)
Ang among paghulagway sa pagtrabaho sa mga butang sa PowerShell halos dili kompleto. Sa mosunod nga mga publikasyon, atong sulayan ang pagpalawom niini gamit ang praktikal nga mga pananglitan: ang ikalima nga artikulo sa serye igahin sa mga isyu sa pag-integrate sa PowerShell sa mga third-party nga software component. Ang nangaging mga bahin makita sa mga link sa ubos.
Source: www.habr.com