Question [Résolu] Exéc. différente entre client et serveur

Plus d'informations
il y a 5 ans 9 mois #25679 par Franck Lagrue
Bonjour,

j'ai un cas particulier que je n'arrive pas à solutionner.

mon script ps balaye un répertoire, copie les fichiers de la veille et supprime ceux dont la date de création est supérieur à 30 jours.

sur mon poste client (Windows 10) pas de soucis, tout se déroule conformément aux spécifications.

dès que je l'exécute sur un serveur (W2K8 R2), j'ai le message suivant :

Confirmer
L'élément situé à l'emplacement
Microsoft.PowerShell.Core\FileSystem::\\172.32.3.49\c$\Fins de journée\ a des
enfants et le paramètre Recurse n'a pas été spécifié. Si vous continuez, tous
les enfants seront supprimés avec l'élément. Êtes-vous sûr de vouloir
continuer ?
[O] Oui [T] Oui pour tout [N] Non Non pour tout Suspendre
[?] Aide(la valeur par défaut est « O ») :


Voici mon code (hors définition des variables)

[code:1]try {

$File = Gci -Path \"$uncServer\" |Where-Object {$_.psiscontainer -eq $false}| Where-Object {$_.name -like \"*.PDF\"} |Where-Object {$_.CreationTime.date -eq $(Get-Date).date.addDays(-1)}
foreach ($item in $File) {
if (!(Test-Path -Path $pathExport\$YYYY\$MM\$j\)) {New-Item \"$pathExport\$YYYY\$MM\$j\\" -Type Directory}
Copy-Item \"$uncServer\$item\" -Destination \"$pathExport\$YYYY\$MM\$j\\" -Recurse -Force
\"le $Jour_log/$MM/$YYYY - $Heure Copie des fichiers $item\" |Out-File $pathExport\$log -Append
}
$item = \"\"

$FileDel = Gci -Path \"$uncServer\" |Where-Object {$_.psiscontainer -eq $false}| Where-Object {$_.name -like \"*.PDF\"} |Where-Object {$_.CreationTime.date -le $(Get-Date).date.addDays(-30)}

\"le $Jour_log/$MM/$YYYY\" |Out-File $pathExport\$log -Append
foreach ($item in $FileDel) {
#Write-Host \"$uncServer\$item\"
Remove-Item \"$uncServer\$item\"

\"le $Jour_log/$MM/$YYYY - $Heure suppression des fichiers $item\" |Out-File $pathExport\$log -Append

}
\"___________________________________________________\"|Out-File $pathExport\$log -Append



}
catch {
# on affiche uniquement le message d'erreur
\"le $J/$MM/$YYYY - $Heure récupération des Fins de session TPV liste erreurs\" |Out-File $pathLog\$logErr -Append
Out-File -InputObject $_.Exception.Message -FilePath $pathLog\$logErr -Append

}
\"le $J/$MM/$YYYY - $Heure Pour les Fins de session TPV fin liste Erreurs_________________________\"|Out-File $pathLog\$logErr -Append


net use $uncServer /delete
exit[/code:1]

Si quelqu'un a une idée, merci<br><br>Message édité par: Arnaud, à: 29/06/18 14:08

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

Plus d'informations
il y a 5 ans 9 mois #25682 par NicolasBdn
Bonjour GeekAlf,

Le prompt te signale que le dossier que tu cherches à supprimer contient des fichiers ou des sous-dossier.

Tu peux éviter cet avertissement en spécifiant -Recurse et - Force sur la commande Remove-Item.

En espérant avoir pu t'aider.

NicolasB

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

Plus d'informations
il y a 5 ans 9 mois #25685 par Franck Lagrue
Bonjour Nicolas,

merci pour ta réponse, j'ai tenté le recurse et le force, mais malheureusement ça ne répond pas à mon besoin.

en effet dans ce cas, il suppprime le répertoire complétement, sans tenir compte des restrictions du gci

[code:1]$FileDel = Gci -Path \&quot;$uncServer\&quot; |Where-Object {$_.psiscontainer -eq $false}| Where-Object {$_.name -like \&quot;*.PDF\&quot;} |Where-Object {$_.CreationTime.date -le $(Get-Date).date.addDays(-30)} [/code:1]

ce qui est assez gênant :blink:

et ce qui est plus troublant, c'est que sur mon poste ça fonctionne bien....

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

Plus d'informations
il y a 5 ans 9 mois #25686 par NicolasBdn
Désolé, j'ai lu ton poste un peu trop rapidement.

Il semble en effet que les restrictions Where ne soit pas vu correctement. Surtout celle du psiscontainer.

On peut tenter de remanier ta ligne de cette manière :

[code:1]$FileDel = Gci -Path \&quot;$uncServer\&quot; -filter *.PDF |Where-Object {($_.psiscontainer -eq $false ) -and ($_.CreationTime -le $(Get-Date).addDays(-30))}[/code:1]

Dans ce cas, tu améliores le filtrage en positionnant le filtre de l'extension le plus à gauche du pipeline.


Tente de lancer cette commande en dehors du script ou de positionner le paramètre -Whatif sur la commande Remove-Item. Tu vérifieras ainsi le bon déroulement de la commande sans supprimer de fichier.


NicolasB<br><br>Message édité par: NicolasB, à: 29/06/18 08:43

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

Plus d'informations
il y a 5 ans 9 mois #25688 par Franck Lagrue
j'ai pris ta syntaxe, et ai mis le -whatif


résultat :

WhatIf : Opération « Supprimer le répertoire » en cours sur la cible « \\172.2.2.2\c$\Fins de sessions\ ».
\\172.2.2.2\c$\Fins de sessions a été supprimé.


il ne s'occupe que du répertoire et pas du filtre.

et je bloque sur le fait que je n'ai pas le même comportement du script entre mon poste de travail et sur les autres PC ou serveurs......

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

Plus d'informations
il y a 5 ans 9 mois #25689 par Franck Lagrue
j'ai trouvé la raison, je pense.
je suis en version powershell 5.1 sur mon poste de travail et tous les autres postes sont en version 2...

Powershell en version 2 doit moins bien gérer les remove-item

edit : stackoverflow.com/questions/1752677/how-...-with-powershell-2-0

Message édité par: GeekAlf, à: 29/06/18 13:25

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

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