Question
if sur le contenu d'un fichier
- Toper
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 145
- Remerciements reçus 0
il y a 10 ans 11 mois #20262
par Toper
Powershell: la vie est belle
Réponse de Toper sur le sujet Re:if sur le contenu d'un fichier
Je mets mes variables en début de script.
Ex:
[code:1]
$variable1 = get-content .......
$variable2 = .....
$variable3 = ....
.................
.................
[/code:1]
Et à la suite, j'écris mon script.
Mais lorsque je le lance, il m'exécute les variables.
Donc si par exemple la variable1 contient
[code:1]get-content \"c:\program files (x86)\....\...[/code:1]
et que le poste sur lequel est lancé le script est un 32bits, powershell me dire qu'il ne peut pas vérifier le chemin \"c:\program files (x86)\....\...\" car le chemin n'existe pas.
Ex:
[code:1]
$variable1 = get-content .......
$variable2 = .....
$variable3 = ....
.................
.................
[/code:1]
Et à la suite, j'écris mon script.
Mais lorsque je le lance, il m'exécute les variables.
Donc si par exemple la variable1 contient
[code:1]get-content \"c:\program files (x86)\....\...[/code:1]
et que le poste sur lequel est lancé le script est un 32bits, powershell me dire qu'il ne peut pas vérifier le chemin \"c:\program files (x86)\....\...\" car le chemin n'existe pas.
Powershell: la vie est belle
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 10 ans 11 mois #20265
par Philippe
Réponse de Philippe sur le sujet Re:if sur le contenu d'un fichier
voici un exemple qui devrait te guidé vers une solution :
ne regarde que les 10 premieres lignes du scripts
ne regarde que les 10 premieres lignes du scripts
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 10 ans 11 mois #20267
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:if sur le contenu d'un fichier
gregmurf écrit:
Si le contenu de tes variables dépendent d'une condition il faut les créer dans le test de la condition, CQFD.Et à la suite, j'écris mon script.
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 10 ans 11 mois #20281
par Toper
Powershell: la vie est belle
Réponse de Toper sur le sujet Re:if sur le contenu d'un fichier
Elles ne dépendent pas d'une condition (?).
Voici mon script:
[code:1]
$PathToVerify64 = \"C:\Program Files (x86)\dossier\fichier.INI\"
$Verify64 = Get-Content $PathToVerify64 | Select-String -Pattern \"phrase_a_trouver\"
$PathToVerify32 = \"C:\Program Files\dossier\fichier.INI\"
$Verify32 = Get-Content $PathToVerify32 | Select-String -Pattern \"phrase_a_trouver\"
$OSArch = Get-WmiObject -Class win32_operatingsystem | Select-Object -ExpandProperty osarchitecture
if ($OSArch -match \"64 bits\" -and $Verify64 -match \"phrase_a_trouver\" ) {
Write-Host \"64 bits and already on the good server\"
} elseif ($OSArch -match \"64 bits\" -and $Verify64 -notmatch \"phrase_a_trouver\" ) {
write-host \"64 bits and need to migrate\"
}[/code:1]
Lorsque je lance le script, il me dit qu'il ne trouve pas le chemin du \"$verify32\".
Je pense bien que l'erreur vient bien de moi, mais je ne vois pas ce que je fais mal....
Message édité par: gregmurf, à: 23/06/15 22:16<br><br>Message édité par: gregmurf, à: 23/06/15 22:17
Voici mon script:
[code:1]
$PathToVerify64 = \"C:\Program Files (x86)\dossier\fichier.INI\"
$Verify64 = Get-Content $PathToVerify64 | Select-String -Pattern \"phrase_a_trouver\"
$PathToVerify32 = \"C:\Program Files\dossier\fichier.INI\"
$Verify32 = Get-Content $PathToVerify32 | Select-String -Pattern \"phrase_a_trouver\"
$OSArch = Get-WmiObject -Class win32_operatingsystem | Select-Object -ExpandProperty osarchitecture
if ($OSArch -match \"64 bits\" -and $Verify64 -match \"phrase_a_trouver\" ) {
Write-Host \"64 bits and already on the good server\"
} elseif ($OSArch -match \"64 bits\" -and $Verify64 -notmatch \"phrase_a_trouver\" ) {
write-host \"64 bits and need to migrate\"
}[/code:1]
Lorsque je lance le script, il me dit qu'il ne trouve pas le chemin du \"$verify32\".
Je pense bien que l'erreur vient bien de moi, mais je ne vois pas ce que je fais mal....
Message édité par: gregmurf, à: 23/06/15 22:16<br><br>Message édité par: gregmurf, à: 23/06/15 22:17
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 10 ans 11 mois #20300
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:if sur le contenu d'un fichier
gregmurf écrit:
Une possible réécriture :
[code:1]
#si la portée concerne le script
$isVerify64=$isVerify32=$null
function Test-Pattern{
param(
$pattern,
$path
)
#Contournement d'un bug Select-String
[Boolean](Get-Content $Path | Select-String -Pattern $Pattern -quiet)
}
if ($OSArch -match \"64 bits\" )
{
$isVerify64 = Test-Pattern -Path $PathToVerify64 -Pattern \"phrase_a_trouver\"
if ($isVerify64)
{
Write-Host \"64 bits and already on the good server\"
}
else
{
write-host \"64 bits and need to migrate\"
}
}
#else donc 32 bits, tant qu'il n'existe pas de processeur 128 bits ;«»-)
[/code:1]
Si, la version de l'OS. Certes ma formulation n'était pas très explicite.Elles ne dépendent pas d'une condition
Une possible réécriture :
[code:1]
#si la portée concerne le script
$isVerify64=$isVerify32=$null
function Test-Pattern{
param(
$pattern,
$path
)
#Contournement d'un bug Select-String
[Boolean](Get-Content $Path | Select-String -Pattern $Pattern -quiet)
}
if ($OSArch -match \"64 bits\" )
{
$isVerify64 = Test-Pattern -Path $PathToVerify64 -Pattern \"phrase_a_trouver\"
if ($isVerify64)
{
Write-Host \"64 bits and already on the good server\"
}
else
{
write-host \"64 bits and need to migrate\"
}
}
#else donc 32 bits, tant qu'il n'existe pas de processeur 128 bits ;«»-)
[/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 10 ans 11 mois #20336
par Toper
Powershell: la vie est belle
Réponse de Toper sur le sujet Re:if sur le contenu d'un fichier
Euh... pas tout compris:(
j'ai traduit par ça:
[code:1]$isVerify64=$isVerify32=$null
function Test-Pattern{
param(
$pattern,
$path
)
Test-Path \"C:\Program Files (x86)\dossier\fichier.INI\" -IsValid
}
if (Test-Path \"C:\Program Files (x86)\dossier\fichier.INI\" -IsValid)
{
$isVerify64 = Test-Pattern -Path $PathToVerify64 -Pattern \"phrase_a_trouver\"
{
if ($isVerify64) {
write-host \"matched\"
}
else
{
write-host \"notmatched\"
}
}
}[/code:1]
Ce qui est surement très faux, et ce qui m'amène à une question (ou plutôt une affirmation !!): mes variables sont toutes au début de mon script et elles dépend donc de la condition \"Type d'architectuer d'OS\". Ce qui génère une erreur sur la partie 32bits pour un poste en 64bits, et vice-versa.
J'ai essayé de comprendre comment créer les paramètres d'un script (ou fonction), mais c'est assez flou...
Prenons le simple exemple des paramètres de ce script:
[code:1]#si la portée concerne le script
$isVerify64=$isVerify32=$null
function Test-Pattern{
param(
$pattern,
$path
)
#Contournement d'un bug Select-String
[Boolean](Get-Content $Path | Select-String -Pattern $Pattern -quiet)
}[/code:1]
Où dois-je définir $pattern (et $path) ?
Dois-je remplacer [Boolean] par la valeur attendue, ou dois-je le laisser comme tel ?
.............
En gros: comment écris-t-on ses paramètres ?
Par exemple, mon script
[code:1]$path32=test-path \"C:\Program Files\dossier\fichier.INI\"
$path64=test-path \"C:\Program Files (x86)\dossier\fichier.INI\"
$serverparam32=Get-Content \"C:\Program Files\dossier\fichier.INI\" | Where-Object { $_ -match \"phrase_a_trouver\" }
$serverparam64=Get-Content \"C:\Program Files (x86)\dossier\fichier.INI\" | Where-Object { $_ -match \"phrase_a_trouver\" }
if ($path32 -match \"True\" -and ($serverparam32 -match \"phrase_a_trouver\"«»)) {
Write-Host \"path=32bits and phrase_a_trouver a ete trouvée\"
} else { write-host \"path invalide ou phrase non trouvée\"
}
if ($path64 -match \"True\" -and ($serverparam64 -match \"phrase_a_trouver\"«»)) {
Write-Host \"path=64bits and phrase_a_trouver a ete trouvée\"
} else { write-host \"path invalide ou phrase non trouvée\"
}[/code:1]
Comment puis-je mettre en paramètres les variables pour ne pas qu'elles soient lancées sans condition (exemple: ici, j'ai une erreur qui me dit qu'il ne trouve pas le chemin $serverparam64. Normal, je suis en 32bits).
Message édité par: gregmurf, à: 29/06/15 13:39<br><br>Message édité par: gregmurf, à: 29/06/15 13:51
j'ai traduit par ça:
[code:1]$isVerify64=$isVerify32=$null
function Test-Pattern{
param(
$pattern,
$path
)
Test-Path \"C:\Program Files (x86)\dossier\fichier.INI\" -IsValid
}
if (Test-Path \"C:\Program Files (x86)\dossier\fichier.INI\" -IsValid)
{
$isVerify64 = Test-Pattern -Path $PathToVerify64 -Pattern \"phrase_a_trouver\"
{
if ($isVerify64) {
write-host \"matched\"
}
else
{
write-host \"notmatched\"
}
}
}[/code:1]
Ce qui est surement très faux, et ce qui m'amène à une question (ou plutôt une affirmation !!): mes variables sont toutes au début de mon script et elles dépend donc de la condition \"Type d'architectuer d'OS\". Ce qui génère une erreur sur la partie 32bits pour un poste en 64bits, et vice-versa.
J'ai essayé de comprendre comment créer les paramètres d'un script (ou fonction), mais c'est assez flou...
Prenons le simple exemple des paramètres de ce script:
[code:1]#si la portée concerne le script
$isVerify64=$isVerify32=$null
function Test-Pattern{
param(
$pattern,
$path
)
#Contournement d'un bug Select-String
[Boolean](Get-Content $Path | Select-String -Pattern $Pattern -quiet)
}[/code:1]
Où dois-je définir $pattern (et $path) ?
Dois-je remplacer [Boolean] par la valeur attendue, ou dois-je le laisser comme tel ?
.............
En gros: comment écris-t-on ses paramètres ?
Par exemple, mon script
[code:1]$path32=test-path \"C:\Program Files\dossier\fichier.INI\"
$path64=test-path \"C:\Program Files (x86)\dossier\fichier.INI\"
$serverparam32=Get-Content \"C:\Program Files\dossier\fichier.INI\" | Where-Object { $_ -match \"phrase_a_trouver\" }
$serverparam64=Get-Content \"C:\Program Files (x86)\dossier\fichier.INI\" | Where-Object { $_ -match \"phrase_a_trouver\" }
if ($path32 -match \"True\" -and ($serverparam32 -match \"phrase_a_trouver\"«»)) {
Write-Host \"path=32bits and phrase_a_trouver a ete trouvée\"
} else { write-host \"path invalide ou phrase non trouvée\"
}
if ($path64 -match \"True\" -and ($serverparam64 -match \"phrase_a_trouver\"«»)) {
Write-Host \"path=64bits and phrase_a_trouver a ete trouvée\"
} else { write-host \"path invalide ou phrase non trouvée\"
}[/code:1]
Comment puis-je mettre en paramètres les variables pour ne pas qu'elles soient lancées sans condition (exemple: ici, j'ai une erreur qui me dit qu'il ne trouve pas le chemin $serverparam64. Normal, je suis en 32bits).
Message édité par: gregmurf, à: 29/06/15 13:39<br><br>Message édité par: gregmurf, à: 29/06/15 13:51
Powershell: la vie est belle
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.053 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- if sur le contenu d'un fichier