4
votes

Comment obtenir des variables à partir du fichier de configuration dans PowerShell

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 commentaires

Vous pouvez consulter le script Get-IniContent de TechNet Gallery qui vous permet" d'analyser "un fichier de type ini pour renvoyer les valeurs sous forme de table de hachage


Si 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


3 Réponses :


1
votes

Obtenir la chaîne de connexion depuis App.Config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="AtomicScopeConStr" connectionString="Server= localhost; Database= mydatabase; Integrated Security=True;" />
  </connectionStrings>
  <appSettings>
  </appSettings>
</configuration>

initialiser l'objet xml

foreach ($connectionString in $appConfig.configuration.connectionStrings.add) {
    # Get the connection string
    $dbconnectionstring = $connectionString.connectionString
}

charger le fichier de configuration en tant qu'objet xml h3>
$appConfig.Load($appConfigFile)

itérer sur les paramètres que vous voulez

$appConfig = New-Object XML

Voici ma configuration xml

$appConfigFile = [IO.Path]::Combine($currentDirectory, '.\MyFile.config')

1 commentaires

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.



5
votes

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


2 commentaires

À 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.



0
votes

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)


0 commentaires