Ny famoahana lahatsoratra amin'ny baiko ao amin'ny varavarankelin'ny mpandika teny PowerShell dia fomba iray hanehoana vaovao amin'ny endrika mety amin'ny fahitan'ny olombelona. Alarobia tokoa
Fizahan-takelaka:
Zavatra ao amin'ny PowerShell
Aoka hotsaroantsika fa ny zavatra iray dia fitambaran'ny saha angon-drakitra (fananana, hetsika, sns.) sy fomba fanodinana azy (fomba). Ny firafiny dia voafaritra amin'ny karazana iray, izay matetika mifototra amin'ny kilasy ampiasaina amin'ny sehatra .NET Core iraisana. Azo atao koa ny miasa amin'ny zavatra COM, CIM (WMI) ary ADSI. Ilaina ny fananana sy fomba hanaovana hetsika isan-karazany amin'ny angon-drakitra; Ankoatr'izay, ao amin'ny PowerShell, ny zavatra dia azo ampitaina ho tohan-kevitra amin'ny fiasa sy cmdlet, manome ny sandany amin'ny variables, ary misy koa
Fijerena ny firafitry ny zavatra
Ohatra, andeha hojerentsika ny Get-Process cmdlet, izay ahafahanao mahazo fampahalalana momba ny fizotran'ny rafitra:
Izy io dia hampiseho angon-drakitra misy endrika izay tsy manome hevitra momba ny fananan'ireo zavatra naverina sy ny fomba fiasany. Mba hanitsiana tsara ny vokatra dia mila mianatra mandinika ny firafitry ny zavatra isika, ary ny Get-Member cmdlet dia hanampy antsika amin'izany:
Get-Process | Get-Member
Eto dia efa hitantsika ny karazana sy ny rafitra, ary miaraka amin'ny fanampian'ny masontsivana fanampiny, ohatra, dia afaka mampiseho afa-tsy ny fananan'ny zavatra tafiditra ao amin'ny fampidirana:
Get-Process | Get-Member -MemberType Property
Ilaina io fahalalana io mba hamahana ny olan'ny fitantanan-draharaha amin'ny fomba ifanakalozan-kevitra na hanoratana ny sora-tananao manokana: ohatra, mba hahazoana fampahalalana momba ny fizotran'ny fanantonana mampiasa ny fananana Responding.
Sivana zavatra
PowerShell dia ahafahan'ny zavatra mifanaraka amin'ny fepetra iray handalo amin'ny fantsona iray:
Where-Object { Π±Π»ΠΎΠΊ ΡΡΠ΅Π½Π°ΡΠΈΡ }
Ny vokatry ny fanatanterahana ny script block ao anatin'ny fononteny dia tokony ho sanda boolean. Raha marina izany ($ marina), ny zavatra ampidirina ao amin'ny Where-Object cmdlet dia halefa amin'ny fantsona, raha tsy izany ($ sandoka) dia ho voafafa. Ohatra, andao asehoy ny lisitry ny serivisy Windows Server najanona, i.e. ireo izay manana ny fananan'ny Status napetraka ho "Najanona":
Get-Service | Where-Object {$_.Status -eq "Stopped"}
Eto indray isika dia mahita fanehoana an-tsoratra, fa raha te-hahatakatra ny karazana sy ny rafitra anatiny amin'ny zavatra mandalo amin'ny fantsona dia tsy sarotra izany:
Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member
Fanasokajiana zavatra
Rehefa fanodinana fantsona ny zavatra dia matetika ilaina ny manara-maso azy ireo. Ny Sort-Object cmdlet dia mandalo ny anaran'ny fananana (fanalahidy fanasokajiana) ary mamerina ny zavatra voafaritry ny sandany. Mora ny mandamina ny famoahana ny fizotran'ny fandehanana amin'ny fotoana lany amin'ny CPU (fananana CPU):
Get-Process | Sort-Object βProperty cpu
Ny parameter -Property dia azo esorina rehefa miantso ny Sort-Object cmdlet; ampiasaina amin'ny default. Ho an'ny fanasokajiana mivadika, ampiasao ny -Descending parameter:
Get-Process | Sort-Object cpu -Descending
Mifantina zavatra sy ny ampahany
Ny Select-Object cmdlet dia ahafahanao mifantina zavatra maromaro amin'ny fiandohana na fiafaran'ny fantsona mampiasa ny -First na -Last parameters. Miaraka amin'ny fanampiany dia afaka misafidy zavatra tokana na fananana sasany ianao, ary mamorona zavatra vaovao mifototra amin'izy ireo ihany koa. Andeha hojerentsika ny fomba fiasan'ny cmdlet amin'ny fampiasana ohatra tsotra.
Ity baiko manaraka ity dia mampiseho fampahalalana momba ny dingana 10 mandany ny habetsaky ny RAM (fananana WS):
Get-Process | Sort-Object WS -Descending | Select-Object -First 10
Tsy afaka misafidy afa-tsy toetra sasantsasany amin'ny zavatra mandalo amin'ny fantsona ianao ary mamorona vaovao mifototra amin'izy ireo:
Get-Process | Select-Object ProcessName, Id -First 1
Vokatry ny fiasan'ny fantsona dia hahazo zavatra vaovao isika, ny firafitra izay tsy mitovy amin'ny rafitra naverin'ny Get-Process cmdlet. Andao hanamarina izany amin'ny fampiasana Get-Member:
Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member
Mariho fa ny Select-Object dia mamerina zavatra tokana (-First 1) izay tsy misy afa-tsy roa amin'ireo saha nofaritanay: ny sandany dia nadika avy amin'ny zavatra voalohany nampidirina tao amin'ny pipeline tamin'ny Get-Process cmdlet. Ny iray amin'ireo fomba hamoronana zavatra amin'ny script PowerShell dia mifototra amin'ny fampiasana Select-Object:
$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()
Amin'ny fampiasana Select-Object, azonao atao ny manampy fananana kajy amin'ny zavatra mila aseho
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}
Andeha hojerentsika ny firafitry ny zavatra mandalo amin'ny conveyor:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member
ForEach-Object, Group-Object ary Measure-Object
Misy cmdlet hafa miasa amin'ny zavatra. Ohatra, andao hiresaka momba ireo telo mahasoa indrindra:
ForEach-Object ahafahanao mampandeha ny kaody PowerShell ho an'ny zavatra tsirairay ao anaty fantsona:
ForEach-Object { Π±Π»ΠΎΠΊ ΡΡΠ΅Π½Π°ΡΠΈΡ }
Vondrona-object manambatra zavatra araka ny sandan'ny fananana:
Group-Object PropertyName
Raha toa ianao ka mihazakazaka izany amin'ny -NoElement parameter, dia azonao atao ny mahita ny isan'ny singa ao amin'ny vondrona.
Measure-Object manangona masontsivana famintinana isan-karazany amin'ny soatoavin'ny sahan'ny zavatra ao amin'ny fantsona (manisa ny isa, ary mahita ny sanda kely indrindra, ambony na antonony):
Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum
Amin'ny ankapobeny, ny cmdlets resahina dia ampiasaina amin'ny interactive, ary matetika dia noforonina amin'ny script.
Mamorona zavatra .NET sy COM (Objet Vaovao)
Misy singa rindrambaiko maro miaraka amin'ny .NET Core sy COM interfaces izay mahasoa ny mpitantana ny rafitra. Amin'ny fampiasana ny kilasy System.Diagnostics.EventLog, azonao atao ny mitantana ny diarin'ny rafitra mivantana avy amin'ny Windows PowerShell. Andeha hojerentsika ohatra iray amin'ny famoronana ohatra amin'ity kilasy ity amin'ny fampiasana ny New-Object cmdlet miaraka amin'ny -TypeName parameter:
New-Object -TypeName System.Diagnostics.EventLog
Koa satria tsy nanondro ny diarin'ny hetsika manokana izahay dia tsy misy angona ny ohatra nateraky ny kilasy. Mba hanovana izany dia mila miantso fomba fanamboarana manokana ianao mandritra ny famoronana azy amin'ny alΓ lan'ny -ArgumentList parameter. Raha te-hiditra amin'ny lozisialy fampiharana isika dia tokony handefa ny tady "Application" ho tohan-kevitra amin'ny mpanamboatra:
$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog
Mariho fa notahirizinay tao amin'ny variable $AppLog ny famoahana ny baiko. Na dia matetika ampiasaina amin'ny fomba ifanakalozan-kevitra aza ny fantsona fantsona, ny fanoratana script dia matetika mitaky fitazonana reference amin'ny zavatra iray. Fanampin'izany, ny kilasy fototra .NET Core dia voarakitra ao amin'ny anaran'ny System: PowerShell amin'ny alΓ lan'ny default dia mitady karazana voatondro ao anatiny, noho izany dia marina ny fanoratana Diagnostics.EventLog fa tsy System.Diagnostics.EventLog.
Mba hiasa amin'ny log dia azonao ampiasaina ny fomba mety:
$AppLog | Get-Member -MemberType Method
Aleo lazaina fa voafafa amin'ny fomba Clear() raha misy zo fidirana:
$AppLog.Clear()
Ny New-Object cmdlet dia ampiasaina ihany koa hiasa amin'ny singa COM. Tena betsaka izy ireo - manomboka amin'ny tranomboky miaraka amin'ny mpizara script Windows mankany amin'ny rindranasa ActiveX, toy ny Internet Explorer. Mba hamoronana zavatra COM dia mila mametraka ny parameter -ComObject miaraka amin'ny Programmatic ProgId an'ny kilasy tianao ianao:
New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject
Mba hamoronana ny zavatrao manokana miaraka amin'ny rafitra tsy misy dikany, ny fampiasana New-Object dia toa tranainy sy manahirana loatra; ity cmdlet ity dia ampiasaina hiara-miasa amin'ireo singa rindrambaiko ivelan'ny PowerShell. Hodinihina aminβny an-tsipiriany kokoa ity lahatsoratra ity ao aminβny lahatsoratra ho avy. Ankoatra ny zavatra .NET sy COM, dia hijery ny zavatra CIM (WMI) sy ADSI ihany koa isika.
Fiantsoana Static Methods
Ny kilasy .NET Core sasany dia tsy azo alaina, anisan'izany ny System.Environment sy System.Math. Izy ireo dia
[System.Environment] | Get-Member
Raha hijery ny mpikambana static ihany, antsoy ny Get-Member miaraka amin'ny parameter -Static (mariho ny karazana zavatra):
[System.Environment] | Get-Member -Static
Raha te hidirana amin'ny toetra sy fomba static, dia ampiasao tsangambato roa mifanesy fa tsy fe-potoana aorian'ny litera:
[System.Environment]::OSVersion
na
$test=[System.Math]::Sqrt(25)
$test
$test.GetType()
Type PSCustomObject
Anisan'ireo karazana angona maro hita ao amin'ny PowerShell, ilaina ny manonona PSCustomObject, natao hitahirizana zavatra misy rafitra tsy misy dikany. Ny famoronana zavatra toy izany amin'ny fampiasana ny New-Object cmdlet dia heverina ho fomba mahazatra, saingy sarotra sy efa lany andro:
$object = New-Object βTypeName PSCustomObject -Property @{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'}
Andeha hojerentsika ny firafitry ny zavatra:
$object | Get-Member
Manomboka amin'ny PowerShell 3.0, misy syntax hafa misy:
$object = [PSCustomObject]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Azonao atao ny miditra amin'ny angona amin'ny iray amin'ireo fomba mitovy:
$object.Name
$object.'Name'
$value = 'Name'
$object.$value
Ity misy ohatra iray amin'ny famadihana ny hashtable efa misy ho zavatra iray:
$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()
Ny iray amin'ireo tsy fahampian'ny zavatra amin'ity karazana ity dia ny filaharan'ny fananany dia afaka miova. Mba hialana amin'izany dia tsy maintsy mampiasa ny toetra [baiko] ianao:
$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Misy safidy hafa amin'ny famoronana zavatra iray: etsy ambony dia nijery ny fampiasana ny cmdlet izahay
$object | Add-Member βMemberType NoteProperty βName Age βValue 33
$object | Get-Member
Ny cmdlet Add-Member dia ahafahanao manampy tsy fananana fotsiny, fa fomba iray amin'ny $ zavatra noforonina teo aloha amin'ny alΓ lan'ny fampiasana ny fananganana "-MemberType ScriptMethod":
$ScriptBlock = {
# ΠΊΠΎΠ΄
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member
Mariho fa nampiasa ny fari-piadidiana $ScriptBlock karazana ScriptBlock izahay mba hitahiry ny kaody ho an'ny fomba vaovao.
Mba hanesorana ny fananana dia ampiasao ny fomba mifanaraka amin'izany:
$object.psobject.properties.remove('Name')
Mamorona Kilasinao manokana
PowerShell 5.0 dia nampiditra ny fahaizana mamaritra
class MyClass
{
# ΡΠ΅Π»ΠΎ ΠΊΠ»Π°ΡΡΠ°
}
Ity dia karazana .NET Core marina, misy vatana iray mamaritra ny toetrany, ny fomba fiasany ary ny singa hafa. Andeha hojerentsika ny ohatra iray amin'ny famaritana ny kilasy tsotra indrindra:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
}
Mba hamoronana zavatra (kilasy ohatra), ampiasao ny cmdlet
$object = New-Object -TypeName MyClass
na
$object = [MyClass]::new()
Andeha hojerentsika ny firafitry ny zavatra:
$object | Get-Member
Aza adino ny momba ny sehatra: tsy afaka manondro anarana karazana ho toy ny tady ianao na mampiasa karazana litera ivelan'ny script na module izay mamaritra ny kilasy. Amin'ity tranga ity, ny asa dia afaka mamerina ny kilasy (zavatra) izay azo idirana ivelan'ny module na script.
Rehefa avy namorona ilay zavatra dia fenoy ny toetrany:
$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object
Mariho fa ny famaritana kilasy dia tsy mamaritra ny karazana fananana ihany, fa koa ny sandany default:
class Example
{
[string]$Name = 'John Doe'
}
Ny famaritana ny fomba kilasy dia mitovy amin'ny famaritana ny asa, fa tsy mampiasa ny teny asa. Toy ny amin'ny asa iray, ny paramètre dia alefa amin'ny fomba raha ilaina:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
#ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π°
Smile([bool]$param1)
{
If($param1) {
Write-Host ':)'
}
}
}
Ankehitriny dia afaka mitsiky ny solontenan'ny kilasintsika:
$object = [MyClass]::new()
$object.Smile($true)
Mety ho be loatra ny fomba; Ankoatra izany, misy kilasy iray
class MyClass2 : MyClass
{
#ΡΠ΅Π»ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, Π±Π°Π·ΠΎΠ²ΡΠΌ Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ MyClass
}
[MyClass2]::new().Smile($true)
Ny famariparitanay momba ny fiasana amin'ny zavatra ao amin'ny PowerShell dia zara raha feno. Amin'ireto boky manaraka ireto, dia hiezaka ny halalinina amin'ny ohatra azo ampiharina isika: ny lahatsoratra fahadimy amin'ny andiany dia hatokana ho an'ny olana amin'ny fampidirana PowerShell amin'ny singa rindrambaiko an'ny antoko fahatelo. Ny ampahany taloha dia azo jerena amin'ny rohy etsy ambany.
Source: www.habr.com