Удалить определенные папки из C:\Users\%username%\AppData\Local через список имен хостов

У меня есть фрагмент кода, с которым мне помог этот сайт, и я хотел бы изменить его, чтобы он вел себя по-другому, если это возможно?

Запуск файла на локальном ПК напрямую сканирует папки профиля пользователя, пропускает системные профили (во избежание ненужного сканирования) и удаляет 2 указанные папки из каждой локальной папки данных приложения пользователя.

Теперь мне нужно запустить его по сети, где у меня есть список имен хостов, и сделать это таким образом. Приведенное ниже работает непосредственно на ПК.

For /F "Skip=1 Delims=" %%A In (
    '"WMIc Path Win32_UserProfile Where (Special!='True') Get LocalPath"'
    ) Do For /F "Delims= " %%B In ("%%A") Do (
For %%I In (Folder1 Folder_2) Do (If Exist "%%B\AppData\Local\%%I\" (
    RMDIR "%%B\AppData\Local\%%I" /S /Q >nul 2>&1)
    )
)

Я хотел бы изменить его на что-то вроде

for /f "usebackq tokens=*" %%A in ("%~dp0hostnames.txt") do (
    For /F "Skip=1 Delims=" %%A In (
        '"WMIc Path Win32_UserProfile Where (Special!='True') Get LocalPath"'
        ) Do For /F "Delims= " %%B In ("%%A") Do (
    For %%I In (Folder1 Folder_2) Do (If Exist "\\%%B\C$\AppData\Local\%%I\" (
        RMDIR "\\%%B\C$\AppData\Local\%%I" /S /Q >nul 2>&1)
        )
    )

Я пробовал, но это выходит за рамки моих ограниченных знаний, я думаю, мне нужно отложенное расширение, а также двигаться дальше по алфавиту с переменной буквой, но я не знаю, в каком направлении: -

Любая помощь приветствуется .. спасибо


person Tika9o9    schedule 12.10.2017    source источник


Ответы (2)


Это полностью не проверено, но я предполагаю, что вы можете использовать параметр /Node для WMIC:

@Echo Off
For /F "UseBackQ Delims=" %%Z In ("%~dp0hostnames.txt"
) Do For /F "UseBackQ Skip=1 Delims=" %%X In (`WMIC /Node:'%%~Z' Path^
 Win32_UserProfile Where "Special='False'" Get LocalPath`
) Do For /F "Delims=" %%Y In ("%%X") Do Call :Sub "%%~Z" %%Y
Exit/B

:Sub
For /F "Tokens=1* Delims=:\" %%V In ("%~2") Do For %%U In (Folder1 Folder_2
) Do If Exist "\\%~1\%%~V$\%%~W\AppData\Local\%%~U"^
 RD/S/Q "\\%~1\%%~V$\%%~W\AppData\Local\%%~U"
GoTo :EOF
person Compo    schedule 12.10.2017

Вот способ сделать это в PowerShell. Если вы уверены, что правильные каталоги будут удалены, удалите переключатель -WhatIf из команды Remove-Item.

$dirlist = 'dir1', 'dir2'
$userdirs = (Get-CimInstance -ClassName Win32_UserProfile -Filter "Special=$false").LocalPath

foreach ($ud in $userdirs) {
    foreach ($d in $dirlist) {
        if (Test-Path -Path "$ud\$d") {
            Remove-Item -Path "$ud\$d" -Recurse -WhatIf
        }
    }
}

Использование Invoke-Command позволит вам запускать скрипт на всех компьютерах одновременно. Это предполагает, что предыдущий сценарий был сохранен как udscan.ps1.

Invoke-Command -ComputerName 'host1', 'host2' -FilePath .\udscan.ps1
person lit    schedule 13.10.2017