Pwodiksyon tèks kòmandman yo nan fenèt entèprèt PowerShell la se jis yon fason pou montre enfòmasyon nan yon fòm ki apwopriye pou pèsepsyon moun. Aktyèlman Mèkredi
Table of contents:
Objè nan PowerShell
Ann sonje ke yon objè se yon koleksyon jaden done (pwopriyete, evènman, elatriye) ak metòd pou trete yo (metòd). Estrikti li yo espesifye pa yon kalite, ki anjeneral baze sou klas yo itilize nan platfòm inifye .NET Nwayo a. Li posib tou pou travay avèk objè COM, CIM (WMI) ak ADSI. Pwopriyete ak metòd yo nesesè pou fè plizyè aksyon sou done; Anplis de sa, nan PowerShell, objè yo ka pase kòm agiman nan fonksyon ak cmdlets, asiyen valè yo nan varyab, epi gen tou.
Wè estrikti objè yo
Pou egzanp, ann kouri cmdlet Get-Process, ki pèmèt ou jwenn enfòmasyon sou pwosesis yo ap kouri nan sistèm nan:
Li pral montre kèk done tèks fòma ki pa bay okenn lide sou pwopriyete yo nan objè yo retounen ak metòd yo. Pou ajiste pwodiksyon an, nou bezwen aprann kijan pou egzamine estrikti objè yo, epi cmdlet Get-Member la ap ede nou ak sa a:
Get-Process | Get-Member
Isit la nou deja wè kalite a ak estrikti, epi avèk èd nan paramèt adisyonèl nou ka, pou egzanp, montre sèlman pwopriyete yo nan objè a ki enkli nan opinyon an:
Get-Process | Get-Member -MemberType Property
Konesans sa a pral nesesè pou rezoud pwoblèm administrasyon an entèaktif oswa pou ekri pwòp script ou yo: pou egzanp, jwenn enfòmasyon sou pwosesis kwoke lè l sèvi avèk pwopriyete Responding la.
Filtrage objè yo
PowerShell pèmèt objè ki satisfè yon sèten kondisyon yo dwe pase nan yon tiyo:
Where-Object { блок сценария }
Rezilta egzekite blòk script la nan parantèz yo dwe yon valè booleyen. Si se vre ($ vre), objè a ki antre nan cmdlet Where-Object la pral pase sou tiyo a, otreman ($ fo) li pral efase. Pa egzanp, ann montre yon lis sèvis sèvè Windows ki sispann, i.e. moun ki gen pwopriyete Estati yo mete nan "Stopped":
Get-Service | Where-Object {$_.Status -eq "Stopped"}
Isit la ankò nou wè yon reprezantasyon tèks, men si ou vle konprann kalite a ak estrikti entèn nan objè yo pase nan tiyo a li pa difisil:
Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member
Klase objè yo
Lè pwosesis tiyo nan objè, gen souvan yon bezwen sòt yo. Cmdlet Sort-Object la pase non pwopriyete yo (klas klasman) epi li retounen objè ki òdone dapre valè yo. Li fasil pou klase pwodiksyon an nan pwosesis kouri pa tan CPU pase (pwopriyete CPU):
Get-Process | Sort-Object –Property cpu
Ou ka omisyon paramèt -Property la lè w ap rele cmdlet Sort-Object; li itilize pa default. Pou klasman ranvèse, sèvi ak paramèt -Descending:
Get-Process | Sort-Object cpu -Descending
Chwazi objè ak pati yo
Cmdlet Select-Object la pèmèt ou chwazi yon kantite espesifik objè nan kòmansman oswa nan fen yon tiyo lè l sèvi avèk paramèt -Premye oswa -Dènye. Avèk èd li, ou ka chwazi objè sèl oswa sèten pwopriyete, epi tou kreye nouvo objè ki baze sou yo. Ann gade ki jan cmdlet la ap travay lè l sèvi avèk egzanp senp.
Kòmandman sa a montre enfòmasyon sou 10 pwosesis ki konsome kantite maksimòm RAM (pwopriyete WS):
Get-Process | Sort-Object WS -Descending | Select-Object -First 10
Ou ka chwazi sèlman sèten pwopriyete objè ki pase nan tiyo a epi kreye lòt ki baze sou yo:
Get-Process | Select-Object ProcessName, Id -First 1
Kòm yon rezilta nan operasyon tiyo a, nou pral resevwa yon nouvo objè, estrikti nan ki pral diferan de estrikti a retounen nan Get-Process cmdlet la. Ann verifye sa a lè l sèvi avèk Get-Member:
Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member
Remake byen ke Select-Object retounen yon sèl objè (-First 1) ki gen sèlman de nan jaden nou espesifye: valè yo te kopye nan premye objè a pase nan tiyo a pa cmdlet Get-Process la. Youn nan fason yo kreye objè nan script PowerShell baze sou lè l sèvi avèk Select-Object:
$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()
Sèvi ak Chwazi-Objè, ou ka ajoute pwopriyete kalkile nan objè ki bezwen reprezante kòm
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}
Ann gade nan estrikti a nan objè ki pase nan CONVEYOR la:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member
PouChak-Objè, Gwoup-Objè ak Mezi-Objè
Gen lòt cmdlets pou travay ak objè yo. Kòm yon egzanp, ann pale sou twa ki pi itil yo:
Pou Chak-Objè pèmèt ou kouri kòd PowerShell pou chak objè nan tiyo a:
ForEach-Object { блок сценария }
Gwoup-Objè gwoupe objè pa valè pwopriyete:
Group-Object PropertyName
Si ou kouri li ak paramèt -NoElement, ou ka jwenn kantite eleman nan gwoup yo.
Mezi-Objè rasanble divès paramèt rezime pa valè jaden objè nan tiyo a (kalkile sòm total la, epi tou li jwenn valè minimòm, maksimòm oswa mwayèn):
Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum
Tipikman, cmdlets yo diskite yo itilize entèaktif, epi yo souvan kreye nan scripts.
Kreye objè .NET ak COM (New-Object)
Genyen anpil konpozan lojisyèl ak .NET Core ak COM interfaces ki itil pou administratè sistèm yo. Sèvi ak klas System.Diagnostics.EventLog, ou ka jere mòso sistèm dirèkteman nan Windows PowerShell. Ann gade yon egzanp pou kreye yon egzanp nan klas sa a lè l sèvi avèk cmdlet New-Object ak paramèt -TypeName:
New-Object -TypeName System.Diagnostics.EventLog
Piske nou pa t espesifye yon jounal evènman espesifik, egzanp klas la ki lakòz pa gen okenn done. Pou chanje sa a, ou bezwen rele yon metòd konstrukteur espesyal pandan kreyasyon li lè l sèvi avèk paramèt -ArgumentList. Si nou vle jwenn aksè nan jounal aplikasyon an, nou ta dwe pase fisèl "Aplikasyon" kòm yon agiman bay konstrukteur a:
$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog
Tanpri sonje ke nou sove pwodiksyon lòd la nan varyab $AppLog la. Malgre ke tiyo yo souvan itilize nan mòd entèaktif, ekri script souvan mande pou kenbe yon referans a yon objè. Anplis de sa, klas nwayo .NET Core yo genyen nan espas non System la: PowerShell pa default gade pou kalite espesifye nan li, kidonk ekri Diagnostics.EventLog olye de System.Diagnostics.EventLog se byen kòrèk.
Pou travay ak boutèy la, ou ka itilize metòd ki apwopriye yo:
$AppLog | Get-Member -MemberType Method
Ann di se metòd la Clear() otorize si gen dwa aksè:
$AppLog.Clear()
New-Object cmdlet yo itilize tou pou travay avèk konpozan COM. Gen anpil nan yo - soti nan bibliyotèk yo apwovizyone ak sèvè Windows script nan aplikasyon ActiveX, tankou Internet Explorer. Pou kreye yon objè COM, ou bezwen mete paramèt -ComObject ak ProgId pwogramasyon klas vle a:
New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject
Pou kreye pwòp objè ou yo ak yon estrikti abitrè, lè l sèvi avèk New-Object sanble twò akayik ak ankonbran; cmdlet sa a yo itilize pou travay ak konpozan lojisyèl ekstèn PowerShell. Nan atik lavni yo pral diskite sou pwoblèm sa a an plis detay. Anplis de objè .NET ak COM, nou pral eksplore tou objè CIM (WMI) ak ADSI.
Rele metòd estatik
Gen kèk klas .NET Core pa ka enstansye, tankou System.Environment ak System.Math. Yo ye
[System.Environment] | Get-Member
Pou wè sèlman manm estatik, rele Get-Member ak paramèt -Static (note kalite objè a):
[System.Environment] | Get-Member -Static
Pou jwenn aksè nan pwopriyete estatik ak metòd, sèvi ak de kolon youn apre lòt olye pou yo yon peryòd apre literal la:
[System.Environment]::OSVersion
Oswa
$test=[System.Math]::Sqrt(25)
$test
$test.GetType()
Tape PSCustomObject
Pami anpil kalite done ki disponib nan PowerShell, li vo mansyone PSCustomObject, ki fèt pou estoke objè ki gen yon estrikti abitrè. Kreye yon objè konsa lè l sèvi avèk cmdlet New-Object konsidere kòm yon fason klasik, men ankonbran ak demode:
$object = New-Object –TypeName PSCustomObject -Property @{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'}
Ann gade nan estrikti objè a:
$object | Get-Member
Kòmanse ak PowerShell 3.0, yon lòt sentaks ki disponib:
$object = [PSCustomObject]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Ou ka jwenn aksè nan done yo nan youn nan fason ekivalan yo:
$object.Name
$object.'Name'
$value = 'Name'
$object.$value
Men yon egzanp konvèti yon hashtable ki egziste deja nan yon objè:
$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()
Youn nan dezavantaj yo nan objè nan kalite sa a se ke lòd la nan pwopriyete yo ka chanje. Pou evite sa, ou dwe itilize atribi [kòmande]:
$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Gen lòt opsyon pou kreye yon objè: pi wo a nou te gade lè l sèvi avèk cmdlet la
$object | Add-Member –MemberType NoteProperty –Name Age –Value 33
$object | Get-Member
Cmdlet Add-Member pèmèt ou ajoute non sèlman pwopriyete, men tou metòd pou yon $object ki te kreye deja lè w itilize konstriksyon "-MemberType ScriptMethod":
$ScriptBlock = {
# код
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member
Tanpri sonje ke nou itilize varyab $ScriptBlock nan kalite ScriptBlock pou estoke kòd pou nouvo metòd la.
Pou retire pwopriyete yo, sèvi ak metòd ki koresponn lan:
$object.psobject.properties.remove('Name')
Kreye pwòp klas ou yo
PowerShell 5.0 prezante kapasite pou defini
class MyClass
{
# тело класса
}
Sa a se yon kalite .NET Nwayo vre, ak yon kò ki dekri pwopriyete li yo, metòd, ak lòt eleman. Ann gade nan yon egzanp defini klas ki pi senp la:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
}
Pou kreye yon objè (egzanp klas), sèvi ak cmdlet la
$object = New-Object -TypeName MyClass
oswa
$object = [MyClass]::new()
Ann analize estrikti objè a:
$object | Get-Member
Pa bliye sou sijè ki abòde: ou pa ka refere a yon non kalite kòm yon fisèl oswa itilize yon kalite literal deyò script la oswa modil kote yo defini klas la. Nan ka sa a, fonksyon yo ka retounen egzanp klas (objè) ki pral aksesib deyò modil la oswa script la.
Apre ou fin kreye objè a, ranpli pwopriyete li yo:
$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object
Remake byen ke deskripsyon klas la presize non sèlman kalite pwopriyete yo, men tou, valè default yo:
class Example
{
[string]$Name = 'John Doe'
}
Deskripsyon nan yon metòd klas sanble ak deskripsyon an nan yon fonksyon, men san yo pa itilize mo fonksyon an. Kòm nan yon fonksyon, paramèt yo pase nan metòd si sa nesesè:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
#описание метода
Smile([bool]$param1)
{
If($param1) {
Write-Host ':)'
}
}
}
Kounye a reprezantan klas nou an ka souri:
$object = [MyClass]::new()
$object.Smile($true)
Metòd yo ka twò chaje; Anplis de sa, yon klas gen
class MyClass2 : MyClass
{
#тело нового класса, базовым для которого является MyClass
}
[MyClass2]::new().Smile($true)
Deskripsyon nou an nan travay ak objè nan PowerShell se diman konplè. Nan piblikasyon sa yo, nou pral eseye apwofondi li ak egzanp pratik: senkyèm atik nan seri a pral konsakre nan pwoblèm yo nan entegre PowerShell ak eleman lojisyèl twazyèm pati. Pati sot pase yo ka jwenn nan lyen ki anba yo.
Sous: www.habr.com