إنشاء وحدة في العالم الحقيقي: إنشاء الوظائف

إدارة الأنظمة قد تبدو كمن يقوم برمي كرات كثيرة في آن واحد. في لحظة، قد تكون تحاول حل مشكلة تخزين، وفي اللحظة التالية، قد تكون تبحث عن مواصفات المعالج أو تتحقق من سعة الذاكرة. القيام بذلك يدويًا ليس فقط مملاً ولكنه يزيد من احتمالية الأخطاء. إذا كنت عالقًا في هذا الدورة، فحان الوقت لوقف هذا الجنون. الآلية هي الحل!

في هذا الدليل، ستتعلم كيفية بناء وظائف PowerShell حتى تتمكن من تبسيط سير عملك والتركيز على ما هو مهم حقًا.

استمتع بمجموعة من النصوص القوية في مجموعة الأدوات الخاصة بك، مما يوفر لك الوقت ويساعدك في العمل كمحترف!

بناء وظائف لاستخراج المعلومات

أثناء بناء الوحدة النمطية، سنملأ خاصية Info بمعلومات الأجهزة باستخدام الأمر Get-CimInstance. يتيح لنا هذا النهج توحيد الشفرة وإعادة استخدامها بفعالية.

تجمع الوظائف التالية معلومات حول الذاكرة، والتخزين، والمعالج من جلسة عن بُعد:

function Get-MemoryInfo {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [System.Management.Automation.Runspaces.PSSession]$Session
    )

    $outObject = @{
        'ComputerName'      = $Session.ComputerName
        'HardwareCategory'  = 'Memory'
        'Info'              = $null
    }

    $scriptBlock = {
        Get-CimInstance -ClassName Win32_PhysicalMemory
    }
    $result = Invoke-Command -Session $Session -ScriptBlock $scriptBlock

    $outObject['Info'] = $result
    [pscustomobject]$outObject
}

function Get-StorageInfo {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [System.Management.Automation.Runspaces.PSSession]$Session
    )

    $outObject = @{
        'ComputerName'      = $Session.ComputerName
        'HardwareCategory'  = 'Storage'
        'Info'              = $null
    }

    $scriptBlock = {
        Get-CimInstance -ClassName Win32_LogicalDisk
    }
    $result = Invoke-Command -Session $Session -ScriptBlock $scriptBlock

    $outObject['Info'] = $result
    [pscustomobject]$outObject
}

function Get-ProcessorInfo {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [System.Management.Automation.Runspaces.PSSession]$Session
    )

    $outObject = @{
        'ComputerName'      = $Session.ComputerName
        'HardwareCategory'  = 'Processor'
        'Info'              = $null
    }

    $scriptBlock = {
        Get-CimInstance -ClassName Win32_LogicalDisk
    }
    $result = Invoke-Command -Session $Session -ScriptBlock $scriptBlock

    $outObject['Info'] = $result
    [pscustomobject]$outObject
}

تحويل الإخراج

البيانات الخام التي تم جلبها من استعلامات النظام غالبًا ما تتضمن تفاصيل أكثر مما هو ضروري، مما يجعل من الصعب تفسيرها. يمكن أن يؤدي هذا الوضع إلى عدم الكفاءة عند التركيز على سمات محددة وقابلة للتنفيذ.

لتوحيد البيانات، يمكنك تحويل الإخراج من Get-CimInstance إلى كائن مخصص.

إليك النسخة المحدثة:

function Get-MemoryInfo {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [System.Management.Automation.Runspaces.PSSession]$Session
    )

    $outObject = @{
        'ComputerName'      = $Session.ComputerName
        'HardwareCategory'  = 'Memory'
        'Info'              = $null
    }

    $scriptBlock = {
        Get-CimInstance -ClassName Win32_PhysicalMemory
    }
    $result = Invoke-Command -Session $Session -ScriptBlock $scriptBlock

    $info = $result | ForEach-Object {
        [pscustomobject]@{
            'LocatorId' = $_.DeviceLocator
            'Capacity'  = $_.Capacity
        }
    }

    $outObject['Info'] = $info
    [pscustomobject]$outObject
}

function Get-StorageInfo {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [System.Management.Automation.Runspaces.PSSession]$Session
    )

    $outObject = @{
        'ComputerName'      = $Session.ComputerName
        'HardwareCategory'  = 'Storage'
        'Info'              = $null
    }

    $scriptBlock = {
        Get-CimInstance -ClassName Win32_LogicalDisk
    }
    $result = Invoke-Command -Session $Session -ScriptBlock $scriptBlock

    $info = $result | ForEach-Object {
        [pscustomobject]@{
            'VolumeName'      = $_.VolumeName
            'VolumeLetter'    = $_.DeviceId
            'VolumeCapacity'  = $_.Size
            'VolumeFreeSpace' = $_.FreeSpace
        }
    }

    $outObject['Info'] = $info
    [pscustomobject]$outObject
}

معالجة قيم البايت

معلومات الأجهزة غالبًا ما تتضمن قيمًا عددية مثل سعة الذاكرة أو التخزين بالبايت. على الرغم من الدقة التقنية، يمكن أن تكون هذه القيم أكثر فعالية للتفسير السريع. تحويلها إلى غيغابايت يوفر فهمًا أكثر بديهية لمقاييس الأجهزة.

لتحسين قراءة البيانات، تقدم وظيفة المساعد ConvertTo-Gb هذه العملية بكفاءة:

function ConvertTo-Gb {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [string]$Bytes
    )

    $numberGb = $Bytes / 1GB
    [math]::Round($numberGb, 2)
}

function Get-MemoryInfo {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [System.Management.Automation.Runspaces.PSSession]$Session
    )

    $outObject = @{
        'ComputerName'      = $Session.ComputerName
        'HardwareCategory'  = 'Memory'
        'Info'              = $null
    }

    $scriptBlock = {
        Get-CimInstance -ClassName Win32_PhysicalMemory
    }
    $result = Invoke-Command -Session $Session -ScriptBlock $scriptBlock

    $info = $result | ForEach-Object {
        [pscustomobject]@{
            'LocatorId' = $_.DeviceLocator
            'Capacity'  = (ConvertTo-Gb -Bytes $_.Capacity)
        }
    }

    $outObject['Info'] = $info
    [pscustomobject]$outObject
}

هذا النهج يحسن الوظائفية وقراءة البيانات التي تُرجعها هذه الوظائف. يصبح من الأسهل التعامل مع التحديثات المستقبلية أو التغييرات من خلال تركيز المنطق المتكرر في وظائف المساعدة مثل ConvertTo-Gb.

الاستنتاج

لقد تعلمت كيفية إنشاء وظائف PowerShell باستخدام الخطوات الموضحة في هذا الدليل. سواء كان ذلك جمع معلومات الأجهزة من الأنظمة عن بُعد، أو تحويل المخرجات الخام إلى كائنات مخصصة منظمة، أو جعل البيانات أكثر قابلية للقراءة.

الآن بعد أن احترفت هذه التقنيات، فكر في كيفية توسيع هذه القاعدة. على سبيل المثال، يمكنك إضافة فئات أجهزة أكثر إلى وحدتك، مثل محولات الشبكة أو معلومات وحدة معالجة الرسومات. يمكنك أيضًا دمج هذه الوظائف في سيناريوهات أتمتة أكبر، مثل مراقبة صحة النظام أو إدارة المخزون.

الإمكانيات لا حصر لها، وأنت على الطريق الصحيح لبناء مجموعة أدوات قوية لإدارة أنظمتك بثقة.

Source:
https://adamtheautomator.com/powershell-functions-module/