Functions/Get-PrivateProfileString.ps1
function Get-PrivateProfileString { <# .SYNOPSIS To get data out of an .ini file .DESCRIPTION To get data out of an .ini file. .ini files are plain text that is categorized in section names. Within a section there are key, value pairs. An example .ini file content is as follows: [Section1] Key1=Data1 .PARAMETER File The path to the .ini file. Can be a relative path. .PARAMETER Section The name of the section within the .ini file. Section names within the file are enveloped in square brackets. [] .PARAMETER Key The key within the section that you want to pull data from. .PARAMETER IncluddeInput A switch that will display all the original input. Aliased to 'IncluddeOriginal' for backward compatibility .EXAMPLE Get-PrivateProfileString -File .\Test.ini -Section 'Section1' -Key 'Key1' Data1 .EXAMPLE Get-PrivateProfileString -File .\NonexistentFile.ini -Section 'Section1' -Key 'Key1' Get-PrivateProfileString : ERROR: File [.\NonexistentFile.ini] does not exist .EXAMPLE Get-PrivateProfileString -File c:\Temp\Test.ini -Section 'Section1' -Key 'Key1' -IncludeInput FileName Section Key Value -------- ------- --- ----- C:\Temp\Test.ini Section1 Key1 Data1 .NOTES # inspired by: http://powershell-scripting.com/index.php?option=com_joomlaboard&Itemid=76&func=view&view=threaded&id=24376&catid=5 # also sourced at: https://gallery.technet.microsoft.com/Edit-old-fashioned-INI-f8fbc067?redir=0 Some modifications have been made: * Error checking around file * Ability to take relative path to file #> [CmdletBinding()] param( [string] $File, [string] $Section, [string] $Key, [alias('IncludeOriginal')] [switch] $IncludeInput ) begin { Write-Verbose -Message "Starting [$($MyInvocation.Mycommand)]" Write-Verbose -Message 'Trimming parameters.' $Section = $Section.Trim() $Key = $Key.Trim() } process { if (Test-Path -Path $File) { $ResolveFile = Resolve-Path -Path $File if ($ResolveFile.count -gt 1) { Write-Error -Message "ERROR: File specification [$File] resolves to more than 1 file." } else { Write-Verbose -Message "Getting value from file [$ResolveFile]" Write-Verbose -Message "Getting value from section [$Section]" Write-Verbose -Message "Getting value from key [$Key]" $sb = New-Object -TypeName System.Text.StringBuilder -ArgumentList (256) $null = [ProfileApi]::GetPrivateProfileString($Section, $Key, $null, $sb, $sb.Capacity, $ResolveFile) if ($IncludeInput) { New-Object -TypeName 'psobject' -Property ([ordered] @{ FileName = $ResolveFile Section = $Section Key = $Key Value = $sb.ToString() }) } else { Write-Output -InputObject $sb.ToString() } } } else { Write-Error -Message "ERROR: File [$file] does not exist" } } end { Write-Verbose -Message "Ending [$($MyInvocation.Mycommand)]" } } |