Je suis nouveau dans PowerShell et j'ai essayé de créer un script, mais jusqu'à présent, je n'ai pas réussi. Je veux qu'il fasse une tâche spécifique qui est;
Je dois pouvoir rechercher dans un lecteur un dossier spécifique appelé "Cookies"
et le supprimer. Le problème est que les cookies du dossier sont définis à plusieurs endroits.
Exemple:
$cookies= Get-ChildItem \\myserver\test\User\Profiles\*\AppData\Roaming\Microsoft\Windows\Cookies foreach ($cookie in $cookies){ Remove-Item "$cookies" -Force -Recurse -ErrorAction SilentlyContinue }
et continuez ...
Comment puis-je obtenir PowerShell pour parcourir tous ces différents dossiers USER pour rechercher le dossier Cookies et le supprimer.
J'ai trouvé ceci, mais j'espérais qu'un gourou PowerShell pourrait m'aider.
\\\myserver\test\User\Profiles\USER1\AppData\Roaming\Microsoft\Windows\Cookies \\\myserver\test\User\Profiles\USER2\AppData\Roaming\Microsoft\Windows\Cookies \\\myserver\test\User\Profiles\USER3\AppData\Roaming\Microsoft\Windows\Cookies \\\myserver\test\User\Profiles\USER4\AppData\Roaming\Microsoft\Windows\Cookies
Est-ce que cela fonctionnera?
3 Réponses :
Essayez cette doublure -
$path = "\\myserver\test\User\Profiles\" Get-ChildItem $path -Recurse -Directory | Where-Object {$_.Name -eq 'Cookies'} | % {Remove-Item $_.FullName}
Laisse moi essayer, je te tiendrai au courant
Salut Vivek, j'ai un peu changé le code parce que nous voulons qu'un code supprime les fichiers de cookies qui sont des fichiers .txt et ils doivent être plus anciens que 60 jours. `get-item -path D: \ User \ Profiles * \ AppData \ Roaming \ Microsoft \ Windows \ Cookies * -filter" * .txt "-force | Where-Object {$ _. LastWriteTime -lt (get-date) .addDays (-60)} `Mais maintenant j'obtiens une erreur de mémoire.
Vous y êtes presque. Pas besoin de guillemets autour de $ cookies
.
Si vous faites un foreach ($ cookie in $ cookies)
, alors opérez sur $ cookie code > dans le bloc de script, pas
$cookies
.
Cela fonctionne:
Get-ChildItem \\myserver\test\User\Profiles\*\AppData\Roaming\Microsoft\Windows\Cookies | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
mais cela fonctionnera aussi, sans une boucle:
$cookies = Get-ChildItem \\myserver\test\User\Profiles\*\AppData\Roaming\Microsoft\Windows\Cookies Remove-Item $cookies -Force -Recurse -ErrorAction SilentlyContinue
Si vous voulez un one-liner et aucune variable:
$cookies = Get-ChildItem \\myserver\test\User\Profiles\*\AppData\Roaming\Microsoft\Windows\Cookies foreach ($cookie in $cookies){ Remove-Item $cookie -Force -Recurse -ErrorAction SilentlyContinue }
@Roy Travailler avec le pipeline (dernier exemple) est toujours préférable, lorsque cela est possible.
@Hoi Gert Jan, Merci pour cela, mais notre administrateur de sécurité souhaite une petite modification du code. Ce qui consiste à supprimer les fichiers .txt du dossier de cookies qui sont plus anciens que 60 jours, mais j'obtiens une erreur de mémoire. get-item -path D: \ User \ Profiles \ * \ AppData \ Roaming \ Microsoft \ Windows \ Cookies \ * -filter "* .txt" -force | Where-Object {$ _. LastWriteTime -lt (get-date) .addDays (-60)}
@Roy Votre code me semble correct. Y a-t-il beaucoup de fichiers cookies à collecter?
Bien fait, mais vous devriez utiliser Remove-Item $ cookie.FullName
, car le paramètre implicite -Path
(idem pour -LiteralPath
) lie son argument sous forme de chaîne , et dans Windows PowerShell Get-ChildItem
situationnellement se transforme en simple nom de fichier , ce qui entraîne le la commande échoue ou, pire, supprime le mauvais élément. Cela ne se produira pas avec cet appel Get-ChildItem
particulier, mais toujours en utilisant .FullName
lors du passage de Get-ChildItem
/ Get- L'élément
comme argument est une bonne habitude à prendre (l'entrée du pipeline n'est pas affectée). Voir stackoverflow.com/a/53400031/45375 pour en savoir plus.
Oui, j'ai environ 700 utilisateurs et chacun d'entre eux a environ 4000 cookies ou plus ...
@Roy Ensuite, assurez-vous de ne pas stocker tous ces objets dans une variable, mais utilisez une procédure pipelined appropriée, comme celle ci-dessus.
Ceci est une version un peu simplifiée. Juste pour des raisons de sécurité, je l'exécuterais d'abord avec -WhatIf
pour vérifier si le résultat est correct. Ensuite, commentez simplement l'autre ligne
$path = "" $pattern = "" Get-ChildItem $path -recurse -directory -include $pattern | Remove-Item -WhatIf #Remove-Item -Force -ErrorAction SilentlyContinue
Salut Bakudan, c'est pour la réponse rapide. J'ai dû modifier un peu le code car l'un de nos administrateurs de sécurité souhaite qu'il supprime les fichiers .txt du dossier cookies qui datent de plus de 60 jours. Mais maintenant, j'obtiens une erreur de mémoire. get-item -path D: \ User \ Profiles \ * \ AppData \ Roaming \ Microsoft \ Windows \ Cookies \ * -filter "* .txt" -force | Where-Object {$ _. LastWriteTime -lt (get-date) .addDays (-60)}
@Roy Je n'ai pas vu une telle erreur, donc je ne peux pas vous aider avec ça. Pour l'autre chose, à propos des cookies datant de plus de 60 jours - il sera préférable de mettre à jour votre question.