Ko te Powershell Mahi me nga karaehe ehara i te oxymoron, ka kii ahau

Hei Habr! Ka whakaatu ahau ki a koutou te whakamaoritanga o te tuhinga "PowerShell Mahi me nga Karaehe.
Ka oati ahau ehara i te oxymoron"
na Christopher Kuech.

Ko nga tauira kaupapa-a-ahua me nga kaupapa mahi he ahua rerekee tetahi ki tetahi, engari he rite te tautoko e rua i Powershell. Tata ki te katoa o nga reo hotaka, mahi, kore ranei, he whakaurunga mo te herenga ingoa-uara roa; Ko nga karaehe, penei i nga hanganga me nga rekoata, he huarahi kotahi noa. Mena ka whakawhäitihia ta tatou whakamahi i nga Karaehe ki te herenga o nga ingoa me nga uara, me te karo i nga kaupapa kaupapa-a-ahanoa taumaha penei i te tuku iho, te polymorphism, te whakarereketanga ranei, ka taea e tatou te whakamahi i o raatau hua me te kore e whakararu i a tatou waehere. I tua atu, ma te taapiri i nga tikanga whakarereke momo whakarereke, ka taea e taatau te whakarangatira i a maatau waehere mahi me nga Karaehe.

Te makutu o castes

Ko nga Castes tetahi o nga ahuatanga tino kaha o Powershell. Ina maka ana e koe he uara, kei te whakawhirinaki koe ki te arawhitinga me nga mana whakamana ka taapirihia e te taiao ki to tono. Hei tauira, ma te maka noa i te aho ki te [xml] ka rere i roto i te waehere parser ka whakaputa i te rakau xml katoa. Ka taea e tatou te whakamahi i nga Karaehe i roto i ta tatou waehere mo te kaupapa ano.

Makahia nga ripanga

Mena karekau he kaihanga, ka taea e koe te haere tonu me te kore tetahi ma te maka he ripanga ki to momo akomanga. Kaua e wareware ki te whakamahi i nga huanga whakamana kia tino whai hua tenei tauira. I te wa ano, ka taea e tatou te whakamahi i nga ahuatanga kua patohia e te karaehe kia hohonu ake te arataki me te arorau whakamana.

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
}

I tua atu, ka awhina te maka ki te whiwhi i te putanga ma. Whakatauritea te putanga o te raupapa riipene Ripanga Cluster i tukuna ki te Ripanga-Hōputu me te mea ka whiwhi koe ki te maka tuatahi koe i enei ripanga riipene ki roto i te akomanga. Ko nga ahuatanga o te karaehe ka whakarārangihia i nga wa katoa i roto i te raupapa e tautuhia ana ki reira. Kaua e wareware ki te taapiri i te kupu huna i mua i era taonga katoa kaore koe e hiahia kia kitea i roto i nga hua.

Ko te Powershell Mahi me nga karaehe ehara i te oxymoron, ka kii ahau

Maka o tikanga

Mena kei a koe tetahi kaihanga me te tohenga kotahi, ka tukuna he uara ki to momo karaehe ka tukuna te uara ki to kaihanga, ka taea e koe te arawhiti i tetahi tauira o to akomanga.

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"

Maka ki te raina

Ka taea hoki e koe te whakakore i te tikanga karaehe [aho] ToString() hei tautuhi i te arorau kei muri i te tohu aho o te ahanoa, penei i te whakamahi i te wawaotanga aho.

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'"

Makahia nga tauira raupapa

Ka taea e Maka te whakamaaramatanga haumaru. Ka rahua nga tauira i raro nei ki te kore e tutuki nga raraunga ki ta maatau korero i Cluster

# Валидация сериализованных данных

[Cluster]$cluster = Get-Content "./my-cluster.json" | ConvertFrom-Json
[Cluster[]]$clusters = Import-Csv "./my-clusters.csv"

Maka i roto i to waehere mahi

Ko nga kaupapa mahi i te tuatahi ka tautuhi i nga hanganga raraunga, katahi ka whakatinana i te kaupapa hei raupapa o nga huringa i runga i nga hanganga raraunga korekore. Ahakoa te ahua whakahē, ka tino awhina nga karaehe ki a koe ki te tuhi i nga waehere mahi ma te mihi ki nga tikanga whakarereke.

He whaihua te Powershell e tuhi ana ahau?

He maha nga tangata e haere mai ana i te C#, i nga ahuatanga rite ranei kei te tuhi Powershell, he rite ki te C#. Ma te mahi i tenei, kei te neke atu koe i te whakamahi i nga kaupapa kaupapa mahi, ka whai hua pea koe i te ruku nui ki te kaupapa-a-ahanoa i Powershell, te ako atu ranei mo te kaupapa mahi.

Mena ka tino whakawhirinaki koe ki te huri i nga raraunga koretake ma te whakamahi i nga pipeline (|), Where-Object, ForEach-Object, Select-Object, Group-Object, Sort-Object, etc. akomanga i roto i te kāhua mahi.

Te whakamahi mahi o nga karaehe

Ko nga castes, ahakoa ka whakamahi i tetahi wetereo rereke, he mapi noa i waenga i nga rohe e rua. I roto i te paipa, ka taea e koe te mapi i nga momo uara ma te whakamahi i te ForEach-Object.

I roto i te tauira i raro nei, ka mahia te Kaihanga Node i nga wa katoa ka tukuna he Datum, na tenei ka whai waahi ki a maatau kia kaua e tuhi i te nui o te waehere. Ko te mutunga mai, ko ta maatau paipa e aro ana ki te uiuinga korero me te whakahiatotanga, i te wa e tiaki ana a maatau karaehe i te parapara raraunga me te whakamana.

# Пример комбинирования классов с конвейерами для 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

Karaehe takai mo te whakamahi ano

Kaore he mea e pai ana ki te ahua

Kia aroha mai, e kore e taea te kaweake i nga karaehe e nga waahanga i te ahua o nga mahi me nga taurangi; engari tera ano etahi tinihanga. Me kii kua tautuhia o akomanga ki te konae ./my-classes.ps1

  • Ka taea e koe te dotsource te konae me nga karaehe:. ./aku-akomanga.ps1. Ma tenei ka mahia taku-classes.ps1 i roto i to waahi o naianei me te tautuhi i nga akomanga katoa mai i te konae kei reira.

  • Ka taea e koe te hanga i tetahi kōwae Powershell hei kaweake i o API ritenga katoa (cmdlets) ka tautuhi i te ScriptsToProcess = "./my-classes.ps1" taurangi i roto i to whakaaturanga kōwae, me te hua rite: ./my-classes.ps1 ka mahia i roto i to taiao.

Ko tehea whiringa ka whiriwhiria e koe, kia mahara kaore e taea e te punaha momo a Powershell te whakatau i nga momo ingoa kotahi ka utaina mai i nga waahi rereke.
Ahakoa i utaina e koe nga karaehe rite e rua me nga taonga rite mai i nga waahi rereke, ka tupono ka raru koe.

Te huarahi whakamua

Ko te huarahi pai ki te karo i nga raru momo whakatau ko te kore e whakaatu i o karaehe ki nga kaiwhakamahi. Engari i te tumanako ka kawemai te kaiwhakamahi i tetahi momo kua tautuhia e te karaehe, kaweake he mahi mai i to kōwae e whakakore ana i te hiahia ki te uru tika ki te akomanga. Mo te Cluster, ka taea e tatou te kaweake i tetahi mahi-Hu-Kapu hei tautoko i nga huinga tawhā ratarata-kaiwhakamahi me te whakahoki mai i tetahi 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

He aha atu te panui

Mo nga Karaehe
PowerShell parepare
Papatono Mahi i PowerShell

Source: will.com

Tāpiri i te kōrero