2009-05-06 6 views
1

Ich versuche, einen "AT" -Auftrag einzurichten, um einige Registrierungsschlüssel auf einem Remotecomputer zu exportieren. Das Problem besteht darin, dass der DOS-Befehl eine gewisse Zeit benötigt, um ausgeführt zu werden. Ich möchte die Systemzeit des Remotecomputers abrufen, damit ich sie 1 Minute nach dem Senden des Befehls ausführen kann.VB.net 2005 erhalten Systemzeit eines Remote-Computers?

Gibt es eine Möglichkeit, die Systemzeit eines Remote-Computers mit VB.Net-Code zu erhalten?

+0

verwende ich, um ein Codebeispiel hinzugefügt meine Antwort. Es ist C#, sollte aber einfach in VB –

Antwort

0

können Sie verwenden:

net time \\computer_name 

Sie müssen nur diese berappen und das Ergebnis zu analysieren.


Hier ist ein Beispielcode. Es ist in C#, sollte aber ziemlich einfach zu übersetzen sein.

static DateTime GetRemoteDateTime(string machineName) 
    { 
     machineName = @"\\" + machineName; 
     System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo("net", "time " + machineName); 
     startInfo.RedirectStandardOutput = true; 
     startInfo.UseShellExecute = false; 
     System.Diagnostics.Process p = System.Diagnostics.Process.Start(startInfo); 
     p.WaitForExit(); 

     string output = p.StandardOutput.ReadLine(); 
     output = output.Replace("Current time at " + machineName + " is ", ""); 
     return DateTime.Parse(output); 
    } 

ich nicht die Mühe, einen Fehler Hinzufügen Handling (wenn die Maschine nicht gefunden, etc.) - Sie können in hinzufügen, was Sie benötigen, um Ihre Zwecke.

+0

konvertiert werden. Danke! Können Sie mir ein Beispiel dafür geben, wie Sie das Ergebnis analysieren können, nicht sicher, wie das geht. –

+0

Bearbeitet, um Beispielcode –

+0

zu erhalten, und Fehler mit StandardOutput.Readline zu erhalten StandardOut wurde nicht umgeleitet oder der Prozess hat noch nicht gestartet. eine Idee, was das bedeutet? wird meinen Code veröffentlichen, wenn Sie ihn sehen müssen. Nochmals vielen Dank für Ihre Hilfe! –

1

hier ist, was ich habe ein wenig Kontrolle zu arbeiten, vielen Dank für Ihre Hilfe Jon B.

Dim p As New System.Diagnostics.Process 
    Dim pinfo As New System.Diagnostics.ProcessStartInfo 
    Dim pout As String 
    pinfo.FileName = ("C:\WINDOWS\system32\net.exe") 
    pinfo.Arguments = ("time \\computername") 
    pinfo.RedirectStandardOutput = True 
    pinfo.UseShellExecute = False 
    pinfo.CreateNoWindow = True 
    p = Diagnostics.Process.Start(pinfo) 
    p.WaitForExit() 
    pout = p.StandardOutput.ReadLine 
    MsgBox(pout) 
0

..und maby tun, wenn Sie

... 
    startInfo.RedirectStandardOutput = true; 
    startInfo.RedirectStandardError = true; 
    ... 

    string shellOut = ""; 
    if (p.ExitCode == 0) 
    { 
     shellOut = p.StandardOutput.ReadToEnd(); 
     Console.WriteLine("Operation completed successfully."); 
    } 
    else 
    { 
     shellOut = p.StandardError.ReadToEnd(); 
     Console.WriteLine(shellOut); 
    }