I have noticed an issue that the Get-IniContent CmdLet does not maintain the fidelity of .INI/.INF values that are encapsulated within quotation marks. This issue will probably also affect values encapsulated win apostrophes as well.
For example, here is a file name Gpttmpl.inf that is used within Active Directory Group Policy Objects. The header of the file contains a single-entry key "signature" whose value is encapsulated in quotation marks ...
Under normal circumstances this would not be problem but some scenarios, such as when updating and importing a Group Policy Object, there is no tolerance for the loss of this fidelity.
I have tracked this change to the Get-IniContent CmdLet line 144 ...
$name, $value = $matches[1, 3]
The $value is populated with the results of the capture group 3 from the REGEX expression ...
$keyRegex = "^\s*(.+?)\s*=\s*(['`"]?)(.*)\2\s*$"
Using that REGEX expression the following capture groups are returned ...
Capture Group 1 - signature
Capture Group 2 - "
Capture Group 3 - $CHICAGO$
Capture group 3 has the value $CHICAGO$ (no quotation marks). The result is that the quotation marks are not picked up and therefore not restored to the resulting output file.
To work around this issue temporarily I am using a different REGEX expression. The following REGEX expression which will extract the apostrophe and or quotation marks (if present) into capture group 2 and 4 respectively.
^\s*(.+?)\s*=\s*(['`"]?)(.*?)(['`"]?)$
for signature="$CHICAGO$" this results in ...
Capture Group 1 - signature
Capture Group 2 - "
Capture Group 3 - $CHICAGO$
Capture Group 4 - "
In addition I am adding some additional logic into lines 144-149 (inclusive) ...
I have noticed an issue that the Get-IniContent CmdLet does not maintain the fidelity of .INI/.INF values that are encapsulated within quotation marks. This issue will probably also affect values encapsulated win apostrophes as well.
For example, here is a file name Gpttmpl.inf that is used within Active Directory Group Policy Objects. The header of the file contains a single-entry key "signature" whose value is encapsulated in quotation marks ...
When this file is updated via the Set-IniContent CmdLet (which calls Get-IniContent) the quotation marks are truncated resulting in ...
Under normal circumstances this would not be problem but some scenarios, such as when updating and importing a Group Policy Object, there is no tolerance for the loss of this fidelity.
I have tracked this change to the Get-IniContent CmdLet line 144 ...
$name, $value = $matches[1, 3]
The $value is populated with the results of the capture group 3 from the REGEX expression ...
Using that REGEX expression the following capture groups are returned ...
Capture group 3 has the value
$CHICAGO$
(no quotation marks). The result is that the quotation marks are not picked up and therefore not restored to the resulting output file.To work around this issue temporarily I am using a different REGEX expression. The following REGEX expression which will extract the apostrophe and or quotation marks (if present) into capture group 2 and 4 respectively.
for signature="$CHICAGO$" this results in ...
In addition I am adding some additional logic into lines 144-149 (inclusive) ...
If capture groups 2 and 4 both have an apostrophe or quotation mark these will be restored to the value maintaining fidelity with the original value.