2016-09-18 1 views
0

J'ai 2 fichiers txt:Comment VLookUp dans des fichiers texte avec Powershell

ConfigurationFile:

ABC_LKC_FW_PATH: \\PathToABCFolder 
QWE_LKC_MW_PATH: \\PathToQWEFolder 
DEF_BKC_FW_PATH: \\PathToDEFFolder 
ERT_BKC_MW_PATH: \\PathToERTcFolder

et l'autre avec des paramètres

ChoosenConfig:

ABC_LKC_FW_PATH 
ERT_BKC_MW_PATH

Mon script lit et analyse le fichier de configuration en nom et valeur. Je dois lire le fichier ChoosenConfig et utiliser la valeur de la chaîne dans le fichier ConfigurationFile.

Aucune idée comment le faire ...

Script jusqu'à présent:

$IniFile_NME = "$SmokeTestFolder\SanityTests\Config\ConfigToParse.ini" 
dir $IniFile_NME 

$InputFile = [System.IO.File]::OpenText("$IniFile_NME") 

while ($InputRecord = $InputFile.ReadLine()) { 
    # Display the current record 
    Write-Host "`$InputRecord=$InputRecord" 
    Write-Host "" 

    # Determine the position of the sign (:) 
    $Pos = $InputRecord.IndexOf(':') 
    Write-Host "`$Pos=$Pos" 

    # Determine the length of the record 
    $Len = $InputRecord.Length 
    Write-Host "`$Len=$Len" 

    # Parse the record 
    $Variable_NME = $InputRecord.Substring(0, $Pos) 
    $VariableValue_STR = $InputRecord.Substring($Pos + 1, $Len -$Pos -1).ToUpper() 

    Write-Host "`$Variable_NME=$Variable_NME" 
    Write-Host "`$VariableValue_STR=$VariableValue_STR" 

    # Create a new variable based on the parsed information 
    New-Variable -Force -Name $Variable_NME -Value $VariableValue_STR.Trim() 

    # new-variable -name $Variable_NME -value $VariableValue_STR 
    Get-Variable -Name $Variable_NME 
} 
$InputFile.Close() 

Répondre

0

Chaque fois que vous devez rechercher une valeur par une autre la structure de données de choix est un hashtable. Divisez votre entrée à côlons suivie par des espaces (:\s*) et remplir le Hashtable comme ceci:

$configs = @{} 
Get-Content $IniFile_NME | ForEach-Object { 
    $key, $value = $_ -split ':\s*' 
    $configs[$key] = $value 
} 

Une autre option serait d'utiliser ConvertFrom-StringData. Pour cela, vous devez transformer le contenu du fichier INI en une chaîne unique où les clés et les valeurs sont séparées par = au lieu de :.

$configs = (Get-Content $IniFile_NME -Raw) -replace ':\s*', '=' | 
      ConvertFrom-StringData 

Utilisation Get-Content $IniFile_NME | Out-String au lieu de Get-Content $IniFile_NME -Raw si vous utilisez encore v2 PowerShell ou plus tôt.

Une fois que vous avez les données dans une table de hachage, vous pouvez regarder vos configs comme ceci:

Get-Content $chosenConfigsFile | ForEach-Object { $configs[$_] }