31 votes

Comment utiliser un fichier de configuration (ini, conf,...) avec un script PowerShell ?

Est-il possible d'utiliser un fichier de configuration avec un script PowerShell ?

Par exemple, le fichier de configuration :

#links
link1=http://www.google.com
link2=http://www.apple.com
link3=http://www.microsoft.com

Et ensuite appeler cette information dans le PS1 script :

start-process iexplore.exe $Link1

28voto

Rob Points 851

Merci beaucoup pour votre aide Dennis et Tim ! Vos réponses m'ont mis sur la bonne voie et j'ai trouvé este

SETTINGS.TXT

#from http://tlingenf.spaces.live.com/blog/cns!B1B09F516B5BAEBF!213.entry
#
[General]
MySetting1=value

[Locations]
InputFile="C:\Users.txt"
OutputFile="C:\output.log"

[Other]
WaitForTime=20
VerboseLogging=True

COMMANDE POWERSHELL

#from http://tlingenf.spaces.live.com/blog/cns!B1B09F516B5BAEBF!213.entry
#
Get-Content "C:\settings.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]) } }

puis

Après l'exécution de cet extrait de code, une variable ($h) contiendra les valeurs d'une table de hachage.

Name                           Value
----                           -----
MySetting1                     value
VerboseLogging                 True
WaitForTime                    20
OutputFile                     "C:\output.log"
InputFile                      "C:\Users.txt"

*Pour récupérer un élément de la table, utilisez la commande $h.Get_Item("MySetting1").*

12voto

Vladislav Points 161

Il existe un moyen beaucoup plus pratique de lire les paramètres à partir d'un fichier JSON en utilisant la fonction ConvertFrom-Json Cmdlet dans PowerShell pour lire un fichier au format JSON :

$SettingsObject = Get-Content -Path \path\to\settings.json | ConvertFrom-Json

Dans votre cas, les paramètres en JSON seraient les suivants settings.json :

{
    "link1": "http://www.google.com",
    "link2": "http://www.apple.com",
    "link3": "http://www.microsoft.com"
}

Lecture :

PS C:\> $SettingsObject = Get-Content -Path \path\to\settings.json | ConvertFrom-Json

PS C:\> $SettingsObject

link1                 link2                link3                   
-----                 -----                -----                   
http://www.google.com http://www.apple.com http://www.microsoft.com

PS C:\> $SettingsObject.link1
http://www.google.com

Fuente: PowerTip : Lire un fichier de configuration JSON comme un objet PowerShell

6voto

jason saldo Points 5036

Il y a un bon fil de discussion aquí qui montre ce code (en citant le fil de discussion lié) :

# from http://www.eggheadcafe.com/software/aspnet/30358576/powershell-and-ini-files.aspx
param ($file)

$ini = @{}
switch -regex -file $file
{
    "^\[(.+)\]$" {
        $section = $matches[1]
        $ini[$section] = @{}
    }
    "(.+)=(.+)" {
        $name,$value = $matches[1..2]
        $ini[$section][$name] = $value
    }
}
$ini

Alors vous pouvez le faire :

PS> $links = import-ini links.ini
PS> $links["search-engines"]["link1"]
http://www.google.com
PS> $links["vendors"]["link1"]
http://www.apple.com

En supposant un fichier INI qui ressemble à ceci :

[vendors]
link1=http://www.apple.com
[search-engines]
link1=http://www.google.com

Malheureusement, les regex ne figurent pas dans le code du lien, il vous faudra donc les reproduire, mais il existe une version qui gère les fichiers sans en-tête de section et les lignes qui sont des commentaires.

3voto

Oliver Points 118

Oui, les cmdlets que vous recherchez sont get-content et select-string.

$content=get-content C:\links.txt
start-process iexplore.exe $content[0]

1voto

phbits Points 196

Il existe un excellent article de Microsoft Scripting Guys, que j'ai utilisé avec beaucoup de succès dans mes propres modules.

Utiliser PowerShell pour travailler avec n'importe quel fichier INI

Résumé : Le blogueur invité Oliver Lipkau partage deux fonctions Windows PowerShell pour simplifier la lecture et l'écriture dans les fichiers INI. (Posté le : 20 août 2011)

La fonction qu'ils fournissent et expliquent est la suivante :

function Get-IniContent ($filePath)
{
    $ini = @{}
    switch -regex -file $FilePath
    {
        "^\[(.+)\]" # Section
        {
            $section = $matches[1]
            $ini[$section] = @{}
            $CommentCount = 0
        }
        "^(;.*)$" # Comment
        {
            $value = $matches[1]
            $CommentCount = $CommentCount + 1
            $name = "Comment" + $CommentCount
            $ini[$section][$name] = $value
        }
        "(.+?)\s*=(.*)" # Key
        {
            $name,$value = $matches[1..2]
            $ini[$section][$name] = $value
        }
    }
    return $ini
}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X