我需要在CMD窗口中运行一个命令,并希望将结果输入变量。 我使用下面的代码做同样的事情,但输出不正确
var proc = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
Arguments = " wmic.exe /node:(computername or ip address) computersystem get username ",
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
}
};
proc.Start();
string line = "";
while (!proc.StandardOutput.EndOfStream)
{
line += (line.Length > 0 ? "-----" : "") + proc.StandardOutput.ReadLine();
}
proc.WaitForExit();
输出
Microsoft Windows [Version 6.1.7601]-----Copyright (c) 2009 Microsoft Corporation. All rights reserved.----------C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0>
但是当我在CMD窗口中运行此命令时,它会显示当前登录的用户名。
任何人都可以帮我解决问题。
注意: - 给定的命令用于获取当前登录的用户 使用它的IP地址在网络系统上命名。
答案 0 :(得分:3)
您需要的是cmd的/ c选项
C:\>cmd /?
Starts a new instance of the Windows command interpreter
CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
[[/S] [/C | /K] string]
/C Carries out the command specified by string and then terminates
我会在这里质疑cmd.exe的必要性。您可以直接调用wmic,如下所示
var proc = new Process {
StartInfo = new ProcessStartInfo {
FileName = "wmic.exe",
Arguments = "/node:localhost computersystem get username ",
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
}
};
proc.Start();
string line = "";
while (!proc.StandardOutput.EndOfStream) {
line += (line.Length > 0 ? "-----" : "") + proc.StandardOutput.ReadLine();
}
proc.WaitForExit();
答案 1 :(得分:0)
如果System.Management
具有获取进程和托管信息所需的所有类,为什么会遇到调用命令行工具并解析其结果的麻烦?
var ip = "127.0.0.1";
var scope = new ManagementScope(
String.Format("\\\\{0}\\root\\cimv2", ip),
new ConnectionOptions { Impersonation = ImpersonationLevel.Impersonate });
scope.Connect();
var users = new ManagementObjectSearcher(
scope,
new ObjectQuery("Select * from Win32_LoggedonUser"))
.Get()
.GetEnumerator();
while(users.MoveNext())
{
var user = users.Current["antecedent"];
var mo = new ManagementObject(new ManagementPath(user.ToString()));
try
{
var username = mo.Properties["name"];
Console.WriteLine("username {0}", username.Value);
}
catch
{
Console.WriteLine(mo);
}
}
您所要做的就是创建一个ManagementScope,然后使用ManagementObjectSearcher之一运行任何WMI Query Language语句来运行任何WMI Classes语句。
如果您有wmic
个来电,则可以随时添加/TRACE:ON
,以便检查正在进行的通话。使用wmic /?
查看别名。