Die Unterstützung für den ordnungsgemäßen Betrieb von Computern und Software normaler Benutzer ist eine Routine der Mitarbeiter und / oder Administratoren des technischen Supports. Wenn das Unternehmen klein ist und sich jeder in einem oder zwei Räumen befindet, ist es normalerweise einfach, das Problem selbst zu lösen oder zu überprüfen, was Sie benötigen.
Aber was ist, wenn das Unternehmen groß ist und sich der Benutzer auf einer anderen Site / in einer anderen Stadt / einem anderen Land befindet?

Eines der klassischen Tools für solche Arbeiten ist eine Remoteverbindung (unter Verwendung von RDP, Software wie TeamViewer / Skype mit einer Desktop-Demo usw.). Es ist jedoch nicht ohne grundlegende Mängel:
- In jedem Fall wird der Endbenutzer von seiner Arbeit abgelenkt (in einigen Fällen, ohne seinen Desktop zu sehen).
- Diese Tools funktionieren nicht immer, wenn auf dem Remotecomputer Fehler auftreten
- Die Installation von Software von Drittanbietern (einschließlich proprietärer Software im Fall von TeamViewer) wird von den Unternehmensrichtlinien bei weitem nicht immer begrüßt
- Die Methode ist praktisch nicht automatisiert
Schließlich wird dieser Ansatz verwendet, wenn der Vorfall bereits aufgetreten ist (es ist schwer vorstellbar, dass der Administrator von Zeit zu Zeit „präventiv“ eine Verbindung zu jedem Benutzer herstellt). Aus diesem Grund ist der Mechanismus der Steuerung (Überwachung) von Remotecomputern wichtig.
Eine mögliche Lösung besteht darin, den Remotezugriff auf die Windows-Registrierung zu verwenden. Es speichert Daten in Form einer hierarchischen Datenbank, mit der Sie sie schnell empfangen und kompakt speichern können. Sie verwenden die Registrierung, um ihre eigenen Einstellungen und Parameter sowohl für Betriebssystem- und eingebettete Dienste als auch für die meisten Programme von Drittanbietern zu speichern. Daher beeinflusst der Inhalt der Registrierung in vielerlei Hinsicht den Betrieb des Systems.
Auf dieser Grundlage kann die Registrierung durchaus als „Indikator“ für die Überwachung verwendet werden (Sie können einen Fehler erkennen, wenn er mit falschen Parametern in der Registrierung verknüpft ist, oder eine problematische Situation simulieren).
Eine weitere Möglichkeit, die diese Lösung bietet, ist die Möglichkeit der administrativen Kontrolle der Benutzer (z. B. können Sie durch Remote-Lesen die Fakten zur Installation unerwünschter Programme und zur Änderung der Einstellungen einsehen). Vergessen Sie nicht den Einfluss des "menschlichen Faktors" auf das System. In der Praxis war dies im Rahmen des SkypeTime- Projekts hilfreich, in dem die Korrektur von Einstellungen in Skype for Business verfolgt werden musste.

Die Registrierung enthält jedoch Tausende von Einträgen, und es ist äußerst schwierig, alle zu kontrollieren. Daher ist es zunächst erforderlich, das Kontrollobjekt einzuschränken - zu bestimmen, welche Parameter für uns von Interesse sind, und herauszufinden, in welchen bestimmten Registrierungszweigen sich die entsprechenden Werte befinden. Letzteres ist in der Regel nicht schwer in der Dokumentation / im Internet zu finden oder anhand der Namen der Schlüssel unabhängig zu bestimmen.
Nachdem Sie sich für das Thema Steuerung entschieden haben, können Sie mit der direkten Konfiguration des Fernzugriffs fortfahren. Dazu müssen Sie den Remote Procedure Call-Dienst auf Remotecomputern aktivieren und die Firewall nach Bedarf konfigurieren. Dies erfolgt bequem mithilfe von Gruppenrichtlinien. Unter Berücksichtigung der Sicherheitsanforderungen erfordert der Zugriff die Rechte eines Domänenadministrators oder eines lokalen Administrators auf jedem Gerät.
Konfigurieren Sie den RemotezugriffUm den Dienst selbst zu aktivieren, legen Sie im Abschnitt Computerkonfiguration> Einstellungen> Systemsteuerungseinstellungen> Dienste die Parameter für den RpcSs-Dienst wie in einem Screenshot fest

Es müssen noch die entsprechenden Firewall-Ausnahmen hinzugefügt werden. Erstellen Sie in derselben Richtlinie unter Computerkonfiguration> Richtlinien> Windows-Einstellungen> Sicherheitseinstellungen> Windows-Firewall mit erweiterter Sicherheit> Eingehende Regeln eine neue Regel:
Regeltyp - Benutzerdefiniert

Geben Sie den Pfad des Programms an -% SystemRoot% \ system32 \ svchost.exe
Stellen Sie in den zusätzlichen Einstellungen im Abschnitt Dienste die Option Auf Dienst anwenden mit dem folgenden Kurznamen ein - Winmgmt

Auf den folgenden Seiten geben wir TCP ohne Angabe bestimmter Ports und für alle Adressen an


und erlauben Sie die Verbindung (Verbindung zulassen ) für das Domänenprofil


Die manuelle Steuerung der Registrierung von Dutzenden und Hunderten von Computern „manuell“ (auch mit wenigen Einträgen) ist jedoch eine undankbare und sinnlose Aufgabe. Glücklicherweise ist dieser Prozess mithilfe von Skripten recht einfach zu automatisieren. Mit dem folgenden PowerShell-Skript können Sie beispielsweise herausfinden, welcher Benutzer die Parameter AwayThreshold und IdleThreshold (Zeit, um in den Status "Out of Place" und "Inactive" zu wechseln) für Skype for Business geändert hat.
SkriptcodeParam ( [alias("c")] [string]$FromFileComputers, [alias("r")] [string]$OutputRPCErrorsFile, [alias("u")] [string]$FromFileUsers, [alias("o")] [string]$OutputFile="output.csv", [alias("a")] [int]$MinAway, [alias("i")] [int]$MinIdle ) $RPCErrorsArray = @() $result = @() $HKU = 2147483651 $RegistryForCheckArray = "SOFTWARE\Microsoft\Office\13.0\Lync","SOFTWARE\Microsoft\Office\14.0\Lync","SOFTWARE\Microsoft\Office\15.0\Lync","SOFTWARE\Microsoft\Office\16.0\Lync","SOFTWARE\Microsoft\Communicator" $CurrentComputerNumber = 0; if(![string]::IsNullOrEmpty($FromFileUsers)) { $Users = Get-Content $FromFileUsers; } if(![string]::IsNullOrEmpty($FromFileComputers)) { $Comps = Get-Content $FromFileComputers; } else { $date = (get-date).AddMonths(-1) $Comps = Get-ADComputer -filter { lastlogontimestamp -ge $date } | select name | ForEach-Object {$_.name} #$Comps = "NB_CY" } $ServersCount = ($Comps).Count; Foreach ($Comp in $Comps) { $CurrentComputerNumber++ try { Write-Host "Checking: $Comp [$CurrentComputerNumber/$ServersCount]"; $profiles = Get-WmiObject Win32_UserProfile -filter "Loaded=$true and special=$false" -ComputerName $Comp -ErrorAction Stop $reg = [wmiclass]"\\$Comp\root\default:stdregprov" Foreach ($profile in $profiles) { $username = Split-Path $profile.LocalPath -Leaf if(![string]::IsNullOrEmpty($FromFileUsers)) { if(!$Users.Contains($username)) { continue; } } Foreach( $registry in $RegistryForCheckArray) { $hkey = "$($profile.sid)\$registry" #Write-Host "KEY: $hkey" $away = $reg.GetDWORDValue($hku,$hkey,"AwayThreshold").uValue $idle = $reg.GetDWORDValue($hku,$hkey,"IdleThreshold").uValue $sip = $reg.GetStringValue($hku,$hkey,"ServerSipUri").sValue if([string]::IsNullOrEmpty($away) -and [string]::IsNullOrEmpty($idle)) { continue; } if(($MinAway -gt 0 -and $away -lt $MinAway) -or ($MinIdle -gt 0 -and $idle -lt $MinIdle)) { continue; } $result += New-Object PsObject -Property @{ "PC" = $Comp "Username" = $username "SIP" = $sip "SFB_Away" = $away "SFB_Idle" = $idle } } } } catch { if ($_.Exception.GetType().Name -eq "COMException") { $RPCErrorsArray += $Comp; } Write-Host "Error: ($_.Exception.GetType().Name)"; $_.Exception } } $result | Export-csv -Path $OutputFile $result | Format-Table -Property PC,Username,SIP,SFB_Away,SFB_Idle -AutoSize Write-Host "Saved to: $OutputFile" if(![string]::IsNullOrEmpty($OutputRPCErrorsFile)) { $RPCErrorsArray | out-file $OutputRPCErrorsFile Write-Host "RPC errors saved to: $OutputRPCErrorsFile" }
Zur Vereinfachung kann das Skript mit den folgenden Parametern ausgeführt werden:
-c Pfad zur Datei mit einer Liste der zu überprüfenden Hostnamen-Computer, falls nicht angegeben - Computer mit einer Aktivität von 30 Tagen von AD abrufen.
-r Pfad zu der Datei, in die der Hostname von Computern mit einem RPC-Fehler geschrieben wird.
-u Pfad zur Datei mit einer Liste von Benutzern (Login), falls nicht angegeben, überprüft alle.
-o Pfad zu der Datei, in der das Ergebnis des Skripts ausgeführt wird. Standardmäßig ist output.csv.
- Ein Mindestwert für den Parameter AwayThreshold. Datensätze mit einem Wert unter dem angegebenen Wert erhalten nicht das Ergebnis der Skriptausführung.
-i der Mindestwert für den Parameter IdleThreshold, Datensätze mit einem Wert, der kleiner als der angegebene Wert ist, erhalten nicht das Ergebnis des Skripts.
Darüber hinaus kann das Skript durch Hinzufügen zum Windows-Taskplaner (Taskplaner) oder über die Funktion "Geplante Jobs" in PowerShell automatisiert werden.