Public/Get-CIEMProvider.ps1
|
function Get-CIEMProvider { <# .SYNOPSIS Lists available CIEM cloud providers. .DESCRIPTION Returns provider objects from the CIEM SQLite database. Each provider includes Name, Enabled, Endpoints, ResourceFilter, and a computed CheckCount property. .PARAMETER Name Optional. Return a single provider by name (case-insensitive). .OUTPUTS [CIEMProvider[]] Array of provider objects. .EXAMPLE Get-CIEMProvider # Returns all providers .EXAMPLE Get-CIEMProvider -Name Azure # Returns a specific provider by name .EXAMPLE Get-CIEMProvider | Where-Object Enabled # Returns only enabled providers #> [CmdletBinding()] [OutputType('CIEMProvider[]')] param( [Parameter()] [string]$Name ) $ErrorActionPreference = 'Stop' $query = "SELECT p.id, p.name, p.type, p.enabled, p.created_at, p.updated_at FROM providers p" if ($Name) { $query += "`nWHERE p.name = @name COLLATE NOCASE" } $params = @{} if ($Name) { $params.name = $Name } $rows = @(Invoke-CIEMQuery -Query $query -Parameters $params) # Convert rows to CIEMProvider objects $providers = @(foreach ($row in $rows) { $provider = [CIEMProvider]::new() $provider.Name = $row.name $provider.Enabled = [bool]$row.enabled $provider.Endpoints = [PSCustomObject]@{} $provider.ResourceFilter = @() $provider }) # Add computed CheckCount to each provider foreach ($p in $providers) { $checksDir = Join-Path $script:ModuleRoot "modules/$($p.Name)/Checks" $checkCount = if (Test-Path $checksDir) { @(Get-ChildItem -Path "$checksDir/*.ps1" -ErrorAction SilentlyContinue).Count } else { 0 } $p | Add-Member -NotePropertyName 'CheckCount' -NotePropertyValue $checkCount -Force } $providers } |