Question Variable qui ne s'ecrit plus en fichier texte

Plus d'informations
il y a 8 ans 4 mois #24531 par Amélie
Bonjour,
je suis débutante en powershell. J'avais fait un script qui me listait les fichiers d'un certain type de plusieurs disques externes et cela fonctionnait, mais aujourd'hui cela ne m'affiche plus que le dernier.
Je n'arrive pas à comprendre pourquoi.
Ma variable List1 me renvoie en console :

echo $List1 -> rien
$List1 -> ma liste

et ma commande
$List1 >> $res
n'ecrit rien alors que la $List4 >> $res si.
Cela est incompréhensible pour moi...

Voici une partie de mon script :

$res = \"C:\Temp\List.txt\"

$path = \"M:\"
# WITH EXCLUDE
$List1 = Get-ChildItem -path $path -Recurse | Where-Object { (-not $_.PSIsContainer) -and ($exclude -notcontains $_.Extension) } | Select-Object FullName
Write-Host \"M - Number of movies (Exclude): \" $List1.count

$path = \"P:\"
# WITH EXCLUDE
$List7 = Get-ChildItem -path $path -Recurse | Where-Object { (-not $_.PSIsContainer) -and ($exclude -notcontains $_.Extension) } | Select-Object FullName
Write-Host \"P - Number of movies (Exclude): \" $List7.count
echo $List7

#ecrire le fichier resultat
get-date > $res
#LUI AJOUTER DU CONTENU >>
$texte >> $res
$List1 >> $res
Write-Host \"`n
`n\" >> $res
$List3 >> $res
Write-Host \"`n
`n\" >> $res
$List5 >> $res
Write-Host \"`n
`n\" >> $res
$List7 >> $res
Write-Host \"`n
`n\" >> $res

Write-Host \"
Le fichier crée est à l'adresse : $res
\"


$List1 et les autres contiennent bien une liste de string, mais je ne comprends absolument pas pourquoi cela ne veut pas s'écrire dans le fichier final.
$List7 fonctionne encore, et il y a quelques temps j'avais encore $List3 aussi.

Je modifie mon script et je récupère de moins en moins d'info c'est paradoxal !

Si quelqu'un comprend ce qui peut bien se passer, ce serait vraiment gentil de m'expliquer.

PS Set-Content $res $List1 ne marche pas non plus.

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

Plus d'informations
il y a 8 ans 4 mois #24532 par Amélie
Bon j'ai fini par trouver un contournement en écrivant \"echo\" devant les variables de listes. Je ne comprends toujours pas pourquoi certaines ça fonctionne sans d'autre non.

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

Plus d'informations
il y a 8 ans 4 mois #24533 par crogiez
bonjour meli

voici un bout de script qui fait une log

[code:1]
# install_silent.ps1
# 28/08/2017 philippe crogiez creation X86
# 04/09/2017 version X64

function ecrit_log($llogf){
# rem create log
$llog2=get-date -Format \"yyyy-MM-dd-HH-mm-ss\"
$llog2=$llog2+\";\"+$llogf
$llog2
$llog2 >> $pathlog
}

function touche(){
$t=read-host \"touche\"
}

# recup dossier courant
$moninvoc=$MyInvocation.InvocationName
$dosscurrent=(split-path -Path $moninvoc -Parent) + \"\\"
#$moninvoc
$dosscurrent
\"-\"

# calcul du chemin de la log dans profil user temp
# si cest une install user
$dosslog=$env:USERPROFILE+\"\AppData\Local\Temp\\"
# si cest une install par system
$dosslog=$env:«»ProgramFiles+\"\Mozilla Firefox\Installer\\"
# ecrit dans dossier courant
$dosslog=$dosscurrent

#là tu ecrit le nom de log que tu veux
$release=\"Mozilla_Firefox_53.00.03_W7_X64_R01\"
$filelog=$release+\"_Installer.log\"
$pathlog=$dosslog+$filelog
$tirets=\"\";1..50 | % {$tirets=$tirets+\"-\"};
#
$dosslog
$pathlog
\"-\"

# supprime la log si elle existe deja
Remove-Item -Path $pathlog -ErrorAction SilentlyContinue
ecrit_log($tirets)
ecrit_log($dosslog)
ecrit_log($filelog)
ecrit_log($tirets)

# ecrit la version de powershell utilisée
ecrit_log(\"version powershell utilisee\"«»)
ecrit_log($env:«»PROCESSOR_ARCHITECTURE)
$intptr=\"\"
Switch ([intptr]::«»Size) {4 {$intptr=\"x86\"};8 {$intptr=\"x64\"}}
ecrit_log($intptr)
ecrit_log($tirets)

#ICI tu ajoute ton code
#pour ecrire une ligne
ecrit_log(\"j ecris cette ligne dans la log\"«»)

# FIN
ecrit_log(\"fin\"«»)
ecrit_log($tirets)
[/code:1]<br><br>Message édité par: crogiez, à: 22/11/17 15:14

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

Plus d'informations
il y a 8 ans 4 mois #24534 par Philippe
salut meliweb

tu peut utilisé la fonction ecrit_log($llogf) de crogiez

mais pour que tu comprenne pourquoi tu ni arrive pas je te donne quelques explications :

1)
echo est un alias de Write-Output
donc quand tu utilise echo ça n'utilise donc pas la commande DOS et ne gère pas les redirections qui peuvent suivre

2)
[code:1]Write-Host \&quot;`n
`n\&quot; &gt;&gt; $res[/code:1] ne fonctionne pas
cette ligne de code écrit dans la console et c'est tout
curieusement il crée le fichier destination ($res) :blink:
pour ecrire dans le fichier $res tu doit faire par exemple :
[code:1]\&quot;`n
`n\&quot; &gt;&gt; $res[/code:1]

3)
echo $List1 n'affiche rien
normal les Write-xxx ne sont par prévus pour affichage des objets (liste, tableau, etc)
Get-ChildItem renvoie un objet !!
comme tu la vu pour affiché une variable quelque soit le type objet, on ne met que le nom de la variable
ça envoie l'objet dans le pipeline qui par défaut est redirigé sur la console
tu peut malgré tous utilisé la série des Format-xxx pour un affichage spécifique des objets sur la console uniquement
par exemple :
[code:1]Get-ChildItem c:\ | Format-Table
ou
Get-ChildItem c:\ | Format-List
ou
Get-ChildItem c:\ | Format-Wide
ou
Get-ChildItem c:\ | Format-Table FullName
[/code:1]

3)
pour finir avec tes soucis du jour
écrire de tableau sur un ficher peut ne pas fonctionné suivant le type d'objet à l'origine du tableau :(
il te faudra dans certain cas utilisé des boucles pour écrire ta liste dans un fichier
mais cette commande fonctionne : :)
[code:1]Get-ChildItem c:\ | select FullName &gt;&gt; c:\temp\ttt.txt
[/code:1]
et est presque egale a ceci :
[code:1]
Get-ChildItem c:\ | foreach {
$_.FullName &gt;&gt; c:\temp\ttt.txt
}[/code:1]
tu remarquera qu'il n'y a pas le nom de la colonne dans le fichier pour le deuxième exemple !!<br><br>Message édité par: 6ratgus, à: 22/11/17 18:32

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

Temps de génération de la page : 0.038 secondes
Propulsé par Kunena