【问题标题】:Using PsExec from batch and catching errors从批处理中使用 PsExec 并捕获错误
【发布时间】:2016-02-06 16:05:02
【问题描述】:

我需要在数百台服务器上运行命令,发现 Sysinternals 的 PsExec 非常有用。但是,当服务器关闭或未安装应用程序时,会出现一个小问题。在这种情况下,错误不会记录到我的输出文件中。

当服务器没有响应时,如何“记录” PsExec 的输出?它应该只是我的输出文件中带有“离线”或“错误”的行。

我的目标是运行一个包含 800 台服务器的列表并获得一个包含 800 行的 results.txt 文件,这样我就可以将内容粘贴到 excel 中并比较值。

我的脚本如下所示:

@echo off
setlocal enabledelayedexpansion

set OUTPUT_FILE=result.txt
>nul copy nul %OUTPUT_FILE%
for /f %%i in (servers.txt) do (
    for /f "tokens=1,2" %%x in ('psexec.exe \\%%i -u MyDomain\MyUsername -p MyPassword dspmqver -f 2') do (
        IF "%ERRORLEVEL%"=="0" (
            echo %%i %%y >>%OUTPUT_FILE%
        ) ELSE (
            echo Error
        )
    )
)

任何帮助将不胜感激。

最好的问候

拉斯穆斯

编辑:

PsExec 在失败情况和工作情况下的输出。

在离线服务器上,它显然失败了 - 输出是:

psexec.exe \\hostname -u MyDomain\MyUsername -p MyUsername dspmqver -f 2

PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com

Couldn't access hostname:
Network path not found (translated from danish)

Make sure that the default admin$ share is enabled on hostname

在脚本工作的在线服务器上 - 输出是。

psexec.exe \\hostname -u MyDomain\MyUsername -p MyUsername dspmqver -f 2


PsExec v2.11 - Execute processes remotely

Copyright (C) 2001-2014 Mark Russinovich

Sysinternals - www.sysinternals.com


Version:     7.5.0.4
dspmqver exited on hostname with error code 0.

【问题讨论】:

  • 在批处理外直接调用 psexec 的输出是什么?包括错误级别
  • 我刚刚对原始帖子进行了编辑以添加输出 - 此处无法使用 cmets 中的代码样式。

标签: windows batch-file remote-server psexec


【解决方案1】:

psexec -n 5 设置 5 秒超时,退出代码为 1460 (ERROR_TIMEOUT)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多