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

14

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 puis appelez ces informations dans le script PS1:

start-process iexplore.exe $Link1
Xavier C
la source

Réponses:

17

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

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]) } }

ensuite

Après avoir exécuté l'extrait de code, une variable ($ h) contiendra les valeurs dans un HashTable.

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").*

Xavier C
la source
4
Vous pouvez également obtenir les paramètres par $ h.MySetting1, beaucoup plus convivial
Ryan Shillington
J'obtiens une exception de tableau hors limites dans la ligne de l'analyseur d'expressions régulières, malgré l'utilisation du même fichier .txt indiqué dans cette réponse et du code de l'analyseur (pas de changement) => Index was outside the bounds of the array. At C:\testConfigreader.ps1:13 char:264 + ... -ne $True)) { $h.Add($k[0], $k[1]) } } + ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OperationStopped: (:) [], IndexOutOfRangeException + FullyQualifiedErrorId : System.IndexOutOfRangeExceptionQuelqu'un at-il cela fonctionne correctement?
Shiva
Si votre fichier de configuration n'a pas [Sections]ou ; semicolon comments, vous pouvez le faire simplement $config = Get-Content $ConfigPath | ConvertFrom-StringData. Voir ConvertFrom-StringData pour plus de détails.
asmironov
4

Il y a un bon fil ici qui montre ce code (en citant le fil 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

Ensuite, vous pouvez 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 expressions rationnelles manquent dans le code du lien, vous devrez donc les reproduire, mais il existe une version qui gère les fichiers sans en-têtes de section et les lignes qui sont des commentaires.

En pause jusqu'à nouvel ordre.
la source
Vous pouvez gérer les commentaires facilement en ajoutant simplement un autre cas au switchavec '^#' {}. Vous pouvez également accéder au contenu de la table de hachage avec un point, donc cela $links.vendors.link1devrait aussi fonctionner, ce qui pourrait être un peu mieux à lire.
Joey
2

oui, les applets de commande que vous recherchez sont get-content et select-string.

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

Pour une approche plus complète, envisagez https://github.com/alekdavis/ConfigFile . Ce module prend en charge les fichiers de configuration au format JSON, ainsi que INI. Il permet d'étendre les variables et effectue quelques astuces intéressantes. La chose à retenir est que les noms des paires clé-valeur dans le fichier INI doivent correspondre aux noms des paramètres ou variables de script.

Alek Davis
la source