我正在尝试使用 PSTools 安装一个应用程序和一组服务,但我想考虑到我尝试连接的计算机可能已关闭或位于不同的网络上,无法从内部网络。
基本上,如果无法通过管理共享访问计算机,这就是我收到的消息:
Couldn't access MachineName:
The network path was not found.
Make sure that the default admin$ share is enabled on MachineName.
这是我用来 try catch “错误消息”,然后报告安装是否成功(取决于它是否可以联系机器)的语法
@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
目前,它卡在定义错误变量的位置。不太明白我这里出了什么问题。
最佳答案
'命令^| FIND "无法访问"'
打开一个命令 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
是否是字符串的一部分,因为直接比较不起作用,因为您必须检查包括计算机名称在内的整个字符串
关于variables - 将 CMD 结果传递给批处理文件中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12693503/