Question
Remplacer un mot en fonction de l'OS
- Toper
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 145
- Remerciements reçus 0
il y a 11 ans 4 mois #18709
par Toper
Powershell: la vie est belle
Remplacer un mot en fonction de l'OS a été créé par Toper
Bonjour,
selon la version de l'OS (XP ou W7), je souhaite remplacer un mot dans un fichier texte.
Je me base sur la version de l'OS car le chemin \"programfiles\" n'est pas le même.
Si j'essaie simplement de remplacer le mot, pas de pbm.
Mais si je conditionne avant, il me vide le fichier...
Voici le code:
[code:1]$os = Get-CimInstance win32_operatingsystem
$MainList = \"C:\Program Files\Cobian Backup 10\DB\MainList.lst\"
if ($OS.buildNumber -eq \"2600\") {get-Content $MainList} ForEach-Object {$_ -replace \"username\", \"2600\"} | set-content $MainList
if ($OS.buildNumber -eq \"7600\") {get-Content $MainList} forEach-Object {$_ -replace \"username\", \"7600\"} | set-content $MainList
if ($OS.buildNumber -eq \"7601\") {Get-Content $MainList} ForEach-Object {$_ -replace \"username\", \"7601\"} | Set-Content $MainList
[/code:1]Le but de ce (début) de script est de pouvoir automatiser l'installation de cobian backup, ainsi que la création de la tâche de sauvegarde...
<br><br>Message édité par: gregmurf, à: 2/01/15 16:31
selon la version de l'OS (XP ou W7), je souhaite remplacer un mot dans un fichier texte.
Je me base sur la version de l'OS car le chemin \"programfiles\" n'est pas le même.
Si j'essaie simplement de remplacer le mot, pas de pbm.
Mais si je conditionne avant, il me vide le fichier...
Voici le code:
[code:1]$os = Get-CimInstance win32_operatingsystem
$MainList = \"C:\Program Files\Cobian Backup 10\DB\MainList.lst\"
if ($OS.buildNumber -eq \"2600\") {get-Content $MainList} ForEach-Object {$_ -replace \"username\", \"2600\"} | set-content $MainList
if ($OS.buildNumber -eq \"7600\") {get-Content $MainList} forEach-Object {$_ -replace \"username\", \"7600\"} | set-content $MainList
if ($OS.buildNumber -eq \"7601\") {Get-Content $MainList} ForEach-Object {$_ -replace \"username\", \"7601\"} | Set-Content $MainList
[/code:1]Le but de ce (début) de script est de pouvoir automatiser l'installation de cobian backup, ainsi que la création de la tâche de sauvegarde...
Powershell: la vie est belle
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 11 ans 4 mois #18712
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Remplacer un mot en fonction de l'OS
Salut,
ton bloc lié au If ne contient qu'une partie du traitement, tu dois inclure le foreach dans chaque bloc lié au If correspondant.
ton bloc lié au If ne contient qu'une partie du traitement, tu dois inclure le foreach dans chaque bloc lié au If correspondant.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Toper
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 145
- Remerciements reçus 0
il y a 11 ans 4 mois #18718
par Toper
Powershell: la vie est belle
Réponse de Toper sur le sujet Re:Remplacer un mot en fonction de l'OS
Salut,
tu veux dire qu'il faut un \"foreach\" pour le bloc \"get-content\" ?
tu veux dire qu'il faut un \"foreach\" pour le bloc \"get-content\" ?
Powershell: la vie est belle
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 11 ans 4 mois #18719
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Remplacer un mot en fonction de l'OS
gregmurf écrit:
[code:1]
$os = Get-CimInstance win32_operatingsystem
$MainList = \"C:\Program Files\Cobian Backup 10\DB\MainList.lst\"
if ($OS.buildNumber -eq \"2600\"«»)
{
(get-Content $MainList)|
ForEach-Object {$_ -replace \"username\", \"2600\"} |
set-content $MainList
}
[/code:1]
Oui :tu veux dire qu'il faut un \"foreach\" pour le bloc \"get-content\" ?
[code:1]
$os = Get-CimInstance win32_operatingsystem
$MainList = \"C:\Program Files\Cobian Backup 10\DB\MainList.lst\"
if ($OS.buildNumber -eq \"2600\"«»)
{
(get-Content $MainList)|
ForEach-Object {$_ -replace \"username\", \"2600\"} |
set-content $MainList
}
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Toper
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 145
- Remerciements reçus 0
il y a 11 ans 4 mois #18722
par Toper
Powershell: la vie est belle
Réponse de Toper sur le sujet Re:Remplacer un mot en fonction de l'OS
Merci.
C'est ce qui me manque: la \"syntaxe\" d'écriture....
C'est ce qui me manque: la \"syntaxe\" d'écriture....
Powershell: la vie est belle
Connexion ou Créer un compte pour participer à la conversation.
- Toper
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 145
- Remerciements reçus 0
il y a 11 ans 4 mois #18726
par Toper
Powershell: la vie est belle
Réponse de Toper sur le sujet Re:Remplacer un mot en fonction de l'OS
Je dois encore merd.. sur la syntaxe...
Maintenant, il effectue bien le remplacement de ce que je lui demande, mais il créé une ligne ayant les mots remplacés en laissant la ligne d'origine, puis enregistre le fichier.
Et ce pour toutes les lignes (mêmes celles qui ne subissent aucune modif's)
[code:1]$username = Get-ADUser ${env:username} | Select-Object -ExpandProperty SamAccountName
$Computername = ${env:computername}
$osname = (Get-WmiObject -Class win32_operatingsystem).caption
$osarchitecture = (Get-WmiObject -Class win32_operatingsystem | Select-Object osarchitecture)
$MainList32Bits = \"C:\Program Files\Cobian Backup 10\DB\MainList.lst\"
$MainList64Bits = \"C:\Program Files(X86)\Cobian Backup 10\DB\MainList.lst\"
$DocsXP = \"c:\Documents and Settings\${Env:username}\Mes documents\"
$BureauXP = \"c:\Documents and Settings\${Env:username}\Bureau\"
$FavorisXP = \"c:\Documents and Settings\${Env:username}\Favoris\"
if ($osname -match \"xp\"«»)
{
(get-Content $MainList32Bits)
ForEach-Object {
$_ -replace 'C:\Users\USERNAME\Desktop', \"$BureauXP\"
$_ -replace 'C:\Users\USERNAME\Favorites', \"$FavorisXP\"
$_ -replace 'C:\Users\USERNAME\Documents', \"$docs\"
$_ -replace \"computername\", \"$Computername\"
} | set-content $MainList32Bits
}
if ($osarchitecture -match \"32\" -and $osname -match \"7\"«»)
{
(get-Content $MainList32Bits) |
ForEach-Object {
$_ -replace \"USERNAME\", \"$username\"
$_ -replace \"computername\", \"$Computername\"
} | set-content $MainList32Bits
}
if ($osarchitecture -match \"64\" -and $osname -match \"7\"«»)
{
(get-Content $MainList64Bits) |
ForEach-Object {
$_ -replace \"USERNAME\", \"$username\"
$_ -replace \"computername\", \"$Computername\"
} | set-content $MainList64Bits
}[/code:1]
Maintenant, il effectue bien le remplacement de ce que je lui demande, mais il créé une ligne ayant les mots remplacés en laissant la ligne d'origine, puis enregistre le fichier.
Et ce pour toutes les lignes (mêmes celles qui ne subissent aucune modif's)
[code:1]$username = Get-ADUser ${env:username} | Select-Object -ExpandProperty SamAccountName
$Computername = ${env:computername}
$osname = (Get-WmiObject -Class win32_operatingsystem).caption
$osarchitecture = (Get-WmiObject -Class win32_operatingsystem | Select-Object osarchitecture)
$MainList32Bits = \"C:\Program Files\Cobian Backup 10\DB\MainList.lst\"
$MainList64Bits = \"C:\Program Files(X86)\Cobian Backup 10\DB\MainList.lst\"
$DocsXP = \"c:\Documents and Settings\${Env:username}\Mes documents\"
$BureauXP = \"c:\Documents and Settings\${Env:username}\Bureau\"
$FavorisXP = \"c:\Documents and Settings\${Env:username}\Favoris\"
if ($osname -match \"xp\"«»)
{
(get-Content $MainList32Bits)
ForEach-Object {
$_ -replace 'C:\Users\USERNAME\Desktop', \"$BureauXP\"
$_ -replace 'C:\Users\USERNAME\Favorites', \"$FavorisXP\"
$_ -replace 'C:\Users\USERNAME\Documents', \"$docs\"
$_ -replace \"computername\", \"$Computername\"
} | set-content $MainList32Bits
}
if ($osarchitecture -match \"32\" -and $osname -match \"7\"«»)
{
(get-Content $MainList32Bits) |
ForEach-Object {
$_ -replace \"USERNAME\", \"$username\"
$_ -replace \"computername\", \"$Computername\"
} | set-content $MainList32Bits
}
if ($osarchitecture -match \"64\" -and $osname -match \"7\"«»)
{
(get-Content $MainList64Bits) |
ForEach-Object {
$_ -replace \"USERNAME\", \"$username\"
$_ -replace \"computername\", \"$Computername\"
} | set-content $MainList64Bits
}[/code:1]
Powershell: la vie est belle
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.046 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Remplacer un mot en fonction de l'OS