Création d’un module du monde réel : création de fonctions

La gestion des systèmes peut donner l’impression de jongler avec trop de balles à la fois. Une minute, vous résolvez un problème de stockage; la suivante, vous traquez les spécifications du processeur ou vérifiez la capacité de la mémoire. Le faire manuellement est non seulement fastidieux, mais aussi sujet aux erreurs. Si vous êtes pris dans ce cycle, il est temps d’arrêter la folie. L’automatisation est la solution!

Dans ce guide, vous apprendrez à créer des fonctions PowerShell pour rationaliser vos flux de travail et vous concentrer sur ce qui compte vraiment.

Profitez d’un ensemble de scripts puissants dans votre boîte à outils, vous faisant gagner du temps et vous aidant à fonctionner comme un professionnel!

Création de fonctions pour extraire des informations

En construisant sur le module, nous allons remplir la propriété Info avec des informations matérielles en utilisant la commande Get-CimInstance. Cette approche nous permet de standardiser et de réutiliser le code de manière efficace.

Les fonctions suivantes rassemblent les informations sur la mémoire, le stockage et le processeur à partir d’une session à distance:

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
}

Transformation de la sortie

Les données brutes récupérées à partir des requêtes système incluent souvent plus de détails que nécessaire, ce qui rend leur interprétation fastidieuse. Cette situation peut entraîner des inefficacités lorsqu’il s’agit de se concentrer sur des attributs spécifiques et actionnables.

Pour standardiser les données, vous pouvez transformer la sortie de Get-CimInstance en un objet personnalisé.

Voici une version mise à jour:

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
}

Gestion des valeurs en octets

Les informations sur le matériel incluent souvent des valeurs numériques telles que la capacité de mémoire ou de stockage en octets. Bien que techniquement précises, ces valeurs pourraient être plus pratiques pour une interprétation rapide. Les convertir en gigaoctets offre une compréhension plus intuitive des métriques matérielles.

Pour une meilleure lisibilité, la fonction d’aide ConvertirEn-Go rend ce processus plus efficace :

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
}

Cette approche améliore la fonctionnalité et la lisibilité des données renvoyées par ces fonctions. Les futures mises à jour ou modifications deviennent plus faciles à gérer en centralisant la logique répétitive dans des fonctions d’aide telles que ConvertirEn-Go.

Conclusion

Vous avez appris comment créer des fonctions PowerShell en suivant les étapes décrites dans ce guide. Que ce soit pour recueillir des informations matérielles à partir de systèmes distants, transformer des sorties brutes en objets personnalisés structurés ou rendre les données plus lisibles.

Maintenant que vous avez maîtrisé ces techniques, envisagez comment vous pouvez développer cette base. Par exemple, vous pourriez ajouter plus de catégories matérielles à votre module, telles que des adaptateurs réseau ou des informations sur le GPU. Vous pourriez également intégrer ces fonctions dans des flux de travail d’automatisation plus importants, tels que la surveillance de l’état du système ou la gestion des stocks.

Les possibilités sont infinies, et vous êtes bien parti pour construire un ensemble d’outils robuste pour gérer vos systèmes en toute confiance.

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