Question
Remove-Item conditionnel
- DESSARD
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 7
- Remerciements reçus 0
Décidément, en ce qui me concerne, il faudrait peut-être prévoir un ouvrage du type \"PowerShell pour les nuls \"
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
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
ROLAND DESSARD écrit:
En Anglais .il faudrait peut-être prévoir un ouvrage du type \"PowerShell pour les nuls \"
ROLAND DESSARD écrit:
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 SQLEt voilà... j'ai du faire une erreur de traduction.
\"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]
Si on reformule ta phrase, pour coller au code :-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
\"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.
- DESSARD
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 7
- Remerciements reçus 0
C'est vrai que mon orientation SQL pour les bases Oracle (en autodidacte) ne facilite pas la conversion en \"pensée powershell\"
L'ordonnancement est correct et ça fonctionne
Encore merci.
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Remove-Item conditionnel