Удалить пользовательские файлы - PullRequest
0 голосов
/ 27 февраля 2020

Я создал скрипт для удаления файлов пользователей по назначенному пути.

Я бы хотел объединить переменные, чтобы не делать его слишком длинным.

$folder = "C:\Users\$env:USERNAME\*"
$folder2 = "C:\Users\$env:USERNAME\Desktop\*"
$folder3 = "C:\Users\$env:USERNAME\Documents\*"
$folder4 = "C:\Users\$env:USERNAME\Contacts\*"
$folder5 = "C:\Users\$env:USERNAME\Downloads\*"
$folder6 = "C:\Users\$env:USERNAME\Favorites\*"
$folder7 = "C:\Users\$env:USERNAME\links\*"
$folder8 = "C:\Users\$env:USERNAME\Music\*"
$folder9 = "C:\Users\$env:USERNAME\OneDrive\*"
$folder10 = "C:\Users\$env:USERNAME\Pictures\*"
$folder11 = "C:\Users\$env:USERNAME\Searches\*"
$folder12 = "C:\Users\$env:USERNAME\Videos\*"


If (Test-Path $folder) {
    Remove-Item $folder -Exclude AppData,Contacts,Desktop,Documents,Downloads,Favorites,Links,Music,OneDrive,Pictures,Searches,Videos -Force -ErrorAction SilentlyContinue
    Remove-Item $folder2 -Recurse -Force -ErrorAction SilentlyContinue
    Remove-Item $folder3 -Recurse -Force -ErrorAction SilentlyContinue
    Remove-Item $folder4 -Recurse -Force -ErrorAction SilentlyContinue
    Remove-Item $folder5 -Recurse -Force -ErrorAction SilentlyContinue
    Remove-Item $folder6 -Recurse -Force -ErrorAction SilentlyContinue
    Remove-Item $folder7 -Recurse -Force -ErrorAction SilentlyContinue
    Remove-Item $folder8 -Recurse -Force -ErrorAction SilentlyContinue
    Remove-Item $folder9 -Recurse -Force -ErrorAction SilentlyContinue
    Remove-Item $folder10 -Recurse -Force -ErrorAction SilentlyContinue
    Remove-Item $folder11 -Recurse -Force -ErrorAction SilentlyContinue
    Remove-Item $folder12 -Recurse -Force -ErrorAction SilentlyContinue
}

Я пробовал следующий способ, и он не работает:

$folder = "C:\Users\$env:USERNAME\*"
$folder2 = "C:\Users\$env:USERNAME\Desktop\*"
$folder3 = "C:\Users\$env:USERNAME\Documents\*"
$folder4 = "C:\Users\$env:USERNAME\Contacts\*"
$folder5 = "C:\Users\$env:USERNAME\Downloads\*"
$folder6 = "C:\Users\$env:USERNAME\Favorites\*"
$folder7 = "C:\Users\$env:USERNAME\links\*"
$folder8 = "C:\Users\$env:USERNAME\Music\*"
$folder9 = "C:\Users\$env:USERNAME\OneDrive\*"
$folder10 = "C:\Users\$env:USERNAME\Pictures\*"
$folder11 = "C:\Users\$env:USERNAME\Searches\*"
$folder12 = "C:\Users\$env:USERNAME\Videos\*"


If (Test-Path $folder) {
    Remove-Item $folder -Exclude AppData,Contacts,Desktop,Documents,Downloads,Favorites,Links,Music,OneDrive,Pictures,Searches,Videos -Force -ErrorAction SilentlyContinue
    Remove-Item $folder2 + $folder3 + $folder4 + $folder5 + $folder6 + $folder7 + $folder8 + $folder9 + $folder10 + $folder11 + $folder12 -Recurse -Force -ErrorAction SilentlyContinue
}

Я также хотел бы получить журнал того, что было сделано, например, если файлы или папки были найдены в пути.

Большое спасибо.

1 Ответ

1 голос
/ 27 февраля 2020

Параметр -Path Remove-Item принимает массив строк в качестве входных данных, если вы хотите удалить более одного элемента одновременно.

Теперь с помощью синтаксиса $folder2 + $folder3 вы создаете объединенную строку как: "C:\Users\foo\Desktop\*C:\Users\foo\Desktop\*"". Это ничто, с чем Remove-Item может справиться.

Вы можете построить строковый массив путей следующим образом:

$folder = "C:\Users\$env:USERNAME"
$foldersToRemove = @(
    "C:\Users\$env:USERNAME\Desktop",
    "C:\Users\$env:USERNAME\Documents",
    "C:\Users\$env:USERNAME\Contacts",
    "C:\Users\$env:USERNAME\Downloads",
    "C:\Users\$env:USERNAME\Favorites",
    "C:\Users\$env:USERNAME\links",
    "C:\Users\$env:USERNAME\Music",
    "C:\Users\$env:USERNAME\OneDrive",
    "C:\Users\$env:USERNAME\Pictures",
    "C:\Users\$env:USERNAME\Searches",
    "C:\Users\$env:USERNAME\Videos")

    If (Test-Path $folder) {
        Remove-Item $folder -Exclude AppData, Contacts, Desktop, Documents, Downloads, Favorites, Links, Music, OneDrive, Pictures, Searches, Videos -Force -ErrorAction SilentlyContinue
        Remove-Item $foldersToRemove -Recurse -Force -ErrorAction SilentlyContinue
    }

О вашем втором требовании:

Параметр -Verbose составит Remove-Item сказать, какие папки удалены. Если вам нужен ваш журнал в файле, вы можете перенаправить подробный поток следующим образом:

Remove-Item $foldersToRemove -Recurse -Force -ErrorAction SilentlyContinue -Verbose 4> .\deletedFolders.log
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...