Files
IntuneManagement/Public/Get-SettingDefinition.ps1

72 lines
2.3 KiB
PowerShell

<#
.SYNOPSIS
List the settings the module knows about - keys, types, defaults and where they
are stored.
.DESCRIPTION
Exported as Get-IMSettingDefinition.
Discovery for the settings API. Automation should not have to read the source or
the settings dialog to find out that the export folder key is called
"ExportFolder", that it is a Folder setting, or that it is stored under
"IntuneManagerExportSettings".
Only registered settings are listed - the ones the settings dialog shows. A few
keys are deliberately unregistered (per-feature state, and hidden keys such as
ExportReplaceTokens); those need an explicit -SubPath when read or written.
.PARAMETER Key
Return one setting. Wildcards are supported.
.PARAMETER Section
Return only the settings in one section (General, ImportExport, IntuneManager,
...). Wildcards are supported.
.EXAMPLE
Get-IMSettingDefinition | Format-Table Key, Section, Type, DefaultValue
.EXAMPLE
Get-IMSettingDefinition -Key *Export*
.EXAMPLE
Get-IMSettingDefinition -Section General | Select-Object Key, Title, Description
.LINK
Get-IMSetting
.LINK
Set-IMSetting
#>
function Get-SettingDefinition
{
[CmdletBinding()]
param(
[Parameter(Position = 0)]
[string]$Key,
[string]$Section
)
foreach($settingSection in (Get-SettingsSections | Sort-Object Order, Title))
{
if($Section -and $settingSection.Id -notlike $Section -and $settingSection.Title -notlike $Section) { continue }
foreach($definition in $settingSection.Values)
{
if($Key -and $definition.Key -notlike $Key) { continue }
[PSCustomObject]@{
Key = $definition.Key
Title = $definition.Title
Section = $settingSection.Id
SectionTitle = $settingSection.Title
Type = $definition.Type
DefaultValue = $definition.DefaultValue
SubPath = $definition.SubPath
Description = $definition.Description
# The allowed values for a list setting, so a caller can validate a
# value before writing it.
ItemsSource = $definition.ItemsSource
}
}
}
}