У меня больше нет Windows-машины, но раньше я делал это на работе. Существует psexec, который позволяет удаленно подключаться к другому серверу. Вы также можете изучить удаленное взаимодействие с PowerShell.
Удаленное взаимодействие с Powershell см. http://msdn.microsoft.com/en-us/library/windows/desktop/ee706585 (v = vs.85) .aspx
Использование Dos / Batch см. http: // ss64.com/nt/psexec.html
Если вы хотите, чтобы они работали одновременно, вы можете сделать это, запустив задания в PowerShell, см. тот же сайт ss64.
Если вам интересно ...
Если ваши серверы перечислены в активном каталоге, вы можете проделать небольшой трюк, сказав прокрутите компьютеры с помощью Active Directory
dsquery computer -limit 0 | ?{$_ -imatch "CN=([^,]+),"} | % {
#remotely run your script here through ps remote
}
или замените dsquery ... на gc $ your_file_name, содержащий список файлов. Dos / Batch - мой синтаксис может быть отключен, но это хороший способ перебрать компьютеры
for /f "eol=, tokens=1, delims=" %cc in ('dsquery computer -name -limit 0 ^| find /i /r /c:'"CN=([^,]+),"') do (
@REM cannot recall how i used to get back references in dos like this, so may be off.
@REM call your script here, passing your batch program to psexec
set computer=%%c
echo computer=!computer!
)
или заменить dsquery ... на тип "% your file name%"
Кроме того, если вы когда-нибудь столкнетесь с проблемой установка переменных в цикле в пакетном режиме, где они не сохраняются, как вы ожидали, поместите setlocal enabledelayedexpansion в начало программы и оцените свои переменные следующим образом ! var_name! вместо% var_name%
Я хотел бы предложить комбинацию WinRM / WinRS (удаленное управление Windows / удаленная оболочка Windows), которая требует предварительной настройки, но использует инструменты, уже встроенные в Windows.
После завершения настройки ваш сценарий необходимо будет изменить, включив в него команду winrs для подключения. Вы можете создать список серверов в другом текстовом файле и обернуть еще один цикл FOR вокруг вашего текущего скрипта, чтобы избежать 20 строк, которые все делают одно и то же.
Frankly kikuchiyo's answer is awesome and I have voted as much. However for completeness sake I will suggest that you could map to each server and delete the files via a remote share.
I am assuming a domain administrator here, or at least an account that has admin on each of the machines.
But basically I would do womething like this (keeping your code to do the work, not how I woud have perosnally done it but that doesn't mean I'm right)
servers.txt is just a list of the server hostname/IP address
for /f %%a in (servers.txt) do :process %%a
:process
set SERVER=%1
IF [%SERVER%]==[] GOTO EOF
NET USE T: \%SERVER%\C$\Deployments
set CAT=T:
dir "%%CAT%%"/s/b/a | sort /r >> %TEMP%\files2del.txt
for /f "delims=;" %%D in (%TEMP%\files2del.txt) do (del /q "%%D" & rd "%%D")
del /q %TEMP%\files2del.txt
:EOF