我在类似问题上阅读了几个主题,但到目前为止还无法找到具体的解决方案。我需要在许多计算机上执行批处理文件来修复损坏的管理代理。由于代理已损坏,我无法使用管理系统解决问题,而且我有一个使用WMIC
的经过测试的解决方案。
我有一个包含计算机名称列表的文本文件,是否可以从文本文件中提取计算机名称并在下面的批处理文件中使用?
@echo off
set compname=%computername%
IF EXIST "\\%compname%\C$\Install\" GOTO CopyFile
mkdir "\\%compname%\C$\Install\"
:CopyFile
copy "\\shareserver\sharefolder\AgentRepair.cmd" "\\%compname%\C$\Install\"
wmic /NODE:%compname% /USER:domain\username /PASSWORD:password process call create "c:\Install\AgentRepair.cmd"
exit
答案 0 :(得分:0)
@echo off
for /f "delims=" %%a in (filename) do (
mkdir "\\%%a\C$\Install\" 2>nul >nul
copy "\\shareserver\sharefolder\AgentRepair.cmd" "\\%%a\C$\Install\"
wmic /NODE:%%a /USER:domain\username /PASSWORD:password process call create "c:\Install\AgentRepair.cmd"
)
pause
exit
应该有效 - 在 filename
中的一行中有一个名称 %%a
只是从文件中依次接收每一行。请注意,2>nul
将命令生成的错误消息重定向到无处 - 如果目录已存在,mkdir / md
命令将生成错误消息。
错误修复:每个%%a
必须是相同的情况。我用wmic
发布了%%A
命令(在膝盖上平衡键盘)。这应该可以解决问题。将@echo off
更改为@echo on
将产生逐个命令的操作跟踪。
答案 1 :(得分:0)
另一种方法是让PowerShell执行调用工作。
=== AgentRepair.ps1
$InstDir = 'C:\Install'
if (-not Test-Path -Path $InstDir) { mkdir $InstDir }
Copy-Item '\\shareserver\sharefolder\AgentRepair.cmd' $InstDir
& $InstDir\AgentRepair.cmd
===运行它
Invoke-Command -ComputerName (Get-Content .\computernames.txt) -FilePath .\AgentRepair.ps1
===或者,从cmd.exe shell
powershell -NoProfile -Command ^
Invoke-Command -ComputerName (Get-Content .\computernames.txt) -FilePath .\AgentRepair.ps1