Управление системами может казаться как жонглирование слишком многими мячами одновременно. Одну минуту вы устраняете проблему хранения данных; на следующей охотитесь за характеристиками процессора или проверяете объем памяти. Делать это вручную не только утомительно, но и подвержено ошибкам. Если вы застряли в этом цикле, пришло время остановить безумие. Автоматизация – ваш ответ!
В этом руководстве вы узнаете, как создавать функции 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, используя описанные в этом руководстве шаги. Будь то сбор информации об аппаратных средствах с удаленных систем, преобразование сырых данных в структурированные пользовательские объекты или улучшение читаемости данных.
Теперь, когда вы овладели этими техниками, обратите внимание, как вы можете расширить этот фундамент. Например, вы можете добавить больше категорий аппаратных средств в свой модуль, такие как информация о сетевых адаптерах или GPU. Вы также можете интегрировать эти функции в более крупные рабочие процессы автоматизации, такие как мониторинг состояния системы или управление инвентаризацией.
Возможности безграничны, и вы уже на пути к созданию надежного инструментария для уверенного управления вашими системами.
Source:
https://adamtheautomator.com/powershell-functions-module/