it-swarm.com.de

Wie kann ich die Systemzeit in Windows 10 IoT einstellen?

Gibt es eine Möglichkeit, die Systemzeit über meine App auf einem Raspberry Pi 2 in der Windows 10 IoT Core Insider Preview einzustellen? 

Dies funktioniert nicht bei fehlender kernel32.dll

    [DllImport("kernel32.dll", EntryPoint = "SetSystemTime", SetLastError = true)]
    extern static bool Win32SetSystemTime(ref SystemTime sysTime);
13
raven-ai

Verbinden Sie sich zunächst mit über PowerShell mit Ihrem Pi 2.

Verwenden Sie den Befehl set-date, um die Uhrzeit einzustellen. Wenn Sie das Datum beispielsweise auf Samstag, 3. Oktober 2015, 14:00 Uhr einstellen möchten, geben Sie set-date 10/3/2015 2:00PM ein.

Der Befehl tzutil legt die Zeitzone fest. Geben Sie tzutil /? für die Verwendung ein

11
kiran

Sie können jede PowerShell-Routine über C # auf UWP/IoT-Core-Systemen aufrufen. Daher sind die PowerShell-Befehle in Ihrer App immer verfügbar.

Ein Beispiel finden Sie im ProcessLauncher-Beispiel auf GitHub .

ALTERNATIVE, planen Sie ein Start-PS-Skript wie folgt:

Führen Sie PowerShell als Administrator auf der Platine aus (Drücken Sie die Windows-Taste, geben Sie die PowerShell ein, klicken Sie mit der rechten Maustaste auf das Symbol und wählen Sie "Als Administrator ausführen" aus.).

Set-ExecutionPolicy RemoteSigned

PuTTY zu RPi als Admin und:

setx PATH "% PATH%; C:\Windows\System32"

schtasks/create/tn "StartupPowerShell"/tr c:\Startup.bat/sc onstart/ru SYSTEM

Startup.bat

powershell -command "C:\IotCoreStartup.ps1"

IotCoreStartup.ps

$logFile = 'C:\StartupLog.txt'

get-date > $logFile

tzutil /s "UTC" >> $logFile

# set alternate time servers
"Setting additional time servers" >> $logFile
w32tm /config /syncfromflags:manual /manualpeerlist:"0.windows.time.com 1.pool.ntp.org" >> $logFile

Löschen einer geplanten Aufgabe, falls erforderlich:

schtasks/Delete/TN "StartupPowerShell"

Ausführen einer geplanten Aufgabe, wenn Folgendes getestet wird:

schtasks/Run/tn "StartupPowerShell"

4
GGleGrand

Scheinbar scheint es bis jetzt keine Möglichkeit zu geben, die Systemzeit tatsächlich zu bearbeiten, aber hier ist eine Problemumgehung, um die korrekte Uhrzeit in Ihrer App zu ermitteln. Ich habe eine TimeManager-Klasse erstellt. Die wichtigsten Bestandteile lauten wie folgt.

Holen Sie sich die korrekte Uhrzeit (z. B. NTP, andere Netzwerkzeit, Benutzereingabe usw.) und geben Sie sie in die UpdateOffset-Methode ein.

Im Rest der App verwenden Sie TimeManager.Now anstelle von DateTime.Now

    static TimeSpan _offset = new TimeSpan(0,0,0);
    public static TimeSpan CurrentOffset //Doesn't have to be public, it is for me because I'm presenting it on the UI for my information
    {
        get { return _offset; }
        private set { _offset = value; }
    }

    public static DateTime Now
    {
        get
        {
            return DateTime.Now - CurrentOffset;
        }
    }

    static void UpdateOffset(DateTime currentCorrectTime) //May need to be public if you're getting the correct time outside of this class
    {
        CurrentOffset = DateTime.UtcNow - currentCorrectTime;
        //Note that I'm getting network time which is in UTC, if you're getting local time use DateTime.Now instead of DateTime.UtcNow. 
    }

Ich empfehle außerdem, Dinge wie das Verfolgen der letzten Aktualisierungszeit und ein Kennzeichen hinzuzufügen, um anzugeben, ob die Zeit jemals aktualisiert wurde. Das Codebeispiel sollte nur unübersichtlich werden.

3
raven-ai

Ich habe die Zeit auf meinem Raspberry Pi mit RTC eingestellt. Windows-iot unterstützt die Initialisierung der Software-Uhr des Raspberry Pi nicht von einer Echtzeituhr aus, nachdem ich mehrere Stunden lang über Optionen nachgedacht hatte Ich habe etwas gefunden, das für mich funktioniert.

Ich habe ein Konsolenprogramm erstellt, mit dem entweder die Systemzeit im Format RTC= oder die Zeit im Format RTC=) gespeichert und als Zeichenfolge gedruckt werden kann Power-Shell-Skript, das dieses Programm zum Zeitpunkt des Systemstarts ausführt, um die Uhrzeit von der Echtzeituhr abzurufen und die Zeichenfolge an den Befehl set-date zu übergeben.

Details sind hier: http://www.codeproject.com/Articles/1113626/Adding-the-Missing-Real-Time-Clock-to-Windows-IoT

3
Joel

1-Neues Universalprojekt
2-Add-Referenz> Erweiterungen> Windows IOT-Erweiterungen für UWP
3- Legen Sie einen Button, einen Datepicker und ein Timepicer-Steuerelement in Ihre MainPage.xaml ein
und

private void buttonSetSystemDatetime_Click(object sender, RoutedEventArgs e)
        {
            DateTimeOffset dto = datePicker1.Date+ timePicker1.Time;
            Windows.System.DateTimeSettings.SetSystemDateTime(dto);
        }

4- in Objekteinstellungen> Legen Sie die Zielversion und die Mindestversion 10.0 fest. bauen Sie 16299 auf
5- Doppelklick auf appxmanifest> Funktionen> ON "System Management" prüfen

6- App in IOT ausführen und Taste drücken. als zur Standard-App zurückkehren. voila! Systemdatetime geändert. 

hinweis: lieber immer einstellen. Ich biete Ihnen ein billiges RTC-Modul (Echtzeituhr) an. (Benötigt zusätzliche Codierung)

2
Kursat Turkay

Verwenden Sie die Renci SSH-Shell, um sich wieder als Administrator am Gerät anzumelden, und stellen Sie dann mit dem Befehl powershell Datum und Uhrzeit ein.

public static int SshCommand(string command, out string dataOut, out string error)
    {

        dataOut = "";
        error = "";

        try
        {

            using (var client = new SshClient("127.0.0.1", USER_NAME, PASSWORD))
            {
                client.Connect();
                //command = "powershell -Command " + "\u0022" + "set-date -date '8/10/2017 8:30:00 AM'" + "\u0022";
                //command = "netsh interface ip show config";
                var cmd = client.RunCommand(command);
                var output = cmd.Result;
                client.Disconnect();
            }

            return 1;
        }
        catch (Exception ex)
        {
            error = ex.Message;
            return 0;
        }

    }


public static int SSHSetDateTime(DateTime dateTime)
    {

        // Variables
        int returnValue = 0;
        string command;
        string error;
        string dataOut;

        // Build date
        command = String.Format("powershell -Command \u0022set-date -date '{0:M/d/yyyy H:mm:ss tt}'\u0022", dateTime);

        //Build date
        if (SystemEx.SshCommand(command, out dataOut, out error) == 1)
        {
            // Ok
            returnValue = 1;
        }

        // Return
        return returnValue;

    }
2
Nathan Price

weitere Informationen hierzu finden Sie in Microsoft API Reference Docs. Im Namespace Windows.System können Sie das Systemdatum und die Uhrzeit mit der Methode SetSystemDateTime einstellen.

aber Sie müssen wissen, dass es in verfügbar ist 

  • Windows IoT Extension SDK (eingeführt v10.0.16225.0)} und höher

sie können die statische Klasse DateTimeSettings verwenden 

public static class DateTimeSettings

rufen Sie dann die statische SetSystemDateTime-Methode auf, und senden Sie Ihr Objekt vom Typ DateTimeOffset, um Datum und Uhrzeit unter Windows Iot festzulegen.

public static void SetSystemDateTime(DateTimeOffset utcDateTime)

https://docs.Microsoft.com/en-us/uwp/api/windows.system.datetimesettings

1
Parsa Karami

Mir ist klar, dass Sie fragen, wie Sie dies programmgesteuert tun. Die folgenden Informationen sollten jedoch genügend Informationen enthalten, um ein PS-Skript zu erstellen, das beim Start ausgeführt wird. 

Remote Access Raspberry Pi über Powershell

1.) Führen Sie das Windows 10 IoT Core Watcher-Dienstprogramm (C:\Programme (x86)\Microsoft IoT\WindowsIoTCoreWatcher.exe) auf Ihrem Entwicklungs-PC aus, und kopieren Sie Ihre Raspberry Pi-IP-Adresse, indem Sie mit der rechten Maustaste auf das erkannte Gerät klicken und Kopieren wählen IP Adresse.

◦Klicken Sie auf die Windows-Schaltfläche "Start"

◦Geben Sie "WindowsIoTCoreWatcher" ein, um es in den Suchergebnissen anzuzeigen

◦ Möglicherweise möchten Sie mit der rechten Maustaste auf den Programmnamen klicken und "An Start anheften" auswählen, um ihn für einen einfachen Zugriff an Ihren Startbildschirm zu heften

◦Drücken Sie die Eingabetaste, um es auszuführen

◦Ihr Gerät sollte innerhalb von etwa 5 Sekunden in der Liste erscheinen. Wenn dies nicht der Fall ist, schließen Sie den Windows 10 IoT Core Watcher und starten Sie ihn erneut

 Windows IoT Core Watcher

2.) Starten Sie eine Administrator-PowerShell-Konsole auf Ihrem lokalen PC. Der einfachste Weg, dies zu tun, besteht darin, "Powershell" in das Textfeld "Web und Windows durchsuchen" neben dem Windows-Startmenü einzugeben. Windows findet PowerShell auf Ihrem Computer. Klicken Sie mit der rechten Maustaste auf den Windows PowerShell-Eintrag, und wählen Sie Als Administrator ausführen aus. Die PS-Konsole wird angezeigt.

 Running Powershell as Administrator

3.) Sie müssen möglicherweise den WinRM-Dienst auf Ihrem Desktop starten, um Remoteverbindungen zu ermöglichen. Geben Sie an der PS-Konsole den folgenden Befehl ein:

 net start WinRM 

4.) Geben Sie an der PS-Konsole den folgenden Befehl ein, indem Sie '' durch den in prev kopierten IP-Wert ersetzen:

 Set-Item WSMan:\localhost\Client\TrustedHosts -Value <machine-name or IP Address>

5. Geben Sie J ein und drücken Sie die Eingabetaste, um die Änderung zu bestätigen.

6. Jetzt können Sie eine Sitzung mit Ihrem Windows IoT Core-Gerät starten. Geben Sie an Ihrer Administrator-PS-Konsole Folgendes ein:

Enter-PSSession -ComputerName <IP Address> -Credential localhost\Administrator

7.Geben Sie im Anmeldedialogfeld das folgende Standardkennwort ein: 

p @ ssw0rd

Hinweis: Der Verbindungsvorgang erfolgt nicht sofort und kann bis zu 30 Sekunden dauern.

Wenn Sie sich erfolgreich mit dem Gerät verbunden haben, sollten Sie vor der Aufforderung die IP-Adresse Ihres Geräts sehen.

 Connected to the Raspberry using PS

Umbenennen des Geräts und Einstellen von Datum und Uhrzeit

1.Um den Computernamen zu ändern, verwenden Sie das Dienstprogramm setcomputername. Geben Sie in PowerShell den folgenden Befehl ein.

setcomputername 

2.Das Datum und die Uhrzeit auf dem Pi müssen korrekt sein, damit die Sicherheitstoken, die für die spätere Veröffentlichung in Azure verwendet werden, gültig sind. Um die aktuelle Zeitzoneneinstellung auf dem Pi zu überprüfen, geben Sie Folgendes ein:

zutat/g

3.Wenn die gemeldete Zeitzone nicht korrekt ist, können Sie mithilfe von eine Liste der gültigen Zeitzonen finden (möglicherweise müssen Sie die Puffergröße in Ihrem Powershell-Fenster erhöhen):

tzutil/l

4.Um die Zeitzone einzustellen, suchen Sie die ID der gewünschten Zeitzone aus dem obigen Schritt und verwenden Sie dann:

tzutil/s "Ihr TimeZone-Name"

Zum Beispiel für "Pacific Standard Time"

tzutil/s "Pacific Standard Time"

5.Um das Datum auf dem Raspberry Pi zu überprüfen, geben Sie ein

Verabredung bekommen

6.Wenn Datum oder Uhrzeit falsch sind, verwenden Sie das Set-Date-Dienstprogramm

Set-Date "mm/tt/jj hh: mm: ss AM/PM"

Beispiel: Wenn es am 3. Januar 2016 um 12:15 Uhr war:

Set-Date "01.03.16 12:15 PM"

7.Starten Sie das Gerät neu, damit die Änderung wirksam wird. Sie können den Befehl shutdown wie folgt verwenden:

herunterfahren/r/t 0

1
Paul DeCarlo