Question if sur le contenu d'un fichier

Plus d'informations
il y a 10 ans 11 mois #20262 par Toper
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.

Powershell: la vie est belle :)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
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

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 11 mois #20267 par xyz
Réponse de xyz sur le sujet Re:if sur le contenu d'un fichier
gregmurf écrit:

Et à la suite, j'écris mon script.

Si le contenu de tes variables dépendent d'une condition il faut les créer dans le test de la condition, CQFD.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 11 mois #20281 par Toper
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....:pinch:

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 :)
Pièces jointes :

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 11 mois #20300 par xyz
Réponse de xyz sur le sujet Re:if sur le contenu d'un fichier
gregmurf écrit:

Elles ne dépendent pas d'une condition

Si, la version de l'OS. Certes ma formulation n'était pas très explicite.
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 \&quot;64 bits\&quot; )
{
$isVerify64 = Test-Pattern -Path $PathToVerify64 -Pattern \&quot;phrase_a_trouver\&quot;
if ($isVerify64)
{
Write-Host \&quot;64 bits and already on the good server\&quot;
}
else
{
write-host \&quot;64 bits and need to migrate\&quot;
}
}
#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.

Plus d'informations
il y a 10 ans 11 mois #20336 par Toper
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 \&quot;C:\Program Files (x86)\dossier\fichier.INI\&quot; -IsValid
}

if (Test-Path \&quot;C:\Program Files (x86)\dossier\fichier.INI\&quot; -IsValid)
{
$isVerify64 = Test-Pattern -Path $PathToVerify64 -Pattern \&quot;phrase_a_trouver\&quot;
{
if ($isVerify64) {
write-host \&quot;matched\&quot;
}
else
{
write-host \&quot;notmatched\&quot;
}
}
}[/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 \&quot;Type d'architectuer d'OS\&quot;. 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 \&quot;C:\Program Files\dossier\fichier.INI\&quot;
$path64=test-path \&quot;C:\Program Files (x86)\dossier\fichier.INI\&quot;
$serverparam32=Get-Content \&quot;C:\Program Files\dossier\fichier.INI\&quot; | Where-Object { $_ -match \&quot;phrase_a_trouver\&quot; }
$serverparam64=Get-Content \&quot;C:\Program Files (x86)\dossier\fichier.INI\&quot; | Where-Object { $_ -match \&quot;phrase_a_trouver\&quot; }
if ($path32 -match \&quot;True\&quot; -and ($serverparam32 -match \&quot;phrase_a_trouver\&quot;«»)) {
Write-Host \&quot;path=32bits and phrase_a_trouver a ete trouvée\&quot;
} else { write-host \&quot;path invalide ou phrase non trouvée\&quot;
}

if ($path64 -match \&quot;True\&quot; -and ($serverparam64 -match \&quot;phrase_a_trouver\&quot;«»)) {
Write-Host \&quot;path=64bits and phrase_a_trouver a ete trouvée\&quot;
} else { write-host \&quot;path invalide ou phrase non trouvée\&quot;
}[/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
Propulsé par Kunena