我正在尝试使用PSTools安装应用程序和一组服务,但我想考虑到我尝试连接的计算机可能已关闭或在另一个网络上,但无法从内部网络。
基本上如果无法通过管理员共享访问该计算机,这就是我收到的消息:
无法访问 MachineName :
找不到网络路径 确保在 MachineName 上启用了默认的admin $共享。
这是我用来尝试捕获“错误消息”的语法,然后报告如果安装成功与否(取决于它是否可以联系机器)
@echo off
set /p name=What is the machine name?:
psexec.exe \\%name% -u *useraccount* -p *password* \\ServerName\installation.bat
FOR /F "tokens=*" %%A IN ('COMMAND ^| FIND "Couldn't access"') DO SET Error=%%A
If "%Error%"=="Couldn't access"
ECHO Installation Failed.
Else
ECHO Installtion complete.
Pause
exit
目前,它正在定义错误变量。无法弄清楚我在这里出了什么问题。
答案 0 :(得分:1)
'COMMAND ^| FIND "Couldn't access"'
打开一个命令shell,这就是它挂起的原因。在退出shell之前不会继续。
您需要查看将错误消息重定向到另一个文件。 psexec行上的2>Errors.txt
将为您提供一个要在下一行搜索的文件。
这将使批处理文件看起来像这样:
@echo off
set /p name=What is the machine name?:
psexec.exe \\\%name% ... \\\ServerName\installation.bat 1>Error.txt 2>&1
for /f "tokens=*" %%A in ('FIND /i error.txt "Couldn't Access"') do SET Error=%%A
If not x%ERROR:Couldn=%==x%ERROR% (
ECHO Installation Failed.
) Else (
ECHO Installtion complete.
)
Pause
exit
(另外,请注意使用括号制作多线IF)
检查if是否会看到Couldn
是否是字符串的一部分,因为直接比较将不起作用,因为您必须检查整个字符串,包括机器名称