域内网络计算机信息脚本执行遗漏命令输出问题求助
这种脚本输出丢行的情况我之前在处理Windows域管理脚本时碰过好多次,大概率是输出缓冲、执行上下文或者命令调用方式的问题,咱们从这几个方向排查:
检查命令的输出捕获方式
有些系统命令(比如wmic、net系列)在脚本中执行时,会因为输出缓冲机制导致部分内容没被及时打印。你可以试试给丢失输出的命令强制指定输出流,比如如果是wmic命令,改成:wmic /output:stdout computersystem get Name,Domain要是是
net类命令,可以在后面加| findstr /v "^$"过滤空行,同时强制刷新输出。确认if块的执行上下文
会不会是if语句执行后,脚本的工作目录、环境变量或者权限发生了变化?比如if里切换了域用户上下文,导致第三、第四个命令没有足够权限执行(但你说单独执行没问题,不过还是可以试试)。给这两个命令加上绝对路径,比如:C:\Windows\System32\net.exe config workstation确保命令能被正确找到执行。
尝试用
call调用外部命令
如果你的第三、第四个命令是调用其他批处理文件或者外部工具,在cmd脚本里不加call的话,会直接跳转到外部脚本执行,虽然你说最后一个命令正常,但也可以试试给这两个命令前加call,比如:call net view /domain:yourdomain捕获错误输出排查
会不会这两个命令其实有错误,但错误输出没被显示?把命令的错误输出合并到标准输出,看看是不是有权限或参数问题:你的第三个命令 2>&1 你的第四个命令 2>&1临时文件中转输出
把这两个命令的输出写到临时文件再读取,验证是不是脚本捕获输出的问题:第三个命令 > temp_output.txt type temp_output.txt 第四个命令 >> temp_output.txt type temp_output.txt如果这样能看到内容,就说明是脚本直接打印输出的机制有问题,改用文件中转的方式就能解决。
如果能把脚本里这几个命令的具体代码贴出来,能更快定位到问题根源,但按上面的方法应该能解决大部分这类输出丢失的情况。
内容的提问来源于stack exchange,提问作者Kajba

