Question Remove-Item conditionnel

Plus d'informations
il y a 16 ans 5 mois #5477 par DESSARD
Remove-Item conditionnel a été créé par DESSARD
Bonjour à tous,

Décidément, en ce qui me concerne, il faudrait peut-être prévoir un ouvrage du type \"PowerShell pour les nuls \" :P Car me voilà de nouveau contraint de faire appel à vos lumières.
Pour rappel, dans mon précédent message, il s'agissait de créer un répertoire au nom de l'utilisateur - les scripts sont exécutés en mode serveur. Tout fonctionne à merveille grâce à vos infos. Tout sauf la dernière étape...:(
Après le traitement des fichiers par les différents utilisateurs, les fichiers finaux sont rapatriés vers un répertoire commun d'où ils sont exportés par une procédure batch (j'ai voulu conserver le batch, plus facile à compléter par la suite par ceux qui me succéderont à cette tâche). En fin du batch, je voulais faire appel à un ps1 dont voici la traduction en français :cheer:
retrouve sur le path défini les fichiers de type *.x et détruis ceux dont le user qui exécute la tâche est propriétaire

Pour ce faire, je pensais pouvoir utiliser les commandes suivantes :

$User=(Get-WmiObject -Class Win32_ComputerSystem -ComputerName . -property Username).Username
Get-ChildItem \"path\*.x\"
ForEach-Object
{
$Owner=($_.Get-Acl | Select-Object Owner)
Remove-Item ($_) where ($Owner -eq $User)
}

Et voilà... j'ai du faire une erreur de traduction.
Et ça ne marche pas :(

Merci d'avance pour votre aide.

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

Plus d'informations
il y a 16 ans 5 mois #5482 par Laurent Dardenne
Salut,
ROLAND DESSARD écrit:

il faudrait peut-être prévoir un ouvrage du type \"PowerShell pour les nuls \"

En Anglais .
ROLAND DESSARD écrit:

Et voilà... j'ai du faire une erreur de traduction.

C'est plus un problème de compréhenson du pipeline, il me semble. Tu codes en séquentiel, c'est possible, mais PowerShell est orienté pipeline, et ce n'est pas du SQL ;-)

\"retrouve sur le path défini les fichiers de type *.x et détruis ceux dont le user qui exécute la tâche est propriétaire\"
Dans ce là on doit associer chaque étape à un cmdlet ou à un bloc de code si aucun cmdlet ne répond au besoin.
Ton découpage de l'expression en instructions PowerShell est correcte mais pas leurs ordonnancement.
[code:1]
#Retrouve le compte utilisé pour la session courante
$User=(Get-WmiObject -Class Win32_ComputerSystem -ComputerName . -property Username).Username
#retrouve sur le path défini les fichiers de type *.x
Get-ChildItem \"path\*.x\"|
#filtre ceux dont le user est propriétaire
Get-Acl |
Where {$_.Owner -eq $user}|
# et détruis les
Remove-Item -whatif
[/code:1]
ici il faut vérifier la doc pour s'assurer que l'objet renvoyé par Get-Acl peut être traité par Remove-Item.
C'est le cas car il contient une propriété Path géré par Remove-Item :
[code:1] help remove-item -parameter path[/code:1]

-path <string[]>
Spécifie le chemin d'accès aux éléments supprimés. Les caractères génériques sont autorisés. Le nom de paramètre (\"-Path \") est facultatif.

Requis ? true
Position ? 1
Valeur par défaut N/A - Le chemin d'accès doit être spécifié
Accepter l'entrée de pipeline ? true (ByValue, ByPropertyName)
Accepter les caractères génériques ? true

Si on reformule ta phrase, pour coller au code :
\"retrouve sur le path défini les fichiers de type *.x, filtrer ceux dont propriétaire est le user courant(loggé), puis les détruire.\"

Tutoriels PowerShell

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

Plus d'informations
il y a 16 ans 5 mois #5489 par DESSARD
Réponse de DESSARD sur le sujet Re:Remove-Item conditionnel
Génial !
C'est vrai que mon orientation SQL pour les bases Oracle (en autodidacte) ne facilite pas la conversion en \"pensée powershell\" :P
L'ordonnancement est correct et ça fonctionne :laugh:
Encore merci.

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

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