Pa Habr! Ndikupereka kwa inu kumasulira kwa nkhaniyi
Ndikulonjeza kuti si oxymoron"
Ma paradigm okhazikika pazinthu komanso ogwira ntchito amatha kuwoneka ngati akusemphana, koma onse amathandizidwa chimodzimodzi mu Powershell. Pafupifupi zilankhulo zonse zamapulogalamu, zogwira ntchito kapena ayi, zimakhala ndi zida zomangirira dzina; Makalasi, monga ma structs ndi zolemba, ndi njira imodzi yokha. Ngati tichepetsa kugwiritsa ntchito Makalasi kuti tigwirizane ndi mayina ndi zikhalidwe, ndikupewa malingaliro olemetsa okhudzana ndi zinthu monga cholowa, polymorphism, kapena mutability, titha kugwiritsa ntchito mwayi wawo popanda kusokoneza ma code athu. Kuphatikiza apo, powonjezera njira zosinthira zosasinthika, titha kulemeretsa khodi yathu yogwira ntchito ndi Makalasi.
Matsenga a castes
Castes ndi imodzi mwazinthu zamphamvu kwambiri mu Powershell. Mukapereka mtengo, mukudalira kukhazikitsidwa kotsimikizika ndi kuthekera kotsimikizira komwe chilengedwe chimawonjezera pakugwiritsa ntchito kwanu. Mwachitsanzo, kungoponya chingwe mu [xml] kumadutsa parser code ndikupanga mtengo wathunthu wa xml. Titha kugwiritsa ntchito Makalasi mu code yathu pa cholinga chomwecho.
Ikani ma hashtable
Ngati mulibe womanga, mutha kupitiriza popanda mmodzi poponya hashtable ku mtundu wa kalasi yanu. Musaiwale kugwiritsa ntchito zizindikiro zotsimikizira kuti mupindule ndi ndondomekoyi. Nthawi yomweyo, titha kugwiritsa ntchito zomwe zidalembedwa m'kalasiyi kuti tigwiritse ntchito zoyambira komanso zotsimikizira.
class Cluster {
[ValidatePattern("^[A-z]+$")]
[string] $Service
[ValidateSet("TEST", "STAGE", "CANARY", "PROD")]
[string] $FlightingRing
[ValidateSet("EastUS", "WestUS", "NorthEurope")]
[string] $Region
[ValidateRange(0, 255)]
[int] $Index
}
[Cluster]@{
Service = "MyService"
FlightingRing = "PROD"
Region = "EastUS"
Index = 2
}
Kuphatikiza apo, kuponya kumathandizira kuti pakhale kutulutsa koyera. Fananizani zotsatira za Cluster hashtable array yopititsidwa ku Format-Table ndi zomwe mumapeza ngati mutaponya koyamba ma hashtable mukalasi. Katundu wa kalasi nthawi zonse amalembedwa mu dongosolo lomwe amatanthauziridwa pamenepo. Musaiwale kuwonjezera mawu obisika pamaso pa zinthu zonse zomwe simukufuna kuti ziwonekere pazotsatira.
Kutaya matanthauzo
Ngati muli ndi womanga ndi mkangano umodzi, kuponya mtengo ku mtundu wa kalasi yanu kudzapereka mtengo kwa womanga wanu, kumene mungathe kuyambitsa chitsanzo cha kalasi yanu.
class Cluster {
[ValidatePattern("^[A-z]+$")]
[string] $Service
[ValidateSet("TEST", "STAGE", "CANARY", "PROD")]
[string] $FlightingRing
[ValidateSet("EastUS", "WestUS", "NorthEurope")]
[string] $Region
[ValidateRange(0, 255)]
[int] $Index
Cluster([string] $id) {
$this.Service, $this.FlightingRing, $this.Region, $this.Index = $id -split "-"
}
}
[Cluster]"MyService-PROD-EastUS-2"
Ponyani pamzere
Mukhozanso kupitirira njira ya kalasi ya [chingwe] ToString() kuti mufotokoze malingaliro omwe ali kumbuyo kwa chingwe cha chinthucho, monga kugwiritsa ntchito kumasulira kwa chingwe.
class Cluster {
[ValidatePattern("^[A-z]+$")]
[string] $Service
[ValidateSet("TEST", "STAGE", "CANARY", "PROD")]
[string] $FlightingRing
[ValidateSet("EastUS", "WestUS", "NorthEurope")]
[string] $Region
[ValidateRange(0, 255)]
[int] $Index
[string] ToString() {
return $this.Service, $this.FlightingRing, $this.Region, $this.Index -join "-"
}
}
$cluster = [Cluster]@{
Service = "MyService"
FlightingRing = "PROD"
Region = "EastUS"
Index = 2
}
Write-Host "We just created a model for '$cluster'"
Onetsani zochitika zosawerengeka
Kuponya kumapangitsa kuti chitetezo chisawonongeke. Zitsanzo zomwe zili pansipa zidzalephera ngati deta siyikugwirizana ndi zomwe tafotokoza mu Cluster
# ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
[Cluster]$cluster = Get-Content "./my-cluster.json" | ConvertFrom-Json
[Cluster[]]$clusters = Import-Csv "./my-clusters.csv"
Imayika mu code yanu yogwira ntchito
Mapulogalamu ogwira ntchito amayamba kufotokozera mapangidwe a deta, kenaka agwiritse ntchito pulogalamuyo monga kusintha kwazinthu zosasinthika. Ngakhale kutsutsanako, makalasi amakuthandizani kuti mulembe ma code ogwira ntchito chifukwa cha njira zosinthira.
Kodi Powershell yomwe ndikulemba imagwira ntchito?
Anthu ambiri ochokera ku C # kapena maziko ofanana akulemba Powershell, yomwe ili yofanana ndi C #. Pochita izi, mukuchoka pakugwiritsa ntchito malingaliro opangira mapulogalamu ndipo mungapindule kwambiri ndikudumphira m'mapulogalamu omwe ali ndi zinthu mu Powershell kapena kuphunzira zambiri zamapulogalamu ogwirira ntchito.
Ngati mumadalira kwambiri pakusintha deta yosasinthika pogwiritsa ntchito mapaipi (|), Where-Object, ForEach-Object, Select-Object, Group-Object, Sort-Object, ndi zina zotero - muli ndi kalembedwe ka ntchito ndipo mudzapindula pogwiritsa ntchito Powershell magalasi m'njira yogwira ntchito.
Kugwiritsa ntchito magalasi
Castes, ngakhale amagwiritsa ntchito syntax ina, ndi mapu chabe pakati pa madera awiri. M'mapaipi, mutha kupanga mapu amitundu yambiri pogwiritsa ntchito ForEach-Object.
Muchitsanzo chomwe chili pansipa, womanga wa Node amachitidwa nthawi iliyonse Datum ikaponyedwa, ndipo izi zimatipatsa mwayi wopewa kulemba nambala yoyenera. Zotsatira zake, payipi yathu imayang'ana kwambiri pakufunsa ndi kusonkhanitsa deta, pomwe makalasi athu amasamalira kusanthula ndi kutsimikizira.
# ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² Ρ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°ΠΌΠΈ Π΄Π»Ρ separation of concerns Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°Ρ
class Node {
[ValidateLength(3, 7)]
[string] $Name
[ValidateSet("INT", "PPE", "PROD")]
[string] $FlightingRing
[ValidateSet("EastUS", "WestUS", "NorthEurope", "WestEurope")]
[string] $Region
Node([string] $Name) {
$Name -match "([a-z]+)(INT|PPE|PROD)([a-z]+)"
$_, $this.Service, $this.FlightingRing, $this.Region = $Matches
$this.Name = $Name
}
}
class Datum {
[string] $Name
[int] $Value
[Node] $Computer
[int] Severity() {
$this.Name -match "[0-9]+$"
return $Matches[0]
}
}
Write-Host "Urgent Security Audit Issues:"
Import-Csv "./audit-results.csv" `
| ForEach-Object {[Datum]$_} `
| Where-Object Value -gt 0 `
| Group-Object {$_.Severity()} `
| Where-Object Name -lt 2 `
| ForEach-Object Group `
| ForEach-Object Computer `
| Where-Object FlightingRing -eq "PROD" `
| Sort-Object Name, Region -Unique
Gulu lolongedza kuti ligwiritsidwenso ntchito
Palibe chomwe chili chabwino monga chikuwonekera
Tsoka ilo, makalasi sangathe kutumizidwa kunja ndi ma modules mofanana ndi ntchito kapena zosiyana; koma pali zidule. Tinene kuti makalasi anu afotokozedwa mufayilo ./my-classes.ps1
-
Mutha kutsitsa fayilo ndi makalasi:. ./my-classes.ps1. Izi zigwira my-classes.ps1 muzomwe muli nazo ndikutanthauzira makalasi onse kuchokera pafayiloyo.
-
Mutha kupanga gawo la Powershell lomwe limatumiza kunja ma API anu onse (cmdlets) ndikuyika ScriptsToProcess = "./my-classes.ps1" kusinthika mu chiwonetsero cha gawo lanu, ndi zotsatira zomwezo: ./my-classes.ps1 ichita mu chilengedwe chanu.
Chilichonse chomwe mungasankhe, dziwani kuti mtundu wa Powershell sungathe kuthetsa mitundu ya dzina lomwelo lokwezedwa m'malo osiyanasiyana.
Ngakhale mutanyamula magulu awiri ofanana omwe ali ndi katundu wofanana kuchokera kumalo osiyanasiyana, mumakhala pachiwopsezo chokumana ndi mavuto.
Njira yakutsogolo
Njira yabwino yopewera zovuta zamtundu wamtundu ndikusawonetsa makalasi anu kwa ogwiritsa ntchito. M'malo moyembekezera wogwiritsa ntchito kuitanitsa mtundu wofotokozedwa m'kalasi, tumizani ntchito kuchokera ku module yanu yomwe imachotsa kufunikira kofikira kalasi mwachindunji. Kwa Cluster, titha kutumiza ntchito ya New-Cluster yomwe imathandizira ma seti osavuta kugwiritsa ntchito ndikubwezeretsa Cluster.
class Cluster {
[ValidatePattern("^[A-z]+$")]
[string] $Service
[ValidateSet("TEST", "STAGE", "CANARY", "PROD")]
[string] $FlightingRing
[ValidateSet("EastUS", "WestUS", "NorthEurope")]
[string] $Region
[ValidateRange(0, 255)]
[int] $Index
}
function New-Cluster {
[OutputType([Cluster])]
Param(
[Parameter(Mandatory, ParameterSetName = "Id", Position = 0)]
[ValidateNotNullOrEmpty()]
[string] $Id,
[Parameter(Mandatory, ParameterSetName = "Components")]
[string] $Service,
[Parameter(Mandatory, ParameterSetName = "Components")]
[string] $FlightingRing,
[Parameter(Mandatory, ParameterSetName = "Components")]
[string] $Region,
[Parameter(Mandatory, ParameterSetName = "Components")]
[int] $Index
)
if ($Id) {
$Service, $FlightingRing, $Region, $Index = $Id -split "-"
}
[Cluster]@{
Service = $Service
FlightingRing = $FlightingRing
Region = $Region
Index = $Index
}
}
Export-ModuleMember New-Cluster
Chinanso choti muwerenge
Source: www.habr.com