2

我正在尝试使用 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

目前它挂在它定义错误变量的地方。无法完全弄清楚我在这里出了什么问题。

4

1 回答 1

1

'COMMAND ^| FIND "Couldn't access"'打开一个命令外壳,这就是它挂起的原因。在退出该 shell 之前它不会继续。

您将需要查看将错误消息重定向到另一个文件。2>Errors.txt在 psexec 行上会给你一个文件在下一行搜索。

这将使批处理文件看起来像这样:

@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是字符串的一部分,因为直接比较将不起作用,因为您必须检查包括机器名称在内的整个字符串

于 2012-10-02T16:23:33.633 回答