我需要清除网络上多台服务器上的同一个目录。我该怎么做?

我需要清除网络上多台服务器上的同一个目录。我该怎么做?

在多台(约 20 台)服务器上,存在同一个目录 C:\Deployments。此目录有多个子文件夹,其中包含更多子文件夹和文件。C:\Deployments 目录本身不包含文件。

我有一个批处理文件,在本地运行时,它会清除 C:\Deployments 目录。也就是说,它会删除所有子文件夹及其文件,但不会删除 C:\Deployements 目录本身。

批处理文件代码为:

echo off

set CAT=c:\deployments

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

我的问题是:

如何从本地窗口在每台服务器上运行此批处理文件?也就是说,如何运行一个批处理文件并让这些命令同时在每台服务器上执行?

谢谢您的帮助/想法!

答案1

我不再有 Windows 机器了,但以前在工作中会做这些事情。psexec 可以让你远程连接到另一台服务器。你也可以研究 powershell 远程处理。

Powershell Remoting 请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ee706585(v=vs.85).aspx

使用 Dos / Batch,参见http://ss64.com/nt/psexec.html

如果您希望它们同时运行,您可以通过在 powershell 中运行作业来做到这一点,请参阅相同的 ss64 站点。

如果你感兴趣...

如果你的服务器在活动目录中列出,你可以使用活动目录循环遍历计算机

dsquery computer -limit 0 | ?{$_ -imatch "CN=([^,]+),"} | % {
  #remotely run your script here through ps remote
}

或者用包含文件列表的 gc $your_file_name 替换 dsquery...。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... 替换为类型“%您的文件名%”

此外,如果您在批处理循环中设置变量时遇到问题,而这些变量不能像您预期的那样持久化,请将 setlocal enabledelayedexpansion 放在程序顶部,然后像这样评估变量!变量名称!而不是 %var_name%

答案2

我建议使用 WinRM/WinRS(Windows 远程管理/Windows 远程 Shell)组合,它需要事先进行一些设置,但使用 Windows 中已内置的工具。

完成设置后,您的脚本将需要更改以包含用于连接的 winrs 命令。您可以在另一个文本文件中创建服务器列表,并在当前脚本周围再包装一个 FOR 循环,以避免 20 行代码都执行相同的操作。

答案3

坦白说,kikuchiyo 的回答很棒,我也投了赞成票。但为了完整性,我建议您可以映射到每台服务器并通过远程共享删除文件。

我假设这里有一个域管理员,或者至少是一个在每台机器上都有管理员权限的帐户。

但基本上我会做这样的事情(保留你的代码来完成工作,而不是我个人所做的,但这并不意味着我是对的)

servers.txt 只是服务器主机名/IP 地址的列表

对于(servers.txt)中的/f %%a,执行:处理%%a

:过程

设置服务器=%1

如果 [%服务器%]==[] 转到 EOF

NET USE T:\%SERVER%\C$\Deployments

设置CAT = T:

目录 "%%CAT%%"/s/b/a | sort /r >> %TEMP%\files2del.txt

对于/f“delims=;”%%D 在(%TEMP%\files2del.txt)中执行(del/q“%%D”&rd“%%D”)

del /q %TEMP%\files2del.txt

:EOF

相关内容