Comment puis-je obtenir des variables à partir d'un fichier de configuration en XML?
Je le fais actuellement en utilisant un fichier de configuration .txt.
Voici mon code actuel:
Config.txt
Get-Content "$current_path\config.txt" | foreach-object -begin {$h=@{}} -process { $k = [regex]::split($_,'='); if(($k[0].CompareTo("") -ne 0) -and ($k[0].StartsWith("[") -ne $True)) { $h.Add($k[0], $k[1]) } } $destinationn = $h.Get_Item("destinationn")
Powershell.ps1
[Repertoire de SPO (generalement C:\SPO)] destinationn="C:\SPO" [Nom du sous repertoire de SPO (generalement : SPO1)] sous_destination="SPO1" [Numero de la version de SPO vers laquelle vous souhaitez upgrade (par exemple : 1812.4)] version="1812.4" [Nom du pool dapplication lie a SPO (par defaut SPO_ADV)] applicationPoolName="SPO_ADV" [Chemin de livraison de la nouvelle version de SPO (par defaut \\path\to\somewhere)] livraisonn="\\path\to\somewhere"
Je voudrais faire une chose similaire en utilisant un fichier de configuration .xml .
3 Réponses :
<?xml version="1.0" encoding="utf-8"?> <configuration> <connectionStrings> <add name="AtomicScopeConStr" connectionString="Server= localhost; Database= mydatabase; Integrated Security=True;" /> </connectionStrings> <appSettings> </appSettings> </configuration>
foreach ($connectionString in $appConfig.configuration.connectionStrings.add) { # Get the connection string $dbconnectionstring = $connectionString.connectionString }
$appConfig.Load($appConfigFile)
$appConfig = New-Object XML
Voici ma configuration xml
$appConfigFile = [IO.Path]::Combine($currentDirectory, '.\MyFile.config')
C'était une aide précieuse. Voir le code de travail dans la réponse ci-dessous. (qui est légèrement différent de ci-dessus). Mon fichier de configuration était essentiellement identique à celui ci-dessus. Mêmes éléments.
Xml est beaucoup plus facile à analyser avec PowerShell. Voir l'exemple suivant avec des commentaires:
#Translated XML config @' <root> <destinationn>C:\SPO</destinationn> <sous_destination>SPO1</sous_destination> <version>1812.4</version> <applicationPoolName>SPO_ADV</applicationPoolName> <livraisonn>\\path\to\somewhere</livraisonn> </root> '@ | Out-File YourSampleConfig.xml #read xml file, skip root $config = ([xml](Get-Content YourSampleConfig.xml)).root #get <destinationn> value $config.destinationn
À quoi sert la «racine» ici?
root
est le nœud principal requis en xml:
. Nommez-le comme vous voulez. Si vous le nommez
, vous devez également le changer en ABC
dans le script.
Ceci fait suite au post de HariHaran. Mon fichier connection.config avait les mêmes éléments et la même structure que le sien, mais mon code de travail est légèrement différent.
Utilisez ceci pour charger l'objet xml
foreach ($xmlAddElement in $appConfig.connectionStrings.add) { $connectionString = $xmlAddElement.connectionString Write-Host "$connectionString" }
ou utilisez ceci
[xml]$appConfig = Get-Content $appConfigFile
et voici le code de travail pour obtenir la chaîne de connexion
$appConfig = New-Object XML $appConfig.Load($appConfigFile)
Vous pouvez consulter le script
Get-IniContent
de TechNet Gallery qui vous permet" d'analyser "un fichier de typeini
pour renvoyer les valeurs sous forme de table de hachageSi vous êtes prêt à lire des fichiers JSON ou INI (c'est-à-dire TXT), envisagez github.com/alekdavis/ConfigFile
Il existe un moyen beaucoup plus pratique de lire les paramètres à l'aide de la cmdlet
ConvertFrom-Json
dans PowerShell pour lire un fichier au format JSON: serverfault.com/a/1032517/293696