Private/Get-IniContent.ps1
function Get-IniContent { <# .Synopsis Gets the content of an INI file .Description Gets the content of an INI file and returns it as a hashtable .Notes Author : Oliver Lipkau <oliver@lipkau.net> Blog : http://oliver.lipkau.net/blog/ Source : https://github.com/lipkau/PsIni http://gallery.technet.microsoft.com/scriptcenter/ea40c1ef-c856-434b-b8fb-ebd7a76e8d91 Version : 1.0 - 2010/03/12 - Initial release 1.1 - 2014/12/11 - Typo (Thx SLDR) Typo (Thx Dave Stiff) #Requires -Version 2.0 .Inputs System.String .Outputs System.Collections.Hashtable .Parameter FilePath Specifies the path to the input file. .Example $FileContent = Get-IniContent "C:\myinifile.ini" ----------- Description Saves the content of the c:\myinifile.ini in a hashtable called $FileContent .Example $inifilepath | $FileContent = Get-IniContent ----------- Description Gets the content of the ini file passed through the pipe into a hashtable called $FileContent .Example C:\PS>$FileContent = Get-IniContent "c:\settings.ini" C:\PS>$FileContent["Section"]["Key"] ----------- Description Returns the key "Key" of the section "Section" from the C:\settings.ini file .Link Out-IniFile #> [CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = 'Low')] [OutputType([System.Collections.Hashtable])] Param( [ValidateNotNullOrEmpty()] [Parameter(ValueFromPipeline = $true, HelpMessage = 'Path and Filename to the ini file to be read', Mandatory = $true)] [string]$FilePath ) Begin { $txt = ($Variables.Header -f (Get-Date).ToShortDateString(), $MyInvocation.Mycommand, (Get-FunctionDisplay -HashTable $PsBoundParameters -Verbose:$False) ) Write-Verbose -Message $txt ############################## # Variables Definition } #end Begin Process { Write-Verbose -Message "$($myInvocation.MyCommand.Name):: Processing file: $PSBoundParameters['FilePath']" Try { $ini = @{} switch -regex -file $PSBoundParameters['FilePath'] { '^\[(.+)\]$' { # Section $section = $matches[1] $ini[$section] = @{} $CommentCount = 0 } '^(;.*)$' { # Comment if (!($section)) { $section = 'No-Section' $ini[$section] = @{} } $value = $matches[1] $CommentCount = $CommentCount + 1 $name = 'Comment' + $CommentCount $ini[$section][$name] = $value } '(.+?)\s*=\s*(.*)' { # Key if (!($section)) { $section = 'No-Section' $ini[$section] = @{} } $name, $value = $matches[1..2] $ini[$section][$name] = $value } } #end Switch } catch { Write-Error -Message "An error occurred while processing the file: $_" throw } #end Try-Catch Write-Verbose -Message "$($myInvocation.MyCommand.Name):: Finished Processing file: $PSBoundParameters['FilePath']" } # End Process End { $txt = ($Variables.Footer -f $MyInvocation.InvocationName, ('reading content from {0} file (Private Function).' -f $PSBoundParameters['FilePath']) ) Write-Verbose -Message $txt Return $ini } #end End } #end Function |