Рубрики
Uncategorized

PowerShell: объекты конфигурации сборки — часть 2 из 3

Часть 2 из 3, эта статья о создании конкретных конфигураций, которые мы можем легко позвонить в наш код, становятся более конкретными. Помечено PowerShell, Posh, DevOps, Sysadmin.

Шикарные классы и функции (2 серии деталей)

Примечание: Это вторая часть серии из трех частей о классах и функциях PowerShell.

В первой части мы рассмотрели, как мы можем создать класс для удержания нашего объекта конфигурации. Затем мы создали конструктор для создания некоторой автоматизации в нашей конфигурации. Во второй части я хочу изучить, как мы можем использовать методы для генерации наших объектов. Например, давайте возьмем наш последний пример телевизионного игрового ПК.

Class PCSystem
{
        [string]$CPU
        [string]$Mainboard   = 'MSI B450M Mortar Titanium'
        [string]$Case        = 'Thermaltake Level 20 VT Chassis'
        [string]$PowerSupply = 'SeaSonic FocusPlus Gold 650W'
        [string]$RAM         = 'Team Delta RGB - 16 GB DDR3000'
        [string]$Storage     = 'Samsung 970 EVO 500 GB'
        [string]$GPU
}

как нам это сделать? Ну, мы могли бы просто создать создание объекта и добавить эти конфигурации в корпус сценария. Это, безусловно, часто, но я думаю, что это затрудняет чтение сценария. Всегда предпочтительнее, чтобы сценарий прочитал как повествование. В качестве альтернативы мы можем создать конструктор, который принимает аргумент, сказать целое число, подобное «1», «2» или «3».

Это кажется для меня чище и позволяет нам очистить наш более поздний код, а также создавать дискретные конфигурации, которые могут быть позже добавлены или добавлены в себя, потому что мы размещаем все наши конфигурации в одном месте.

Приятно видеть, что вы наконец добавляете графический процессор в эту дрянную сборку.

В моей предыдущей статье я воспринял имя ЦП в качестве ввода для нашего конструктора, на этот раз все, что мы собираемся сделать, это взять одно целое число. ( то есть 1,2 или 3)

Итак, давайте посмотрим, как это сделано.

Class PCSystem
{
    $CPU; $Mainboard; $Case; $PowerSupply; $RAM; $Storage; $GPU
    Сначала вы можете видеть, что мы создали наш класс с заявлениями о том, какие свойства собирается в доме.
    PCSystem([int32]$Option)
    {
        [string]$this.Mainboard     = 'MSI B450M Mortar Titanium'
        [string]$this.Case          = 'Thermaltake Level 20 VT Chassis'
        [string]$this.PowerSupply   = 'SeaSonic FocusPlus Gold 650W'
        [string]$this.RAM           = 'Team Delta RGB - 16 GB DDR3000'
        [string]$this.Storage       = 'Samsung 970 EVO 500 GB'
    Теперь мы создаем наш конструктор. Вы можете видеть, что мы принимаем параметр «Опция $» в качестве нашего ввода, чтобы рассказать конструктору, что делать. Теперь, пока мы хотим иметь возможность изменить процессор/графический процессор Остальное не меняется, поэтому, вместо того, чтобы неоднократно объявлять остальные свойства для каждой конфигурации — мы собираемся установить другие свойства сейчас.
        switch($Option)
        {
            1{
                [string]$this.CPU  = 'AMD Ryzen 5 2400G'
                [string]$this.GPU  = ''
             }
            2{
                [string]$this.CPU  = 'AMD Ryzen 3 2400G'
                [string]$this.GPU  = 'EVGA - GeForce GTX 2070'  
             }
            3{
                [string]$this.CPU  = 'AMD Ryzen 5 2400G'
                [string]$this.GPU  = 'EVGA - GeForce GTX 2070'
             }
Default 
         {
                [string]$this.CPU  = 'Invalid configuration'
                [string]$this.GPU  = ''
             }
        }
    }
}
    Наконец, мы сделали наиболее интересный бит, и используя оператор переключателя, мы устанавливаем свойства процессора/графического процессора на основе того, какой вариант предоставляется конструктор. (Плохой вход в $ вернет «по умолчанию» «Неверной конфигурации»).

И вот оно, теперь у нас есть способ создать этот сложный объект в нашем сценарии, просто назвав его целым числом. Просто чтобы увидеть, как это выглядит так, как мы могли бы позвонить в вариант 3:

>_ [PCSystem]::new(3)

CPU          : AMD Ryzen 5 2400G
Mainboard    : MSI B450M Mortar Titanium
Case         : Thermaltake Level 20 VT Chassis
PowerSupply  : SeaSonic FocusPlus Gold 650W
RAM          : Team Delta RGB - 16 GB DDR3000
Storage      : Samsung 970 EVO 500 GB
GPU          : EVGA - GeForce GTX 2070

Почему бы тебе не, я устал от прочтения миллионов слов

Этот подход Builder Configuration — отличный способ справиться с объектами строительства. Важно отметить, что эта конфигурация выходит из вашей основной логики, «разделяя беспокойство». Для многих разработчиков это довольно стандартный подход, но для системного инженера это может быть совершенно новым способом размышлений о вещах. Если вы спрашиваете себя, зачем мне это сделать, может быть, держаться туда для следующего поста, когда я его завершу все в одном месте, которое мог найти любой инженер. Теперь у нас есть четкое понимание того, что нужно каждому объекту, потому что его совокупность определяется в начале класса, и если мы хотим добавить конфигурацию, мы используем композицию, чтобы включить новые конфигурации в конструктор, который затем будет отфильтровать через Весь скрипт. Только некоторые из объектов, для которых я использовал этот класс конфигурации, включают в себя: виртуальные машины, сетевой адаптер и конфигурации пользователя/компьютера AD.

В последней части этой серии из 3 частей я посмотрю, как использовать этот объект конфигурации в функции, обеспечивающую полную реализацию, и, вы знаете, на самом деле делая что -то с этим объектом класса, который я потратил так долго, демонстрируя.

Если вы можете придумать другой тип конфигурации, вы можете использовать это, оставьте ее в комментариях ниже, потому что я всегда ищу новые идеи.

Ваше здоровье,

Infra Dev

Чтобы получить обновления о моих новых статьях, следуйте за мной в Twitter @theinfradev

Фото Филиппа Катценбергера на Unsplash

Шикарные классы и функции (2 серии деталей)

Оригинал: «https://dev.to/theinfradev/powershell-build-configuration-objects—part-2-of-3-11pn»