【问题标题】:Batch-file - Fetch remote computer variable批处理文件 - 获取远程计算机变量
【发布时间】:2016-05-17 22:42:10
【问题描述】:

我有一个非常大的预先存在的批处理文件,我需要添加一些逻辑来运行正确的 EXE,具体取决于它是 x86 还是 x64 位机器。我不能使用 PowerShell,因为出于某种原因,它们在大多数机器上都将其伪禁用。

我想要做的是使用 PSEXEC 从远程获取系统变量 PROCESSOR_ARCHITECTURE,然后从输出中创建一个本地系统变量。

如果我从 Win10x64 CMD 提示符运行此命令:

C:\PsTools>c:\pstools\PSEXEC.exe \\TEST-Win7x86 cmd /c echo ^%PROCESSOR_ARCHITECTURE^%

我得到了正确的远程 x86 值,但不能用它做任何事情:

x86
cmd exited on TEST-Win7x86 with error code 0

.

我尝试测试 this method 以将输出转换为变量:

FOR /F "delims=" %i IN ('c:\pstools\PSEXEC.exe \\TEST-Win7x86 cmd /c echo ^%PROCESSOR_ARCHITECTURE^%') DO set proc=%i

我正在取回本地 AMD64 值:

cmd exited on TEST-Win7x86 with error code 0.
C:\PsTools>set proc=AMD64

.

有人发现我做错了吗?

谢谢!

-马特

【问题讨论】:

  • 您是否知道在批处理文件中使用时必须将for 变量的% 符号加倍?另外我认为您需要在for /F 循环中编写^^%%PROCESSOR_ARCHITECTURE^^%%,以便将字符串^%PROCESSOR_ARCHITECTURE^% 逐字传递...
  • 你也可以通过psexec \\remotepc powershell "$env:processor_architecture"来避免百分号的歧义。或者您可以跳过psexec 并使用远程WMI 查询。 for /f %I in ('wmic /node:remotepc os get osarchitecture /value ^| find "="') do set "%I"
  • 我大部分时间都使用 PowerShell 方法,但在这种情况下,这些计算机有一些东西阻止 PowerShell 工作。我没想过使用 WMIC 来获取它。下次我会记住的,谢谢!

标签: batch-file cmd psexec


【解决方案1】:

在搞砸了一天的大部分时间之后,我想我在提交这个问题后不久就弄清楚了。出于某种原因,我不得不把胡萝卜翻倍。我不确定我为什么要尝试它或为什么它有效,但我现在得到了正确的输出。

C:\PsTools>FOR /F %i IN ('c:\pstools\PSEXEC.exe \\TEST-Win7x86 cmd /c echo ^^%PROCESSOR_ARCHITECTURE^^%') DO set proc=%i

输出:

cmd exited on TEST-KW-O3040MD with error code 0.

C:\PsTools>set proc=x86

.

正如 aschipfl 在下面更正的那样,这是批处理脚本中的正确上下文。谢谢 aschipfl!

FOR /F %%i IN ('"\\Server\Shared Folder\PSEXEC.exe" \\TEST-Win7x86 cmd /c echo ^^%%PROCESSOR_ARCHITECTURE^^%%') DO set PROC=%%i

【讨论】:

  • 这只能在您直接在命令提示符(cmd)中执行的情况下起作用;在批处理文件中,您需要将for 变量%i% 符号加倍,正如我已经建议的那样,以及IN ( ... ) 部分中的符号...
  • 嗯,这适用于命令行,但现在它在脚本中被破坏了。运行此命令:. . FOR /F %%i IN ('"\\Server\Shared Folder\PSEXEC.exe" \\%CNAME% cmd /c echo ^%PROCESSOR_ARCHITECTURE^%') DO set PROC=%%i 再次导致本地 AMD64。加倍胡萝卜似乎会杀死它。如果我一开始就知道双胡萝卜是如何正确逃脱的就好了.. :(
  • FOR /F %%i IN ('"\\Server\Shared Folder\PSEXEC.exe" \\TEST-Win7x86 cmd /c echo ^^%%PROCESSOR_ARCHITECTURE^^%%') DO set PROC=%%i 应该可以工作...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
  • 2011-08-21
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多