-
-
Notifications
You must be signed in to change notification settings - Fork 53
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
165 additions
and
306 deletions.
There are no files selected for viewing
312 changes: 156 additions & 156 deletions
312
x-lite/Get-IniContent.ps1 → _scripts/Get-IniContent.ps1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,156 +1,156 @@ | ||
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 <[email protected]> | ||
Source : https://github.com/lipkau/PsIni | ||
http://gallery.technet.microsoft.com/scriptcenter/ea40c1ef-c856-434b-b8fb-ebd7a76e8d91 | ||
Version : 1.0.0 - 2010/03/12 - OL - Initial release | ||
1.0.1 - 2014/12/11 - OL - Typo (Thx SLDR) | ||
Typo (Thx Dave Stiff) | ||
1.0.2 - 2015/06/06 - OL - Improvment to switch (Thx Tallandtree) | ||
1.0.3 - 2015/06/18 - OL - Migrate to semantic versioning (GitHub issue#4) | ||
1.0.4 - 2015/06/18 - OL - Remove check for .ini extension (GitHub Issue#6) | ||
1.1.0 - 2015/07/14 - CB - Improve round-tripping and be a bit more liberal (GitHub Pull #7) | ||
OL - Small Improvments and cleanup | ||
1.1.1 - 2015/07/14 - CB - changed .outputs section to be OrderedDictionary | ||
1.1.2 - 2016/08/18 - SS - Add some more verbose outputs as the ini is parsed, | ||
allow non-existent paths for new ini handling, | ||
test for variable existence using local scope, | ||
added additional debug output. | ||
#Requires -Version 2.0 | ||
.Inputs | ||
System.String | ||
.Outputs | ||
System.Collections.Specialized.OrderedDictionary | ||
.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()] | ||
[OutputType( | ||
[System.Collections.Specialized.OrderedDictionary] | ||
)] | ||
Param( | ||
# Specifies the path to the input file. | ||
[ValidateNotNullOrEmpty()] | ||
[Parameter( Mandatory, ValueFromPipeline )] | ||
[string] | ||
$FilePath, | ||
|
||
# Specify what characters should be describe a comment. | ||
# Lines starting with the characters provided will be rendered as comments. | ||
# Default: ";" | ||
[char[]] | ||
$CommentChar = @(";"), | ||
|
||
# Remove lines determined to be comments from the resulting dictionary. | ||
[switch] | ||
$IgnoreComments | ||
) | ||
|
||
Begin { | ||
Write-Debug "PsBoundParameters:" | ||
$PSBoundParameters.GetEnumerator() | ForEach-Object { Write-Debug $_ } | ||
if ($PSBoundParameters['Debug']) { | ||
$DebugPreference = 'Continue' | ||
} | ||
Write-Debug "DebugPreference: $DebugPreference" | ||
|
||
Write-Verbose "$($MyInvocation.MyCommand.Name):: Function started" | ||
|
||
$commentRegex = "^([$($CommentChar -join '')].*)$" | ||
|
||
Write-Debug ("commentRegex is {0}." -f $commentRegex) | ||
} | ||
|
||
Process { | ||
Write-Verbose "$($MyInvocation.MyCommand.Name):: Processing file: $Filepath" | ||
|
||
$ini = New-Object System.Collections.Specialized.OrderedDictionary([System.StringComparer]::OrdinalIgnoreCase) | ||
|
||
if (!(Test-Path $Filepath)) { | ||
Write-Verbose ("Warning: `"{0}`" was not found." -f $Filepath) | ||
Write-Output $ini | ||
} | ||
|
||
$commentCount = 0 | ||
switch -regex -file $FilePath { | ||
"^\s*\[(.+)\]\s*$" { | ||
# Section | ||
$section = $matches[1] | ||
Write-Verbose "$($MyInvocation.MyCommand.Name):: Adding section : $section" | ||
$ini[$section] = New-Object System.Collections.Specialized.OrderedDictionary([System.StringComparer]::OrdinalIgnoreCase) | ||
$CommentCount = 0 | ||
continue | ||
} | ||
$commentRegex { | ||
# Comment | ||
if (!$IgnoreComments) { | ||
if (!(test-path "variable:local:section")) { | ||
$section = $script:NoSection | ||
$ini[$section] = New-Object System.Collections.Specialized.OrderedDictionary([System.StringComparer]::OrdinalIgnoreCase) | ||
} | ||
$value = $matches[1] | ||
$CommentCount++ | ||
Write-Debug ("Incremented CommentCount is now {0}." -f $CommentCount) | ||
$name = "Comment" + $CommentCount | ||
Write-Verbose "$($MyInvocation.MyCommand.Name):: Adding $name with value: $value" | ||
$ini[$section][$name] = $value | ||
} | ||
else { | ||
Write-Debug ("Ignoring comment {0}." -f $matches[1]) | ||
} | ||
|
||
continue | ||
} | ||
"(.+?)\s*=\s*(.*)" { | ||
# Key | ||
if (!(test-path "variable:local:section")) { | ||
$section = $script:NoSection | ||
$ini[$section] = New-Object System.Collections.Specialized.OrderedDictionary([System.StringComparer]::OrdinalIgnoreCase) | ||
} | ||
$name, $value = $matches[1..2] | ||
Write-Verbose "$($MyInvocation.MyCommand.Name):: Adding key $name with value: $value" | ||
$ini[$section][$name] = $value | ||
continue | ||
} | ||
} | ||
Write-Verbose "$($MyInvocation.MyCommand.Name):: Finished Processing file: $FilePath" | ||
Write-Output $ini | ||
} | ||
|
||
End { | ||
Write-Verbose "$($MyInvocation.MyCommand.Name):: Function ended" | ||
} | ||
} | ||
|
||
Set-Alias gic Get-IniContent | ||
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 <[email protected]> | ||
Source : https://github.com/lipkau/PsIni | ||
http://gallery.technet.microsoft.com/scriptcenter/ea40c1ef-c856-434b-b8fb-ebd7a76e8d91 | ||
Version : 1.0.0 - 2010/03/12 - OL - Initial release | ||
1.0.1 - 2014/12/11 - OL - Typo (Thx SLDR) | ||
Typo (Thx Dave Stiff) | ||
1.0.2 - 2015/06/06 - OL - Improvment to switch (Thx Tallandtree) | ||
1.0.3 - 2015/06/18 - OL - Migrate to semantic versioning (GitHub issue#4) | ||
1.0.4 - 2015/06/18 - OL - Remove check for .ini extension (GitHub Issue#6) | ||
1.1.0 - 2015/07/14 - CB - Improve round-tripping and be a bit more liberal (GitHub Pull #7) | ||
OL - Small Improvments and cleanup | ||
1.1.1 - 2015/07/14 - CB - changed .outputs section to be OrderedDictionary | ||
1.1.2 - 2016/08/18 - SS - Add some more verbose outputs as the ini is parsed, | ||
allow non-existent paths for new ini handling, | ||
test for variable existence using local scope, | ||
added additional debug output. | ||
#Requires -Version 2.0 | ||
.Inputs | ||
System.String | ||
.Outputs | ||
System.Collections.Specialized.OrderedDictionary | ||
.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()] | ||
[OutputType( | ||
[System.Collections.Specialized.OrderedDictionary] | ||
)] | ||
Param( | ||
# Specifies the path to the input file. | ||
[ValidateNotNullOrEmpty()] | ||
[Parameter( Mandatory, ValueFromPipeline )] | ||
[string] | ||
$FilePath, | ||
|
||
# Specify what characters should be describe a comment. | ||
# Lines starting with the characters provided will be rendered as comments. | ||
# Default: ";" | ||
[char[]] | ||
$CommentChar = @(";"), | ||
|
||
# Remove lines determined to be comments from the resulting dictionary. | ||
[switch] | ||
$IgnoreComments | ||
) | ||
|
||
Begin { | ||
Write-Debug "PsBoundParameters:" | ||
$PSBoundParameters.GetEnumerator() | ForEach-Object { Write-Debug $_ } | ||
if ($PSBoundParameters['Debug']) { | ||
$DebugPreference = 'Continue' | ||
} | ||
Write-Debug "DebugPreference: $DebugPreference" | ||
|
||
Write-Verbose "$($MyInvocation.MyCommand.Name):: Function started" | ||
|
||
$commentRegex = "^([$($CommentChar -join '')].*)$" | ||
|
||
Write-Debug ("commentRegex is {0}." -f $commentRegex) | ||
} | ||
|
||
Process { | ||
Write-Verbose "$($MyInvocation.MyCommand.Name):: Processing file: $Filepath" | ||
|
||
$ini = New-Object System.Collections.Specialized.OrderedDictionary([System.StringComparer]::OrdinalIgnoreCase) | ||
|
||
if (!(Test-Path $Filepath)) { | ||
Write-Verbose ("Warning: `"{0}`" was not found." -f $Filepath) | ||
Write-Output $ini | ||
} | ||
|
||
$commentCount = 0 | ||
switch -regex -file $FilePath { | ||
"^\s*\[(.+)\]\s*$" { | ||
# Section | ||
$section = $matches[1] | ||
Write-Verbose "$($MyInvocation.MyCommand.Name):: Adding section : $section" | ||
$ini[$section] = New-Object System.Collections.Specialized.OrderedDictionary([System.StringComparer]::OrdinalIgnoreCase) | ||
$CommentCount = 0 | ||
continue | ||
} | ||
$commentRegex { | ||
# Comment | ||
if (!$IgnoreComments) { | ||
if (!(test-path "variable:local:section")) { | ||
$section = $script:NoSection | ||
$ini[$section] = New-Object System.Collections.Specialized.OrderedDictionary([System.StringComparer]::OrdinalIgnoreCase) | ||
} | ||
$value = $matches[1] | ||
$CommentCount++ | ||
Write-Debug ("Incremented CommentCount is now {0}." -f $CommentCount) | ||
$name = "Comment" + $CommentCount | ||
Write-Verbose "$($MyInvocation.MyCommand.Name):: Adding $name with value: $value" | ||
$ini[$section][$name] = $value | ||
} | ||
else { | ||
Write-Debug ("Ignoring comment {0}." -f $matches[1]) | ||
} | ||
|
||
continue | ||
} | ||
"(.+?)\s*=\s*(.*)" { | ||
# Key | ||
if (!(test-path "variable:local:section")) { | ||
$section = $script:NoSection | ||
$ini[$section] = New-Object System.Collections.Specialized.OrderedDictionary([System.StringComparer]::OrdinalIgnoreCase) | ||
} | ||
$name, $value = $matches[1..2] | ||
Write-Verbose "$($MyInvocation.MyCommand.Name):: Adding key $name with value: $value" | ||
$ini[$section][$name] = $value | ||
continue | ||
} | ||
} | ||
Write-Verbose "$($MyInvocation.MyCommand.Name):: Finished Processing file: $FilePath" | ||
Write-Output $ini | ||
} | ||
|
||
End { | ||
Write-Verbose "$($MyInvocation.MyCommand.Name):: Function ended" | ||
} | ||
} | ||
|
||
Set-Alias gic Get-IniContent |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.