Reading Configuration Files with Powershell Part 2
Following the recently published article on reading xml configuration files using PowerShell, we are going to enrich the configuration file and create custom PowerShell objects.
This time the configuration file is a bit different, we have multiple "Company" nodes that have inline properties.
There aren't many changes in the script, just in the variable that holds the entire configuration.
When the configuration is red from the file, the "Companies" variable will be holding all the information. This is going to be an array of objects since we have multiple "Company" nodes.
Each object in the array will have the "Name" property, and two custom properties named "Group" and "OU". The group custom property will have two properties named "DN" and "Name" and the "OU" custom property will only have "DN".
This time the configuration file is a bit different, we have multiple "Company" nodes that have inline properties.
<configuration> <Company Name="Company1"> <Group DN="CN=Group1,OU=Groups,OU=Company1,DC=lab,DC=local" Name="Group1"/> <OU DN="OU=Users,OU=Company1,DC=lab,DC=local"/> </Company> <Company Name="Company2"> <Group DN="CN=Group2,OU=Groups,OU=Company2,DC=lab,DC=local" Name="Group2"/> <OU DN="OU=Users,OU=Company2,DC=lab,DC=local"/> </Company> </configuration>
There aren't many changes in the script, just in the variable that holds the entire configuration.
Param ( [string]$ConfigurationPath ) # Test if configuration file exists if( (Test-Path $ConfigurationPath) -ne $true) { $message = "The configuration file was not found (" + $ConfigurationPath + ")" throw $message } # Read the configuration try { [xml]$Configuration = Get-Content -Path $ConfigurationPath $Companies = $Configuration.configuration.Company } catch { $message = "Error reading configuration file (" + $ConfigurationPath + ")" throw $message }
When the configuration is red from the file, the "Companies" variable will be holding all the information. This is going to be an array of objects since we have multiple "Company" nodes.
Each object in the array will have the "Name" property, and two custom properties named "Group" and "OU". The group custom property will have two properties named "DN" and "Name" and the "OU" custom property will only have "DN".
PS C:\> $Companies[0]
PS C:\> $Companies[0].Group
PS C:\> $Companies[0].OU
DN
--
OU=Users,OU=Company1,DC=lab,DC=local
PS C:\>
Name | Group | OU |
---- | ----- | -- |
Company1 | Group | OU |
PS C:\> $Companies[0].Group
DN | Name |
-- | ---- |
CN=Group1,OU=Groups,OU=Company1,DC=lab,DC=local | Group1 |
PS C:\> $Companies[0].OU
DN
--
OU=Users,OU=Company1,DC=lab,DC=local
PS C:\>