āĻšā§ āĻšāĻžāĻŦāĻ°! āĻāĻŽāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋāĻ° āĻ
āĻ¨ā§āĻŦāĻžāĻĻ āĻāĻĒāĻ¨āĻžāĻ° āĻĻā§āĻˇā§āĻāĻŋ āĻāĻāĻ°ā§āĻˇāĻŖ āĻāĻ°āĻāĻŋ
āĻāĻŽāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻĻāĻŋāĻā§āĻāĻŋ āĻ¯ā§ āĻāĻāĻŋ āĻ
āĻā§āĻ¸āĻŋāĻŽā§āĻ°āĻ¨ āĻ¨āĻ¯āĻŧ"
āĻ āĻŦāĻā§āĻā§āĻ-āĻāĻ°āĻŋāĻ¯āĻŧā§āĻ¨ā§āĻā§āĻĄ āĻāĻŦāĻ āĻāĻžāĻ°ā§āĻ¯āĻāĻ°ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ āĻĻā§āĻˇā§āĻāĻžāĻ¨ā§āĻ¤ āĻāĻā§ āĻ āĻĒāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻŽāĻ¤āĻā§āĻĻ āĻŦāĻ˛ā§ āĻŽāĻ¨ā§ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¤āĻŦā§ āĻāĻāĻ¯āĻŧāĻ āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ°āĻļā§āĻ˛ā§ āĻ¸āĻŽāĻžāĻ¨āĻāĻžāĻŦā§ āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤āĨ¤ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ¸āĻŦ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ āĻ˛ā§āĻ¯āĻžāĻā§āĻā§āĻ¯āĻŧā§āĻ, āĻāĻžāĻ°ā§āĻ¯āĻāĻ°ā§ āĻŦāĻž āĻ¨āĻž, āĻŦāĻ°ā§āĻ§āĻŋāĻ¤ āĻ¨āĻžāĻŽ-āĻŽāĻžāĻ¨ āĻŦāĻžāĻāĻ¨ā§āĻĄāĻŋāĻāĻ¯āĻŧā§āĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻ°āĻ¯āĻŧā§āĻā§; āĻā§āĻ˛āĻžāĻ¸, āĻ¸ā§āĻā§āĻ°āĻžāĻāĻ āĻāĻŦāĻ āĻ°ā§āĻāĻ°ā§āĻĄā§āĻ° āĻŽāĻ¤ā§, āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻāĻŋ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĨ¤ āĻāĻŽāĻ°āĻž āĻ¯āĻĻāĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻā§ āĻ¨āĻžāĻŽ āĻāĻŦāĻ āĻŽāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻŦāĻžāĻāĻ§āĻžāĻāĻ¯āĻŧā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§ āĻ°āĻžāĻāĻŋ āĻāĻŦāĻ āĻāĻ¤ā§āĻ¤āĻ°āĻžāĻ§āĻŋāĻāĻžāĻ°, āĻĒāĻ˛āĻŋāĻŽāĻ°āĻĢāĻŋāĻāĻŽ āĻŦāĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§āĻ˛āĻ¤āĻžāĻ° āĻŽāĻ¤ā§ āĻāĻžāĻ°ā§ āĻŦāĻ¸ā§āĻ¤ā§-āĻāĻŋāĻ¤ā§āĻ¤āĻŋāĻ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ āĻ§āĻžāĻ°āĻŖāĻžāĻā§āĻ˛āĻŋ āĻāĻĄāĻŧāĻžāĻ¤ā§ āĻĒāĻžāĻ°āĻŋ, āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻĄāĻā§ āĻāĻāĻŋāĻ˛ āĻ¨āĻž āĻāĻ°ā§āĻ āĻ¸ā§āĻā§āĻ˛āĻŋāĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻ¨āĻŋāĻ¤ā§ āĻĒāĻžāĻ°āĻŋāĨ¤ āĻāĻ°āĻ, āĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§āĻ¯āĻŧ āĻāĻžāĻāĻĒ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ¯ā§āĻ āĻāĻ°ā§, āĻāĻŽāĻ°āĻž āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻžāĻ°ā§āĻ¯āĻāĻ°ā§ āĻā§āĻĄāĻā§ āĻ¸āĻŽā§āĻĻā§āĻ§ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋāĨ¤
āĻāĻžāĻ¤-āĻĒāĻžāĻ¤ā§āĻ° āĻāĻžāĻĻā§
āĻŦāĻ°ā§āĻŖāĻā§āĻ˛āĻŋ āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ°āĻļā§āĻ˛ā§āĻ° āĻ āĻ¨ā§āĻ¯āĻ¤āĻŽ āĻļāĻā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĨ¤ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻāĻ¨ āĻāĻāĻāĻŋ āĻŽāĻžāĻ¨ āĻāĻžāĻ¸ā§āĻ āĻāĻ°ā§āĻ¨, āĻ¤āĻāĻ¨ āĻāĻĒāĻ¨āĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ā§ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻ¯ā§āĻ āĻāĻ°ā§ āĻāĻŽāĻ¨ āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻšāĻŋāĻ¤ āĻĒā§āĻ°āĻžāĻ°āĻŽā§āĻāĻŋāĻāĻ¤āĻž āĻāĻŦāĻ āĻŦā§āĻ§āĻ¤āĻž āĻā§āĻˇāĻŽāĻ¤āĻžāĻ° āĻāĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ° āĻāĻ°āĻā§āĻ¨āĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻā§āĻŦāĻ˛āĻŽāĻžāĻ¤ā§āĻ° [xml] āĻ āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻ āĻāĻžāĻ¸ā§āĻ āĻāĻ°āĻž āĻāĻāĻŋāĻā§ āĻĒāĻžāĻ°ā§āĻ¸āĻžāĻ° āĻā§āĻĄā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻāĻžāĻ˛āĻžāĻŦā§ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ xml āĻā§āĻ°āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŦā§āĨ¤ āĻāĻŽāĻ°āĻž āĻāĻāĻ āĻāĻĻā§āĻĻā§āĻļā§āĻ¯ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻĄā§ āĻā§āĻ˛āĻžāĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋāĨ¤
āĻšā§āĻ¯āĻžāĻļāĻā§āĻŦāĻ˛ āĻāĻžāĻ¸ā§āĻ āĻāĻ°ā§āĻ¨
āĻāĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ āĻāĻ¨āĻ¸ā§āĻā§āĻ°āĻžāĻā§āĻāĻ° āĻ¨āĻž āĻĨāĻžāĻā§, āĻāĻĒāĻ¨āĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻ§āĻ°āĻ¨ā§ āĻāĻāĻāĻŋ āĻšā§āĻ¯āĻžāĻļāĻā§āĻŦāĻ˛ āĻāĻžāĻ¸ā§āĻ āĻāĻ°ā§ āĻāĻāĻāĻŋ āĻāĻžāĻĄāĻŧāĻž āĻāĻžāĻ˛āĻŋāĻ¯āĻŧā§ āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻāĻ āĻĒā§āĻ¯āĻžāĻāĻžāĻ°ā§āĻ¨ā§āĻ° āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻ¨āĻŋāĻ¤ā§ āĻŦā§āĻ§āĻāĻ°āĻŖ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻā§āĻ˛āĻŦā§āĻ¨ āĻ¨āĻžāĨ¤ āĻāĻāĻ āĻ¸āĻŽāĻ¯āĻŧā§, āĻāĻŽāĻ°āĻž āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻāĻžāĻāĻĒ āĻāĻ°āĻž āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻā§āĻ˛āĻŋāĻā§ āĻāĻ°āĻ āĻāĻā§āĻ°āĻ¤āĻ° āĻĒā§āĻ°āĻžāĻ°āĻŽā§āĻāĻŋāĻāĻ¤āĻž āĻāĻŦāĻ āĻŦā§āĻ§āĻ¤āĻž āĻ˛āĻāĻŋāĻ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋāĨ¤
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
}
āĻāĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻĸāĻžāĻ˛āĻžāĻ āĻāĻāĻāĻŋ āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻāĻāĻāĻĒā§āĻ āĻĒā§āĻ¤ā§ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°ā§āĨ¤ āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻ-āĻā§āĻŦāĻŋāĻ˛ā§ āĻĒāĻžāĻ¸ āĻāĻ°āĻž āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻšā§āĻ¯āĻžāĻļāĻā§āĻŦāĻ˛ āĻ ā§āĻ¯āĻžāĻ°ā§āĻ° āĻāĻāĻāĻĒā§āĻ āĻ¤ā§āĻ˛āĻ¨āĻž āĻāĻ°ā§āĻ¨ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻ āĻšā§āĻ¯āĻžāĻļāĻā§āĻŦāĻ˛āĻā§āĻ˛āĻŋāĻā§ āĻĒā§āĻ°āĻĨāĻŽā§ āĻāĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¸ā§ āĻāĻžāĻ¸ā§āĻ āĻāĻ°ā§āĻ¨ āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻŋ āĻā§ āĻĒāĻžāĻŦā§āĻ¨āĨ¤ āĻāĻāĻāĻŋ āĻļā§āĻ°ā§āĻŖā§āĻ° āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯āĻā§āĻ˛āĻŋ āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻ¤āĻžāĻ˛āĻŋāĻāĻžāĻā§āĻā§āĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻ¯ā§ āĻā§āĻ°āĻŽā§ āĻ¸ā§āĻā§āĻ˛āĻŋāĻā§ āĻ¸ā§āĻāĻžāĻ¨ā§ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻĒāĻ¨āĻŋ āĻĢāĻ˛āĻžāĻĢāĻ˛ā§ āĻĻā§āĻļā§āĻ¯āĻŽāĻžāĻ¨ āĻšāĻ¤ā§ āĻāĻžāĻ¨ āĻ¨āĻž āĻ¯ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ āĻāĻā§ āĻ˛ā§āĻāĻžāĻ¨ā§ āĻā§āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛āĻŦā§āĻ¨ āĻ¨āĻž.
āĻ āĻ°ā§āĻĨā§āĻ° āĻāĻžāĻ¸ā§āĻ
āĻāĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ āĻāĻāĻāĻŋ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻ āĻ¸āĻš āĻāĻāĻāĻŋ āĻāĻ¨āĻ¸ā§āĻā§āĻ°āĻžāĻā§āĻāĻ° āĻĨāĻžāĻā§ āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻ§āĻ°āĻŖā§ āĻāĻāĻāĻŋ āĻŽāĻžāĻ¨ āĻāĻžāĻ¸ā§āĻ āĻāĻ°āĻž āĻāĻĒāĻ¨āĻžāĻ° āĻāĻ¨āĻ¸ā§āĻā§āĻ°āĻžāĻā§āĻāĻ°ā§āĻ° āĻāĻžāĻā§ āĻŽāĻžāĻ¨āĻāĻŋ āĻĒāĻžāĻ¸ āĻāĻ°āĻŦā§, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻĒāĻ¨āĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻļā§āĻ°ā§ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
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"
āĻ˛āĻžāĻāĻ¨ā§ āĻāĻžāĻ¸ā§āĻ āĻāĻ°ā§āĻ¨
āĻāĻĒāĻ¨āĻŋ āĻ āĻŦāĻā§āĻā§āĻā§āĻ° āĻ¸ā§āĻā§āĻ°āĻŋāĻ āĻāĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻĒāĻŋāĻāĻ¨ā§ āĻ¯ā§āĻā§āĻ¤āĻŋ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ [string] ToString() āĻā§āĻ˛āĻžāĻ¸ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻā§ āĻāĻāĻžāĻ°āĻ°āĻžāĻāĻĄ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻ¯ā§āĻŽāĻ¨ āĻ¸ā§āĻā§āĻ°āĻŋāĻ āĻāĻ¨ā§āĻāĻžāĻ°āĻĒā§āĻ˛ā§āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĨ¤
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'"
āĻ¸āĻŋāĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛āĻžāĻāĻāĻĄ āĻĻā§āĻˇā§āĻāĻžāĻ¨ā§āĻ¤ āĻāĻžāĻ¸ā§āĻ āĻāĻ°ā§āĻ¨
āĻāĻžāĻ¸ā§āĻ āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻ āĻĄāĻŋāĻ¸āĻŋāĻ°āĻŋāĻ¯āĻŧāĻžāĻ˛āĻžāĻāĻā§āĻļāĻ¨ā§āĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻ¯āĻŧāĨ¤ āĻ¨ā§āĻā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖāĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻ°ā§āĻĨ āĻšāĻŦā§ āĻ¯āĻĻāĻŋ āĻĄā§āĻāĻž āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸ā§āĻĒā§āĻ¸āĻŋāĻĢāĻŋāĻā§āĻļāĻ¨ āĻĒā§āĻ°āĻŖ āĻ¨āĻž āĻāĻ°ā§
# ĐĐ°ĐģидаŅиŅ ŅĐĩŅиаĐģиСОваĐŊĐŊŅŅ
Đ´Đ°ĐŊĐŊŅŅ
[Cluster]$cluster = Get-Content "./my-cluster.json" | ConvertFrom-Json
[Cluster[]]$clusters = Import-Csv "./my-clusters.csv"
āĻāĻĒāĻ¨āĻžāĻ° āĻāĻžāĻ°ā§āĻ¯āĻāĻ°ā§ āĻā§āĻĄā§ āĻāĻžāĻ¤āĻŋ
āĻāĻžāĻ°ā§āĻ¯āĻāĻ°ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻĨāĻŽā§ āĻĄā§āĻāĻž āĻ¸ā§āĻā§āĻ°āĻžāĻāĻāĻžāĻ°āĻā§ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°ā§, āĻ¤āĻžāĻ°āĻĒāĻ° āĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§āĻ¯āĻŧ āĻĄā§āĻāĻž āĻ¸ā§āĻā§āĻ°āĻžāĻāĻāĻžāĻ°ā§āĻ° āĻāĻĒāĻ° āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ°ā§āĻ° āĻā§āĻ°āĻŽ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋāĻā§ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻ°ā§āĨ¤ āĻĒāĻ°āĻ¸ā§āĻĒāĻ°āĻŦāĻŋāĻ°ā§āĻ§ā§ āĻāĻžāĻĒ āĻĨāĻžāĻāĻž āĻ¸āĻ¤ā§āĻ¤ā§āĻŦā§āĻ, āĻāĻžāĻāĻĒ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ˛āĻžāĻ¸āĻā§āĻ˛āĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻžāĻ°ā§āĻ¯āĻāĻ°ā§ āĻā§āĻĄ āĻ˛āĻŋāĻāĻ¤ā§ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°ā§āĨ¤
āĻāĻŽāĻŋ āĻ¯ā§ Powershell āĻ˛āĻŋāĻāĻāĻŋ āĻ¤āĻž āĻāĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ°ā§?
C# āĻŦāĻž āĻ āĻ¨ā§āĻ°ā§āĻĒ āĻŦā§āĻ¯āĻžāĻāĻā§āĻ°āĻžāĻāĻ¨ā§āĻĄ āĻĨā§āĻā§ āĻāĻāĻ¤ āĻ āĻ¨ā§āĻ āĻ˛ā§āĻ Powershell āĻ˛āĻŋāĻāĻā§, āĻ¯āĻž C# āĻāĻ° āĻ āĻ¨ā§āĻ°ā§āĻĒāĨ¤ āĻāĻāĻŋ āĻāĻ°āĻžāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§, āĻāĻĒāĻ¨āĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ°ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ āĻ§āĻžāĻ°āĻŖāĻžāĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻĨā§āĻā§ āĻĻā§āĻ°ā§ āĻ¸āĻ°ā§ āĻ¯āĻžāĻā§āĻā§āĻ¨ āĻāĻŦāĻ āĻ¸āĻŽā§āĻāĻŦāĻ¤ Powershell-āĻ āĻ āĻŦāĻā§āĻā§āĻ-āĻāĻ°āĻŋāĻ¯āĻŧā§āĻ¨ā§āĻā§āĻĄ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻāĻ¯āĻŧā§ āĻā§āĻŦ āĻŦā§āĻļāĻŋ āĻĄāĻžāĻāĻāĻŋāĻ āĻāĻ°ā§ āĻŦāĻž āĻāĻžāĻ°ā§āĻ¯āĻāĻ°ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ°āĻ āĻļāĻŋāĻāĻ¤ā§ āĻāĻĒāĻā§āĻ¤ āĻšāĻŦā§āĻ¨āĨ¤
āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ (|), where-Object, ForEach-Object, Select-Object, Group-Object, Sort-Object, āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§āĻ¯āĻŧ āĻĄā§āĻāĻž āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ°ā§āĻ° āĻāĻĒāĻ° āĻā§āĻŦ āĻŦā§āĻļāĻŋ āĻ¨āĻŋāĻ°ā§āĻāĻ° āĻāĻ°ā§āĻ¨ - āĻāĻĒāĻ¨āĻžāĻ° āĻāĻ°āĻ āĻāĻžāĻ°ā§āĻ¯āĻāĻ°ā§ āĻļā§āĻ˛ā§ āĻāĻā§ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻŋ āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ°āĻļā§āĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻĒāĻā§āĻ¤ āĻšāĻŦā§āĻ¨āĨ¤ āĻāĻāĻāĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ°ā§ āĻļā§āĻ˛ā§āĻ¤ā§ āĻā§āĻ˛āĻžāĻ¸āĨ¤
āĻā§āĻ˛āĻžāĻ¸ā§āĻ° āĻāĻžāĻ°ā§āĻ¯āĻāĻ°ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°
āĻāĻžāĻ¤āĻŋ, āĻ¯āĻĻāĻŋāĻ āĻ¤āĻžāĻ°āĻž āĻāĻāĻāĻŋ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻ¸āĻŋāĻ¨āĻā§āĻ¯āĻžāĻā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§, āĻĻā§āĻāĻŋ āĻĄā§āĻŽā§āĻ¨ā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻŽā§āĻ¯āĻžāĻĒāĻŋāĻ āĻŽāĻžāĻ¤ā§āĻ°āĨ¤ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ā§, āĻāĻĒāĻ¨āĻŋ ForEach-Object āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻŽāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ ā§āĻ¯āĻžāĻ°ā§ āĻŽā§āĻ¯āĻžāĻĒ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻ¨ā§āĻā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖā§, āĻ¨ā§āĻĄ āĻāĻ¨āĻ¸ā§āĻā§āĻ°āĻžāĻā§āĻāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŦāĻžāĻ° āĻāĻāĻāĻŋ āĻĄā§āĻāĻžāĻŽ āĻāĻžāĻ¸ā§āĻ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻŽāĻžāĻĻā§āĻ°āĻā§ āĻ¨ā§āĻ¯āĻžāĻ¯ā§āĻ¯ āĻĒāĻ°āĻŋāĻŽāĻžāĻŖ āĻā§āĻĄ āĻ¨āĻž āĻ˛ā§āĻāĻžāĻ° āĻ¸ā§āĻ¯ā§āĻ āĻĻā§āĻ¯āĻŧāĨ¤ āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ āĻā§āĻˇāĻŖāĻžāĻŽā§āĻ˛āĻ āĻĄā§āĻāĻž āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻŦāĻ āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤āĻāĻ°āĻŖā§āĻ° āĻāĻĒāĻ° āĻĢā§āĻāĻžāĻ¸ āĻāĻ°ā§, āĻ¯āĻāĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻ˛āĻžāĻ¸āĻā§āĻ˛āĻŋ āĻĄā§āĻāĻž āĻĒāĻžāĻ°ā§āĻ¸āĻŋāĻ āĻāĻŦāĻ āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖā§āĻ° āĻ¯āĻ¤ā§āĻ¨ āĻ¨ā§āĻ¯āĻŧāĨ¤
# ĐŅиĐŧĐĩŅ ĐēĐžĐŧйиĐŊиŅОваĐŊиŅ ĐēĐģĐ°ŅŅОв Ņ ĐēĐžĐŊвĐĩĐšĐĩŅĐ°Đŧи Đ´ĐģŅ 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
āĻĒā§āĻ¨āĻāĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ¯āĻžāĻā§āĻāĻŋāĻ āĻā§āĻ˛āĻžāĻ¸
āĻāĻŋāĻā§āĻ āĻŽāĻ¨ā§ āĻšāĻ¯āĻŧ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻžāĻ˛ āĻ¨āĻž
āĻĻā§āĻ°ā§āĻāĻžāĻā§āĻ¯āĻŦāĻļāĻ¤, āĻā§āĻ˛āĻžāĻ¸āĻā§āĻ˛āĻŋāĻā§ āĻĢāĻžāĻāĻļāĻ¨ āĻŦāĻž āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§āĻ° āĻŽāĻ¤ā§ āĻāĻāĻāĻāĻžāĻŦā§ āĻŽāĻĄāĻŋāĻāĻ˛ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ°āĻĒā§āĻ¤āĻžāĻ¨āĻŋ āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¨āĻž; āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŋāĻā§ āĻā§āĻļāĻ˛ āĻāĻā§āĨ¤ āĻ§āĻ°āĻž āĻ¯āĻžāĻ āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻ˛āĻžāĻ¸ ./my-classes.ps1 āĻĢāĻžāĻāĻ˛ā§ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§
-
āĻāĻĒāĻ¨āĻŋ āĻā§āĻ˛āĻžāĻ¸ āĻ¸āĻš āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻ˛ āĻĄāĻāĻ¸ā§āĻ°ā§āĻ¸ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨: ./my-classes.ps1. āĻāĻāĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻ¸ā§āĻ¯ā§āĻā§ my-classes.ps1 āĻāĻžāĻ˛āĻžāĻŦā§ āĻāĻŦāĻ āĻ¸ā§āĻāĻžāĻ¨ā§ āĻĢāĻžāĻāĻ˛ āĻĨā§āĻā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻā§āĻ˛āĻžāĻ¸ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻŦā§āĨ¤
-
āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ°āĻļā§āĻ˛ āĻŽāĻĄāĻŋāĻāĻ˛ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻžāĻ¸ā§āĻāĻŽ API (cmdlets) āĻ°āĻĒā§āĻ¤āĻžāĻ¨āĻŋ āĻāĻ°ā§ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻžāĻ° āĻŽāĻĄāĻŋāĻāĻ˛ āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĢā§āĻ¸ā§āĻā§ ScriptsToProcess = "./my-classes.ps1" āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻ¸ā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻāĻāĻ āĻĢāĻ˛āĻžāĻĢāĻ˛ā§āĻ° āĻ¸āĻžāĻĨā§: ./my-classes.ps1 āĻāĻā§āĻ¸āĻŋāĻāĻŋāĻāĻ āĻāĻ°āĻŦā§ āĻāĻĒāĻ¨āĻžāĻ° āĻĒāĻ°āĻŋāĻŦā§āĻļāĨ¤
āĻāĻĒāĻ¨āĻŋ āĻ¯ā§ āĻŦāĻŋāĻāĻ˛ā§āĻĒāĻāĻŋ āĻŦā§āĻā§ āĻ¨āĻŋāĻ¨, āĻŽāĻ¨ā§ āĻ°āĻžāĻāĻŦā§āĻ¨ āĻ¯ā§ āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ°āĻļā§āĻ˛ā§āĻ° āĻāĻžāĻāĻĒ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻāĻžāĻ¯āĻŧāĻāĻž āĻĨā§āĻā§ āĻ˛ā§āĻĄ āĻāĻ°āĻž āĻāĻāĻ āĻ¨āĻžāĻŽā§āĻ° āĻ§āĻ°āĻ¨ā§āĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¨āĻžāĨ¤
āĻāĻŽāĻ¨āĻāĻŋ āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻŋ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻāĻžāĻ¯āĻŧāĻāĻž āĻĨā§āĻā§ āĻāĻāĻ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ āĻ¸āĻš āĻĻā§āĻāĻŋ āĻ
āĻāĻŋāĻ¨ā§āĻ¨ āĻā§āĻ˛āĻžāĻ¸ āĻ˛ā§āĻĄ āĻāĻ°ā§āĻ¨ āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ¯āĻŧ āĻĒāĻĄāĻŧāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻ¸āĻžāĻŽāĻ¨ā§āĻ° āĻĒāĻĨ
āĻāĻžāĻāĻĒ āĻ°ā§āĻā§āĻ˛āĻŋāĻāĻļāĻ¨ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻāĻĄāĻŧāĻžāĻ¤ā§ āĻ¸āĻ°ā§āĻŦā§āĻ¤ā§āĻ¤āĻŽ āĻāĻĒāĻžāĻ¯āĻŧ āĻšāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻĻā§āĻ° āĻāĻžāĻā§ āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻ˛āĻžāĻ¸āĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻāĻžāĻļ āĻ¨āĻž āĻāĻ°āĻžāĨ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻāĻžāĻā§ āĻā§āĻ˛āĻžāĻ¸-āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻžāĻāĻĒ āĻāĻŽāĻĻāĻžāĻ¨āĻŋ āĻāĻ°āĻžāĻ° āĻāĻļāĻž āĻāĻ°āĻžāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§, āĻāĻĒāĻ¨āĻžāĻ° āĻŽāĻĄāĻŋāĻāĻ˛ āĻĨā§āĻā§ āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻ°āĻĒā§āĻ¤āĻžāĻ¨āĻŋ āĻāĻ°ā§āĻ¨ āĻ¯āĻž āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻā§āĻ˛āĻžāĻ¸ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĻ¤āĻž āĻĻā§āĻ° āĻāĻ°ā§āĨ¤ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨-āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻĢāĻžāĻāĻļāĻ¨ āĻ°āĻĒā§āĻ¤āĻžāĻ¨āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¯āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§-āĻŦāĻžāĻ¨ā§āĻ§āĻŦ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻ¸ā§āĻ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻāĻ°āĻŦā§ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¸ā§āĻāĻžāĻ° āĻĢā§āĻ°āĻ¤ āĻĻā§āĻŦā§āĨ¤
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
āĻāĻ° āĻāĻŋ āĻĒāĻĄāĻŧāĻ¤ā§ āĻšāĻŦā§
āĻāĻ¤ā§āĻ¸: www.habr.com