Powershell fonction pour remplacer ou ajouter des lignes dans les fichiers texte
Je suis en train de travailler sur un script powershell qui permet de modifier des fichiers de configuration. J'ai des fichiers comme ceci:
#####################################################
# comment about logentrytimeout
#####################################################
Logentrytimeout= 1800
qui devrait ressembler à ceci:
#####################################################
# comment about logentrytimeout
#####################################################
Logentrytimeout= 180
disablepostprocessing = 1
segmentstarttimeout = 180
Si il y a un jeu de clés(Logentrytimeout), il suffit de le mettre à jour à la valeur donnée. Ignorer les commentaires, où la clé est mentionné(les lignes commençant par #). La Clé est sensible à la casse.
Si la clé n'est pas définie(disablepostprocessing et segmentstarttimeout), ajouter une clé et une valeur dans le fichier. Ma fonction jusqu'à présent va comme ceci:
function setConfig( $file, $key, $value )
{
(Get-Content $file) |
Foreach-Object {$_ -replace "^"+$key+".=.+$", $key + " = " + $value } |
Set-Content $file
}
setConfig divider.conf "Logentrytimeout" "180"
setConfig divider.conf "disablepostprocessing" "1"
setConfig divider.conf "segmentstarttimeout" "180"
- Quelle est la bonne regex?
- Comment puis-je vérifier si il y avait un remplacement?
- Si il n'y a pas de remplacement: Comment puis-je ajouter $key+" = "+$valeur dans le fichier alors?
Vous devez vous connecter pour publier un commentaire.
En supposant que le
$key
vous souhaitez remplacer est toujours au début d'une ligne, et qu'il ne contient pas de regex caractèresSi il n'y a pas de remplacement
$key = $value
seront ajoutées au fichier.Version mise à jour des fonctions ci-dessus avec quelques paramétrisation et détaillé de sortie si nécessaire.
Je le ferais:
Edit: ajout d'un remplacement de la cloche, et un pas de match de sifflet.
Modifier la fonction pour cela:
Ensuite, lorsque vous appelez la fonction, utilisez ce format:
Edit: j'ai oublié votre exigence de l'ajout de la ligne si elle n'existe pas. Il s'agira de vérifier pour la
$key
, si ça existe, ça va régler sa valeur à$value
. Si elle n'existe pas, il va ajouter de la$key = $value
à la fin du fichier. J'ai aussi renommé de la fonction pour être plus cohérent avec power shell conventions de nommage.@CarlR Fonction c'est pour PowerShell Version 3. C'est la même adapté à PowerShell Version 2.
EDIT: modification de l'expression régulière pour corriger deux bugs sur le Jeu-FileConfigurationValue:
Si vous en avez une ligne comme ceci:
; This is a Black line
Et vous essayez de faire:
Set-FileConfigurationValue $configFile "Black" 20 -ReplaceExistingValue
Vous obtenez un message "Remplacer" mais rien ne se passe.
Si vous avez deux lignes comme celles-ci:
filesTmp=50
Tmp=50
Et vous essayez de faire:
Set-FileConfigurationValue $configFile "Tmp" 20 -ReplaceExistingValue
Vous obtenez les deux lignes de changé!
filesTmp=20
Tmp=20
C'est la version finale:
J'ai aussi ajouté une fonction pour lire à partir du fichier de config
Utilisation: