Fitar da rubutu na umarni a cikin taga mai fassarar PowerShell hanya ce kawai don nuna bayanai a cikin nau'i mai dacewa da tsinkayen ɗan adam. A gaskiya Laraba
Ɗaukaka:
Abubuwan da ke cikin PowerShell
Bari mu tuna cewa abu shine tarin filayen bayanai (kayayyaki, abubuwan da suka faru, da sauransu) da hanyoyin sarrafa su (hanyoyi). An ƙayyade tsarinsa ta nau'i, wanda yawanci ya dogara ne akan azuzuwan da ake amfani da su a cikin haɗin kai na NET Core. Hakanan yana yiwuwa a yi aiki tare da COM, CIM (WMI) da abubuwan ADSI. Ana buƙatar kaddarorin da hanyoyin don aiwatar da ayyuka daban-daban akan bayanai; Bugu da ƙari, a cikin PowerShell, ana iya wuce abubuwa azaman muhawara zuwa ayyuka da cmdlets, sanya ƙimar su ga masu canji, kuma akwai kuma
Duban tsarin abubuwa
Misali, bari mu gudanar da Get-Process cmdlet, wanda ke ba ka damar samun bayanai game da hanyoyin da ke gudana a cikin tsarin:
Zai nuna wasu bayanan rubutu da aka tsara waɗanda ba su ba da wani ra'ayi game da kaddarorin abubuwan da aka dawo da su da hanyoyin su ba. Don daidaita fitarwa, muna buƙatar koyon yadda ake bincika tsarin abubuwa, kuma cmdlet Get-Member zai taimaka mana da wannan:
Get-Process | Get-Member
Anan mun riga mun ga nau'i da tsari, kuma tare da taimakon ƙarin sigogi za mu iya, alal misali, nuna kawai kaddarorin abin da aka haɗa a cikin shigarwar:
Get-Process | Get-Member -MemberType Property
Za a buƙaci wannan ilimin don magance matsalolin gudanarwa ta hanyar mu'amala ko kuma rubuta rubutun naku: misali, don samun bayanai game da tsarin rataye ta amfani da kadarorin Amsa.
Tace abubuwa
PowerShell yana ba da damar abubuwan da suka dace da wani sharadi su wuce ta bututun:
Where-Object { блок сценария }
Sakamakon aiwatar da toshe rubutun a cikin baƙaƙe dole ne ya zama ƙimar boolean. Idan gaskiya ne (gaskiya), abin da aka shigar a cikin Inda-Object cmdlet za a wuce shi tare da bututun, in ba haka ba ($ karya) za a goge shi. Misali, bari mu nuna jerin ayyukan da aka dakatar da Windows Server, watau. Wadanda Matsayinsu aka saita zuwa "Tsayawa":
Get-Service | Where-Object {$_.Status -eq "Stopped"}
Anan kuma muna ganin wakilcin rubutu, amma idan kuna son fahimtar nau'in da tsarin ciki na abubuwan da ke wucewa ta cikin bututun ba shi da wahala:
Get-Service | Where-Object {$_.Status -eq "Stopped"} | Get-Member
Rarraba abubuwa
Lokacin sarrafa bututun abubuwa, galibi ana buƙatar warware su. Ana ƙaddamar da cmdlet-Object-Abin da aka ƙaddamar da sunayen kaddarorin (maɓallai masu rarraba) kuma suna dawo da abubuwan da aka yi oda ta ƙimar su. Yana da sauƙi don warware abubuwan da aka fitar na tafiyar matakai ta hanyar CPU lokacin da aka kashe (dukiyar cpu):
Get-Process | Sort-Object –Property cpu
Za'a iya tsallake siginar -Property lokacin kiran cmdlet Tsarin-Object; ana amfani dashi ta tsohuwa. Don juyawa baya, yi amfani da madaidaicin -Dscending:
Get-Process | Sort-Object cpu -Descending
Zabar abubuwa da sassansu
cmdlet Select-Object yana ba ka damar zaɓar takamaiman adadin abubuwa a farkon ko ƙarshen bututun ta amfani da sigogi -First ko -Last. Tare da taimakonsa, zaku iya zaɓar abubuwa guda ɗaya ko wasu kaddarorin, sannan ƙirƙirar sabbin abubuwa dangane da su. Bari mu kalli yadda cmdlet ke aiki ta amfani da misalai masu sauƙi.
Umurni mai zuwa yana nuna bayanai game da matakai 10 da ke cinye matsakaicin adadin RAM (dukiyar WS):
Get-Process | Sort-Object WS -Descending | Select-Object -First 10
Kuna iya zaɓar wasu kaddarorin abubuwan da ke wucewa ta cikin bututun kuma ƙirƙirar sababbi akan su:
Get-Process | Select-Object ProcessName, Id -First 1
Sakamakon aikin bututun, za mu sami sabon abu, wanda tsarinsa zai bambanta da tsarin da Get-Process cmdlet ya dawo. Bari mu tabbatar da wannan ta amfani da Get-Member:
Get-Process | Select-Object ProcessName, Id -First 1 | Get-Member
Lura cewa Zaɓi-Object yana dawo da abu ɗaya (-First 1) wanda ke da filayen guda biyu kawai da muka ayyana: an kwafi ƙimar su daga abu na farko da aka shiga cikin bututun ta hanyar Get-Process cmdlet. Ɗaya daga cikin hanyoyin ƙirƙirar abubuwa a cikin rubutun PowerShell ya dogara ne akan amfani da Zaɓi-Object:
$obj = Get-Process | Select-Object ProcessName, Id -First 1
$obj.GetType()
Ta amfani da Zaɓi-Abin, za ka iya ƙara ƙididdiga kaddarorin zuwa abubuwan da ke buƙatar wakilci a matsayin
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}}
Bari mu kalli tsarin abubuwan da ke wucewa ta hanyar isar da sako:
Get-Process | Select-Object -Property ProcessName, @{Name="StartTime"; Expression = {$_.StartTime.Minute}} | Get-Member
ForKowane-abu, Rukuni-abu da Auna-Abu
Akwai wasu cmdlets don aiki da abubuwa. A matsayin misali, bari mu yi magana game da mafi amfani guda uku:
ForKowane-abu yana ba ku damar gudanar da lambar PowerShell ga kowane abu a cikin bututun:
ForEach-Object { блок сценария }
Rukuni-abu Ƙungiyoyin abubuwa ta ƙimar dukiya:
Group-Object PropertyName
Idan kun gudanar da shi tare da ma'aunin -NoElement, zaku iya gano adadin abubuwan da ke cikin ƙungiyoyi.
Auna-Abu yana tara sigogi daban-daban na taƙaitawa ta ƙimar filin abu a cikin bututun (ƙididdigar jimlar, kuma yana samun mafi ƙarancin ƙima, matsakaici ko matsakaici):
Measure-Object -Property PropertyName -Minimum -Maximum -Average -Sum
Yawanci, cmdlets da aka tattauna ana amfani da su ta hanyar mu'amala, kuma galibi ana ƙirƙira su a cikin rubutun.
Ƙirƙirar abubuwan NET da COM (Sabon-Abu)
Akwai abubuwa da yawa na software tare da NET Core da COM musaya waɗanda ke da amfani ga masu gudanar da tsarin. Yin amfani da ajin System.Diagnostics.EventLog, za ku iya sarrafa rajistan ayyukan kai tsaye daga Windows PowerShell. Bari mu kalli misalin ƙirƙirar misalin wannan ajin ta amfani da Sabon-Object cmdlet tare da ma'aunin -TypeName:
New-Object -TypeName System.Diagnostics.EventLog
Tun da ba mu ƙididdige takamaiman tarihin taron ba, sakamakon ajin ba ya ƙunshi bayanai. Don canza wannan, kuna buƙatar kiran hanyar gini na musamman yayin ƙirƙirar ta ta amfani da sigar -ArgumentList. Idan muna son samun shiga log ɗin aikace-aikacen, yakamata mu wuce kirtani "Aikace-aikacen" azaman hujja ga mai ginin:
$AppLog = New-Object -TypeName System.Diagnostics.EventLog -ArgumentList Application
$AppLog
Lura cewa mun adana fitar da umarni a cikin madaidaicin $AppLog. Ko da yake ana yawan amfani da bututun a yanayin mu'amala, rubutun rubutu sau da yawa yana buƙatar kiyaye abin da ake magana a kai. Bugu da ƙari, ainihin azuzuwan NET Core suna ƙunshe a cikin Tsarin suna: PowerShell ta tsohuwa yana neman takamaiman nau'ikan a ciki, don haka rubuta Diagnostics.EventLog maimakon System.Diagnostics.EventLog daidai ne.
Don yin aiki tare da log ɗin, zaku iya amfani da hanyoyin da suka dace:
$AppLog | Get-Member -MemberType Method
Bari mu ce an share shi ta hanyar Clear() idan akwai haƙƙin shiga:
$AppLog.Clear()
Sabon-Object cmdlet kuma ana amfani dashi don aiki tare da abubuwan haɗin COM. Akwai da yawa daga cikinsu - daga ɗakunan karatu da aka kawo tare da uwar garken rubutun Windows zuwa aikace-aikacen ActiveX, kamar Internet Explorer. Don ƙirƙirar abu na COM, kuna buƙatar saita ma'aunin -ComObject tare da ProgId na shirye-shirye na aji da ake so:
New-Object -ComObject WScript.Shell
New-Object -ComObject WScript.Network
New-Object -ComObject Scripting.Dictionary
New-Object -ComObject Scripting.FileSystemObject
Don ƙirƙirar abubuwan naku tare da tsari na sabani, ta amfani da Sabon-Abin da alama yana da ban mamaki kuma yana da wahala; ana amfani da wannan cmdlet don aiki tare da abubuwan software na waje zuwa PowerShell. A cikin talifofi na gaba za a tattauna wannan batu dalla-dalla. Baya ga abubuwan NET da COM, za mu kuma bincika abubuwan CIM (WMI) da abubuwan ADSI.
Hanyoyin Kira A tsaye
Wasu .NET Core azuzuwan ba za a iya nan take, ciki har da System.Muhalli da System.Math. Su ne
[System.Environment] | Get-Member
Don duba mambobi masu tsayuwa kawai, kira Get-Member tare da ma'aunin -Static (lura nau'in abu):
[System.Environment] | Get-Member -Static
Don samun dama ga kaddarorin madaidaici da hanyoyin, yi amfani da colons jere guda biyu maimakon lokaci bayan na zahiri:
[System.Environment]::OSVersion
Ko
$test=[System.Math]::Sqrt(25)
$test
$test.GetType()
Nau'in PSUStomObject
Daga cikin nau'ikan bayanai da yawa da ake samu a cikin PowerShell, yana da kyau a ambaci PSCustomObject, wanda aka ƙera don adana abubuwa tare da tsari na sabani. Ƙirƙirar irin wannan abu ta amfani da Sabon-Object cmdlet ana ɗaukarsa a matsayin al'ada, amma hanya mai banƙyama da tsohuwar hanya:
$object = New-Object –TypeName PSCustomObject -Property @{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'}
Bari mu dubi tsarin abin:
$object | Get-Member
An fara da PowerShell 3.0, akwai wani tsarin aiki:
$object = [PSCustomObject]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Kuna iya samun damar bayanan ta ɗaya daga cikin hanyoyi masu dacewa:
$object.Name
$object.'Name'
$value = 'Name'
$object.$value
Ga misali na juyar da hashtable da ke akwai zuwa abu:
$hash = @{'Name'='Ivan Danko'; 'City'='Moscow'; 'Country'='Russia'}
$hash.GetType()
$object = [pscustomobject]$hash
$object.GetType()
Ɗaya daga cikin rashin amfani na abubuwa irin wannan shine tsarin kayan su na iya canzawa. Don guje wa wannan, dole ne ku yi amfani da sifa [an yi oda]:
$object = [PSCustomObject][ordered]@{Name = 'Ivan Danko';
City = 'Moscow';
Country = 'Russia'
}
Akwai wasu zaɓuɓɓuka don ƙirƙirar abu: sama mun duba ta amfani da cmdlet
$object | Add-Member –MemberType NoteProperty –Name Age –Value 33
$object | Get-Member
cmdlet Ƙara-Member yana ba ku damar ƙara ba kawai kaddarorin ba, har ma da hanyoyin zuwa abin da aka ƙirƙira a baya $ abu ta amfani da ginin "-MemberType ScriptMethod":
$ScriptBlock = {
# код
}
$object | Add-Member -Name "MyMethod" -MemberType ScriptMethod -Value $ScriptBlock
$object | Get-Member
Lura cewa mun yi amfani da canjin nau'in ScriptBlock na $ScriptBlock don adana lambar don sabuwar hanyar.
Don cire kaddarorin, yi amfani da hanyar da ta dace:
$object.psobject.properties.remove('Name')
Ƙirƙirar Azuzuwan ku
PowerShell 5.0 ya gabatar da ikon ayyana
class MyClass
{
# тело класса
}
Wannan nau'in NET Core na gaskiya ne, tare da jiki wanda ke bayyana kaddarorinsa, hanyoyinsa, da sauran abubuwa. Bari mu kalli misali na ayyana aji mafi sauƙi:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
}
Don ƙirƙirar abu (misali aji), yi amfani da cmdlet
$object = New-Object -TypeName MyClass
ko
$object = [MyClass]::new()
Bari mu yi nazarin tsarin abin:
$object | Get-Member
Kar a manta game da iyaka: ba za ku iya komawa zuwa nau'in suna azaman kirtani ba ko amfani da nau'in zahiri a wajen rubutun ko tsarin da aka ayyana ajin a ciki. A wannan yanayin, ayyuka na iya dawo da misalan aji (abubuwa) waɗanda za a iya samun damar zuwa wajen ƙirar ko rubutun.
Bayan ƙirƙirar abun, cika abubuwansa:
$object.Name = 'Ivan Danko'
$object.City = 'Moscow'
$object.Country = 'Russia'
$object
Lura cewa bayanin aji yana ƙayyadaddun ba kawai nau'ikan kadarori ba, amma har ma da tsoffin ƙima.
class Example
{
[string]$Name = 'John Doe'
}
Bayanin hanyar aji yayi kama da bayanin aiki, amma ba tare da amfani da kalmar aiki ba. Kamar a cikin aiki, ana wuce sigogi zuwa hanyoyin idan ya cancanta:
class MyClass
{
[string]$Name
[string]$City
[string]$Country
#описание метода
Smile([bool]$param1)
{
If($param1) {
Write-Host ':)'
}
}
}
Yanzu wakilin ajin mu na iya yin murmushi:
$object = [MyClass]::new()
$object.Smile($true)
Hanyoyi na iya yin lodi fiye da kima; Bugu da kari, aji yana da
class MyClass2 : MyClass
{
#тело нового класса, базовым для которого является MyClass
}
[MyClass2]::new().Smile($true)
Bayanin mu na aiki tare da abubuwa a cikin PowerShell bai cika cika ba. A cikin wallafe-wallafen masu zuwa, za mu yi ƙoƙarin zurfafa shi tare da misalai masu amfani: labarin na biyar a cikin jerin za a keɓe ne ga batutuwan haɗa PowerShell tare da abubuwan software na ɓangare na uku. Ana iya samun sassan da suka gabata a hanyoyin haɗin da ke ƙasa.
source: www.habr.com