-
Notifications
You must be signed in to change notification settings - Fork 0
/
Get-IniConfiguration.ps1
81 lines (77 loc) · 1.97 KB
/
Get-IniConfiguration.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<#
.Synopsis
Short description
This script will be used for getting the contents of the ini configuration file.
.DESCRIPTION
Long description
2021-02-07 Sukri Created.
.EXAMPLE
Example of how to use this cmdlet
.EXAMPLE
Another example of how to use this cmdlet
.INPUTS
Inputs to this cmdlet (if any)
.OUTPUTS
Output from this cmdlet (if any)
.NOTES
General notes
Author : Sukri Kadir
Email : msmak1990@gmail.com
.COMPONENT
The component this cmdlet belongs to
.ROLE
The role this cmdlet belongs to
.FUNCTIONALITY
The functionality that best describes this cmdlet
#>
function Get-IniConfiguration
{
Param
(
#parameter for the ini configuration file in full path.
[ValidateNotNullOrEmpty()]
[String]
$ConfigurationIniFile
)
Begin
{
#throw an error exception if configuration file is not a file.
if (!$( Test-Path -Path $ConfigurationIniFile -PathType Leaf ))
{
Write-Error -Message "[$ConfigurationIniFile] MUST be a file. Exit." -ErrorAction Stop
}
#initialize a variable in a hash array.
$ini = @{ }
}
Process
{
switch -regex -file $ConfigurationIniFile
{
#section name.
"^\[(.+)\]" # Section
{
$section = $matches[1]
$ini[$section] = @{ }
$CommentCount = 0
}
#ignore the comment from the ini configuration contents.
"^(;.*)$"
{
$value = $matches[1]
$CommentCount = $CommentCount + 1
$name = "Comment" + $CommentCount
$ini[$section][$name] = $value
}
#save the ini values into a hash array.
"(.+?)\s*=(.*)" # Key
{
$name, $value = $matches[1..2]
$ini[$section][$name] = $value
}
}
}
End
{
return $ini
}
}