【问题标题】:Return Value from client, read in server [duplicate]来自客户端的返回值,在服务器中读取 [重复]
【发布时间】:2021-07-28 17:08:30
【问题描述】:

我正在尝试从远程系统获取主机名、日期和时间,但在执行服务器端批处理文件时没有得到想要的结果

参考: 远程端批处理文件

@echo off
hostname.exe > __t.tmp
set /p host=<__t.tmp
del __t.tmp
set hst=%host%
set dt=%Date%
Set tm = %Time%
set RETURNVALUE= %host%, %Date%, %Time% 
ENDLOCAL&SET %~1=%RETURNVALUE%

如果我回显“ReturnValue”,这一切都很好

和服务器端批处理文件(iplist.txt是包含远程机器IP的文件)

@echo off
for /f "tokens=*" %%a in ('type iplist.txt') do (
set line=%%a
echo %line%
wmic /node:%line% process call create "cmd.exe D:\\Scripts\\RCMD_TS.bat RtVal"
echo %RtVal%
)
set %%a=
set %a=
set line=
set rt=

这将返回以下内容:

D:\Scripts>ServerSideExecuteRemoteCommand.bat
ECHO is off.
call - Alias not found.
ECHO is off.
ECHO is off.
call - Alias not found.
ECHO is off.
ECHO is off.
call - Alias not found.
ECHO is off.
ECHO is off.
call - Alias not found.
ECHO is off.

我在这里做错了什么?我也可以得到 3 个值(单独的主机名、日期和时间)而不是 1 个(返回值)我试过但它没有发生。

【问题讨论】:

  • 为什么要使用for 循环来解析计算机名称文本文件的每一行,然后将它们传递给WMIC.exe?只需将wmic /node:%line% 更改为wmic /node:@iplist.txt,WMIC.exe 将直接使用该文件中列出的每一台计算机!另外,您确定每台计算机都可以访问批处理文件D:\Scripts\RCMD_TS.bat
  • 嗯.. 没想到... 不错。将检查并恢复。谢谢。是的,客户端 PC 可以访问批处理文件,因为它仅驻留在客户端。服务器端只是调用它。
  • 我更改了批处理文件。 iplist.txt 有 2 个 ip:127.0.0.1 和 192.168.212.21。结果是这样的: Node - 127.0.0.1 Executing (Win32_Process)->Create() 方法执行成功。输出参数:__PARAMETERS { ProcessId = 11076 的实例;返回值 = 0; };节点 - 192.168.212.21 错误:描述 = RPC 服务器不可用。批处理文件更改为:del /F D:\Scripts\HDT.txt wmic /node:@iplist.txt process call create "cmd.exe D:\\Scripts\\RCMD_TS.bat RtVal" echo %RtVal%>>D :\Scripts\HDT.txt set RtVal= HDT.txt 仅显示“Echo is Off”
  • 在您的服务器端批处理文件中,变量lineRtVal 在同一个代码块中分配和读取,即for 循环,它需要delayed expansion。而循环后的set %%a=set %a=是没用的,因为你无法清除for元变量,这些不是你可以设置的正常环境变量;但无论如何,在脚本顶部使用 setlocal 并在底部使用 endlocal 可确保最终消除环境更改……

标签: windows batch-file cmd return-value remote-access


【解决方案1】:

这似乎很容易使用 PowerShell 完成。这不是一个完整的解决方案,但这些可能会有所帮助。当然,需要将网络配置为支持 PowerShell 远程处理。

$HostName = [Net.DNS]::GetHostByAddress('10.24.12.35').HostName
Invoke-Command -ComputerName $HostName -ScriptBlock {Get-Date}

【讨论】:

  • 正在尝试使用 Dos 脚本而不是 Powershell。但肯定也会尝试这些。谢谢。
  • 不提取主机名!
猜你喜欢
  • 1970-01-01
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
  • 2020-08-27
  • 2023-03-14
  • 2015-03-17
相关资源
最近更新 更多