wmic 在 Cygwin 中挂起

wmic 在 Cygwin 中挂起

如果我在 rxvt 中打开 Cygwin,则运行wmic不会显示预期的wmic:root\cli>提示符。如果我C:\cygwin\bin\bash.exe从执行cmd.exe,则wmic在内部运行bash.exe会返回预期的提示符。为什么?

我已将环境变量CYGWIN设置为ntsec tty。我可以echo "hello"得到响应,其他一切似乎都很顺利。只是当我运行 wmic 和其他一些有提示的 Windows 应用程序时,提示从未出现。

答案1

对于 wmic,请尝试使用echo '' | wmic <query here>,其中<query here>是您想要的查询。

例如,要通过 SSH 获取戴尔机器的服务标签:echo '' | wmic bios get serialnumber

让交互模式工作对我来说似乎毫无意义,但是这应该会向您展示 wmic 的大部分功能。

失败的尝试:

< /dev/null我读到的一个替代解决方案是在末尾使用,而不是echo '' |在前面使用,即:wmic bios get serialnumber < /dev/null。然而,我在这方面运气不佳。(来自缠线

我读到的另一种替代解决方案是尝试设置tty环境CYGWIN变量。这对我来说也没有运气。(来自 Cygwin 邮件列表上的 Larry Hall 帖子,由于垃圾邮件防范而未链接)

答案2

这是 Cygwin pty 与本机控制台应用程序之间的老问题。Rxvt 基于“伪终端设备”(pty),Cygwin 使用 Windows 管道实现该设备。非 Cygwin 应用程序只能看到 Windows 管道,这使得其中一些应用程序认为它们应该在没有提示的情况下进入非交互模式。(更具体地说,isatty() 函数在管道上调用时返回 false。)

答案3

根据您使用的 Cygwin 版本,您可能必须利用 < /dev/null。我相信我使用的是 1.7,在大多数 Windows 版本上我不再必须使用 < /dev/null(例外是 Windows 2003 R2,您仍然必须使用 < /dev/null。)

以下是一个例子:

wmic bios(适用于几乎所有版本的 Windows)wmic bios < /dev/null(根据我的测试,适用于所有版本的 Windows)

希望这可以帮助。

答案4

不需要回显。

在 cygnin 提示符下运行:

Administrator@darwin-test7-wi ~
$ wmic pagefileset where 'name="C:\\pagefile.sys"' delete
Deleting instance \\DARWIN-TEST7-WI\ROOT\CIMV2:Win32_PageFileSetting.Name="C:\\pagefile.sys"

Instance deletion successful.
=============================================

Administrator@darwin-test7-wi ~
$ wmic pagefileset create name="C:\\pagefile.sys"

Instance creation successful.
-----------------------------------------------------

Administrator@darwin-test7-wi ~
$ wmic pagefileset where 'name="C:\\pagefile.sys"' set InitialSize=512,MaximumSize=512

Updating property(s) of '\\DARWIN-TEST7-WI\ROOT\CIMV2:Win32_PageFileSetting.Name="C:\\pagefile.sys"'

Property(s) update successful.
------------------------------------------------------

相关内容