Weisheiten - der Netz-Weise Blog

Hier finden Sie Tipps und Tricks für vor, während und nach der Schulung.

Zwei XML-Dateien mit Powershell vergleichen und einen HTML-Report erzeugen

Das XML-Format ist allgegenwärtig. Als Windows-Administrator stolpert man regelmäßig über Eventlogs im XML-Format, Anweisungsdateien für die unbeaufsichtigte Installation, Vorlagen für Gruppenrichtlinien usw. Und manchmal wäre es ganz schön, wenn man sich den Unterschied zwischen zwei ähnlichen XML-Dateien einfach anzeigen lassen könnte. Mit Powershell und ein bißchen .net ist das in der Tag auch gar kein Problem, denn Microsoft hat vor fast 15 Jahren eine .Net-Bibliothek zur Verfügung gestellt, die genau das tut - das XML Diff & Patch GUI Tool. Das Tool stellt eine Klasse zur Verfügung, über die es möglich ist, zwei XML-Dateien zu vergleichen und die Unterschiede in der XML DIfference Language (Diffgram) auszugeben. Mit einer weiteren Klasse kann man aus einer Diffgram-Datei und einer der beiden Vergleichsdateien eine HTML-Datei erzeugen, die die Unterschiede grafisch darstellt.

Wenn Sie die heruntergeladene Bibliothek entpacken, finden Sie im zwei .dlls, die Sie laden müssen, die XmlDiffPath.dll, die die Compare()-Methode zur Verfügung stellt, und die XmlDiffPath.View.dll, die die Methode GetHtml() bereitstellt. GetHtml erstellt aus einer Diffgram-Datei eine HTML-Datei. Laden Sie die Klassen und erstellen Sie zwei neue Objekte.

Add-Type -Path "xmldiffpatch.dll"
$XmlDiff = New-Object -TypeName Microsoft.XmlDiffPatch.XmlDiff
Add-Type -Path "XmlDiffPatch.View.dll"
$XmlDiffView = New-Object -TypeName Microsoft.XmlDiffPatch.XmlDiffView

Anschließend können Sie die Methode Compare() aufrufen. Compare hat eine Reihe von Überladungen (verschiedene Parameter-Kombinationen). Zum Erstellen eines Diffgramwriters benötigen Sie die beiden zu vergleichenden XML-Dateien, $false und einen .Net-Streamwriter zum Schreiben der Diffgram-Datei:

$DiffGramWriter = [System.Xml.XmlWriter]::Create( 'C:\temp\Diffgram.xml' )
#call Compare method from Microsoft.XmlDiffPatch.XmlDiff object
$XmlDiff.Compare('C:\temp\File1.xml','C:\Temp\File2.xml',$false,$DiffGramWriter)
$DiffGramWriter.Close()

Markiert in:
Weiterlesen
0 Kommentare

USB-Geräte mit Powershell und WMI auslesen

Am USB angeschlossene Geräte kann man per WMI auslesen. WMI stellt dafür die WMI Association Klasse Win32_USBControllerDevice zur Verfügung, die zwei Klassen miteinander verbindet - in diesem Fall die Daten des USB-Controllers und die installierten Treiber. Die verknüpften Treiber kann man aus der Eigenschaft Dependent auslesen.

Get-WmiObject Win32_USBControllerDevice | Foreach-Object { [Wmi]$_.Dependent }

[WMI] Wandelt den String, der in der Eigenschaft $_.Dependent hinerlegt ist, wieder eine WMI-Klasse um. Um einen überschaubaren Überblick über die installierten Geräte zu bekommen, wählt man am Besten erst einmal die Eigenschaften Descritption und DeviceID aus.

Get-WmiObject Win32_USBControllerDevice | ForEach-Object { [wmi]$_.dependent } | select-Object description,deviceid

Das Ergebnis sieht dann ungefähr so aus:

Weiterlesen
0 Kommentare

Den Windows Lizenzkey aus der Firmware aka Bios auslesen und aktivieren per Powershell

Letzte Woche habe ich durch Zufall festgestellt, dass der Rechner einer Kollegin, der schon vor Jahren per automatischem Update auf Windows 10 aktualisiert worden ist, immer noch nicht aktiviert war, obwohl das vorher installierte Windows 8.1 es war und Windows 10 sich außerdem den Key automatisch aus der Firmware ziehen soll, wenn er da hinterlegt ist. Glücklicherweise ist die Aktivierung von Windows 10 immer noch mit den Keys voriger Versionen möglich. Der Key selbst ist im BIOS nicht einsehbar, läßt sich aber über WMI einfach auslesen. Er ist in der Klasse SoftwareLicensingService in der Eigenschaft OA3xOriginalProductKey hinterlegt. Mit Powershell nutzen Sie für das Auslesen einfach Get-WMIObject oder Get-CIMClass:

(Get-WmiObject -Class SoftwareLicensingService).OA3xOriginalProductKey

oder ab Powershell 4 auch

(Get-CimInstance -ClassName SoftwareLicensingService ).OA3xOriginalProductKey

Mit dem Tool slmgr.vbs können Sie die LIzenz auch gleich installieren und aktivieren:

Weiterlesen
0 Kommentare

Kalenderdaten aus Outlook in Excel übertragen und Tage zählen

Letztes Wochenende wollte ich wissen, wie viele Tage ich im letzten Jahr geschult habe. Da alle Schulungstermine in einem Outlook-Kalender gepflegt sind, liegt es Nahe, die Termine von Outlook nach Excel zu übertragen und dann per Excel auszuwerten. Das geht tatsächlich, ist aber nicht unbedingt intuitiv.

Zuerst müssen Sie Ihren Kalender öffnen und Outlook im Menü Ansicht über den Eintrag "Ansicht ändern" in die Listenansicht umstellen. Anschließend können Sie die Ansicht über das Suchfenster filtern und die Termine, die Sie in Excel übertragen wollen, markieren und kopieren. Im Suchfenster können Sie mehrere mit Leerzeichen getrennte Wörter als einen zusammengehörigen Suchbegriff angeben, indem Sie ihn in Anführungszeichen setzen. Soll Outlook also nicht alle Termine mit Trainer oder alle Termine mit Holger im Titel finden, sondern alle des Trainers Holger, geben Sie an: "Trainer: Holger". Der Text muss dann genau so in der Terminbeschreibung eingegeben sein.

In Excel sollten sie Daten korrekt als Tabelle eingefügt werden. Sie verfügen jetzt mehrere Spalten wie Betreff, Ort, Beginn, Ende usw.

Erstellen Sie jetzt in einer neuen Spalte eine Funktion, die das Start- und Enddatum, die als Text übertragen wurden, in einen Datumswert umwndelt. Dazu benötigen Sie die Funktion Datum(), die Text in ein Datum umwandlet. Datum() hätte das Datum aber gerne im Format (Jahre;Monat;Tag), während Beginn und Ende in der Tabelle im Format "Mo 04.09.2017 09:00" vorliegen. Wir müssen aus dem Text also den Tag, den Monat und das Jahr extrahieren. Das geht mit der Funktion Teil(), die 3 Übergabewerte benötigt - Den Text oder die Zelle, die bearbeitet werden soll, das Startzeichen und die Menge der Zeichen, die augeschnitten werden sollen.Um das Jahr aus dem angegebenen Datumsformat auszuschneiden, brauchen wir die Spalte C, als Startwert 10 und 4 Zeichen:

Teil(C2,10,4)

Markiert in:
Weiterlesen
0 Kommentare

Für Powershell Cmdlet-Parameter Standardwerte definieren

Das Feature ist nicht neu, aber trotzdem noch mal eine Erinnerung wert. Wenn Sie in einem Skript für einen Parameter immer wieder das gleiche Argument verwenden, können Sie es auch als Standard-Wert hinterlegen. Konkret könnte das z.B. der Domänencontroller sein, der die Einzelbetriebsmasterrolle PDC-Emulator inne hat. Powershell stellt Ihnen dafür die Systemvariable $PSDefaultParameterValues zur Verfügung. Sie wird mit einem Hash-Array befüllt, das für jedes Cmdlet als Schlüsselwert den Cmdlet-Namen und, mit einem ":" getrennt, den Parameternamen enthält, sowie als Wert das Standard-Argument.

$Pdc = Get-ADDomainController -Service PrimaryDC -Discover
$ServerDefaults = @{ "Get-ADUser:Server"=$pdc.HostName
   "Get-ADComputer:Server"=$Pdc.HostName
   "Get-ADObject:Server"=$Pdc.Hostname
 }
$PSDefaultParameterValues = $ServerDefaults
$PSDefaultParameterValues
Get-ADUser -Filter *

Markiert in:
0 Kommentare

Eine Zahlenreihe in zwei alternierende (wechselnde) Gruppen aufteilen mit Powershell

Stellen Sie sich vor, Sie haben eine aufsteigende Reihe natürlicher (ganzer) Zahlen. Sie wollen die Zahlenreihe in 2 Blöcke aufteilen, die nach einer bestimmten Menge von Zahlen jeweils wechselt. Dazu ein Beispiel:

Gruppe 1Gruppe 2
1-500501-1000
1001-1500 1501-2000
2001-25002501-3000

 

 

 

 

Markiert in:
Weiterlesen
0 Kommentare

Ein niedrig priveligiertes Konto zum Entsperren von Domänenbenutzern anlegen und damit Benutzer-Sperren retten

Das Sperren von Benutzerkonten ist ein bewährtes Mittel, um Brute-Force-Attacken gegen Kennwörter im Unternehmen zu verhindern. Allerdings empfehlen sowohl Microsoft als auch das BSI inzwischen, Kontosperrungen nicht zu verwenden, da eine Malware oder ein Hacker durch das Sperren sämtlicher Benutzerkonten ein Netzwerk komplett lahm lagen kann - man spricht auch von einem denial of Service.

Die alternative Empfehlung lautet, lange Kennwörter in Form von Passphrases und am Besten Multifaktor-Authentifizierung einzusetzen. Grundsätzlich ist das ein vernünftiger Ansatz, aber leider scheitert er in vielen Netzwerken immer noch an der Praxis. Zum einen muß man den Benutzern erklären, dass Sie jetzt lange komplexe Kennwort-Sätze verwenden sollen, zum Anderen muß man mit dieser Variante auch für eine ordentliche Anmeldungs-Überwachung sorgen, da ein großangelegter Angriff auf die Benutzerkennwörter sonst gar nicht auffällt. Mit aktivierter Kennwortsperrung merkt man normalerweise sehr schnell, dass etwas nicht stimmt.

Mein pragmatischer alternativer Ansatz, um die Kontosperrungen weiterhin nutzen zu können, arbeitet mit automatisierten Prozessen und Powershell. Denn mit Powershell ist es sehr schnell und einfach möglich, Benutzerkonten zu entsperren. Verwenden Sie dafür die Cmdlets Search-ADAccount und Unlock-ADAccount. Search-ADAccount kann mit dem Parameter -Lockedout alle gesperrten Benutzerkonten in einem Rutsch auflisten, Unlock-ADAccount kann sie  direkt entsperren. Mit Hilfe des Cmdlets Out-Gridview können Sie sich auch gleich noch eine grafische Benutzeroberfläche einrichten, um nur ausgewählte Benutzer zu entsperren.

Search-ADAccount -Lockedout | Out-Gridview -Passthru | Unlock-ADAccount

Damit wird das Entsperren nach einem Denial of Service zu einem Kinderspiel. Allerdings muß noch ein zweites Problem gelöst werden. Wenn Sie nämlich das Standard-Administratorkonto auf der Domäne deaktivieren, haben Sie eventuell gar keine Möglichkeit mehr, die Domäne zu entsperren, weil Ihr Administrator auch gesperrt ist. Deswegen legen Sie sich nun ein niedrig privilegiertes Konto an, dass neben dem Entsperren von Benutzern in der Domäne nichts kann, aber nicht gesperrt wird.

Weiterlesen
0 Kommentare

Computerkennwörter, der Secure Channel und die Fehlermeldung „Die Vertrauensstellung zwischen dieser Arbeitsstation und der primären Domäne konnte nicht hergestellt werden”

Wenn ein Domänen-Computer gestartet wird, sucht er im Netzwerk zuerst nach einem Domänen-Controller, indem der den DNS-Server nach den LDAP-Service-Records seiner Domäne fragt. Anschließend versucht er, mit dem Domänencontroller einen Secure Channel, also eine verschlüsselte, sichere Datenverbindung aufzubauen. Dies geschieht über einen RPC Netlogon. RPC ist ein Challenge-Response-Protokoll, bei dem der Client und der Server sich gegenseitig einen zufälligen 64 Bit-Zufallswert, den Client- bzw. Server Challenge, zuschicken, aus denen mit Hilfe des Computerkennworts (wegen gegenseitige Authentifizierung sowohl auf dem Client als auch auf dem Server) ein Session-Key berechnet wird. Das funktioniert, weil sowohl der Client als auch der Domänencontroller über das Computerkennwort des Clients verfügen. Wenn der Domänencontroller und der Client nicht das gleiche Kennwort gespeichert haben, schlägt die Erstellung des Secure Channels allerdings fehl und dem Client wird die Verbindung zum Domänencontroller verweigert. Stattdessen wird eine Fehlermeldung angezeigt, die vermutlich jeder Administrator schon einmal gesehen hat: „The trust relationship between this workstation and the primary domain failed” bzw. "Die Vertrauensstellung zwischen dieser Arbeitsstation und der primären Domäne konnte nicht hergestellt werden".

Wie und wo wird das Computerkennwort verwaltet

Der Client generiert beim Aufnehmen in die Domäne ein komplexes Kennwort, dass er ab Windows 2000 alle 30 Tage automatisch ändert. Da Computerkonten sind von den Kennwortrichtlinien der Domäne ausgenommen sind, können Sie auch nicht gesperrt werden, wenn sie länger offline sind.
Die Kennwortänderung führt der Client zuerst zuerst lokal aus. Danach ändert er sein Kennwort im AD. Schlägt die Aktualisierung im AD fehl, setzt er wieder das alte Kennwort. Das aktuelle Kennwort und sein Vorgänger werden im geschützten Kennwortschlüssel HKLM\SECURITY\Policy\Secrets\$machine.ACC gespeichert. Im AD sind die Kennwörter in den Attributen unicodepwd und lmpwdHistory abgelegt.
Ob und wie oft der Client sein Kennwort ändert, kann in der Systemregistrierung unter HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters konfiguriert werden. Für die Konfiguration sind drei Schlüssel verantwortlich:

MaximumPasswordAge: Der Eintrag MaximumPasswordAge legt fest, nach welchem Zeitraum der Netlogon-Dienst versucht, das Kennwort zu ändern. Der Standardwert ist 30 (Tage).

ScavengeInterval: Das Scavengeinterval legt fest, wie häufig der Computer prüfen soll, ob das maximale Kennwortalter erreicht ist. Der Standardwert beträgt 900 (Sekunden), also 15 Minuten. Der Eintrag ist nicht in der Registry hinterlegt, kann hier aber geändert werden. Der Typ des Eintrags ist REG_DWORD.

DisablePasswordChange: Sie können die Kennwortänderung des Computers mit diesem Schlüssel auch komplett deaktivieren, indem Sie den Wert auf 1 setzen.

Weiterlesen
0 Kommentare

Windows Apps von Windows entfernen - vor und nach der Installation

Windows 10 kennt zwei verschiedene Anwendungstypen - die klassischen Anwendungen und Apps. Apps gibt es seit Windows 8, und sie sind vom App-Konzept von Apple und Google übernommen. Apps unterscheiden sich in einigen grundlegenden Dingen von Anwendungen:

  • Apps lassen sich von jedem Benutzer bereitstellen - es werden keine administrativen Berechtigungen benötigt
  • Eine App wird normalerweise für einen Benutzer bereitgestellt, nicht für den Computer
  • Das App-Berechtigungskonzept bietet mehr Sicherheit, da jeder App der Zugriff auf jedes Gerät explizit gesperrt werden kann.
  • Apps haben keinen Installer, sondern werden aus dem Microsoft Store oder per Sideloading installiert

 

Zumindest der letzte Punkt könnte sich ändern, denn Microsoft hat ein neues Format für die automatische Installation entwickelt, nämlich msix. Trotzdem möchte nicht jeder Administrator Apps in seiner Umgebung bereitstellen. Um die bereits mit Windows mitgelieferten Apps loszuwerden, muß man allerdings einige konzeptuelle Dinge verstehen:

Grundsätzlich werden Apps pro Benutzer installiert. Man spricht von Appx-Paketen. Um Appx-Pakete zu verwalten, können Sie Powershell-Cmdlets verwenden:

  • Get-AppxPackage listet installierte Apps auf
  • Remove-Appxpackage entfernt installierte Apps
  • Get-AppxLog zeigt das Installations- und Wartungslog für Apps an.

 

Weiterlesen
0 Kommentare

Onedrive for Business mit Gruppenrichtlinien steuern

Mehr zum Thema Gruppenrichtlinien finden Sie auch in meinem Buch Gruppenrichtlinien in Windows 10 und Windows Server 2019, das voraussichtlich im Oktober in der Neuauflage erscheint.

Onedrive for Business ist in Office 365 enthalten und wird ein immer spannenderes Werkzeug für die Verwaltung von Benutzerdaten. Mit der aktuellen Version ist es z.B. möglich, die Ordner Bilder, Dokumente und Desktop automatisch in den Onedrive-Ordner zu verschieben. Dadurch können die Benutzerdaten nicht nur geräteübergreifend synchronisiert werden - was ich mit mehreren Rechnern - PC in der Firma, PC zu Hause und Latpop mache und sehr schätze - sondern durch die Versionierung der Sharepoint-Bibliotheken hat man auch gleich ein integriertes Backup, mit dem es möglich ist, alte Daten wiederherzustellen. Darauf weist inzwischen auch der Windows Defender hin, denn durch die Versionierung können Verschlüsselungstrojaner zwar ein Dokument verschlüsseln, aber der Schaden kann einfach durch rückspielen einer alten Version wieder behoben werden.

Die Onedrive-Features können auch durch Gruppenrichtlinien automatisch aktiviert werden, allerdings sind die Onedrive-ADMX Dateien nicht Bestandteil des Office 2016 ADMX-Vorlagen, die man bei Microsoft herunterladen kann. Stattdessen werden die Vorlagen beim Installieren des neuen Onedrive Sync Clients (Onedrive.exe) lokal im Benutzerprofil abgelegt. Achten Sie also darauf, dass Sie, wenn Sie einen neuen Onedrive-Client bereitstellen, immer auch die Vorlagen aktualisieren. Die Dateien liegen unter %LocalAppData%\Onedrive\<Version>\adm. Um es den Administratoren nicht zu leicht zu machen, sind die Dateien allerdings nicht so abgelegt, dass man sie direkt kopieren kann. Stattdessen liegt die englische .adml-Datei direkt im Ordner .adm, die fremdsprachigen .adml-Dateien liegen in teilweise nicht korrekt benannten Ordnern. Bevor Sie die Dateien also in Ihren Policy-Store kopieren, erstellen Sie zuerst einen Ordner en-us im adm-Ordner und kopieren die Onedrive.adml-Datei hinein, und außerdem benennen Sie den Ordner \de um in \de-de. Danach können Sie die Onedrive.admx inklusive der zwei Unterordner \de-de und \en-us in den PolicyStore-Ordner kopieren.


Mehr zu den Einstellungen finden Sie im folgenden Artikel Onedrive for Business Ordner umleiten, manuell und mit Gruppenrichtlinien.

0 Kommentare

Gruppenrichtlinien mit WMI-Filtern auf Windows 10 Feature Releases (Builds) filtern

Mehr zum Thema Gruppenrichtlinien finden Sie auch in meinem Buch Gruppenrichtlinien in Windows 10 und Windows Server 2019, das voraussichtlich im Oktober in der Neuauflage erscheint.

Jedes Windows 10 Feature-Release bringt neue Funktionen und neue Gruppenrichtlinien mit. Welche Richtlinien in welcher Version neu dazugekommen sind, können Sie im Group Policy Settings Reference-File nachschauen, das Microsoft zum Download anbietet.

Manche Richtlinien sind leider nicht wirklich kompatibel zueinander. Z.B. hat Microsoft mit dem Feature Release 1607 die Nutzungszeit eingeführt und auf 12 Stunden festgelegt. Ab 1703 sind es aber maximal 18 Stunden. Sie können die Nutzungszeit auch per Gruppenrichtlinie festlegen, aber die Maximalwerte von 1703 kann 1607 nicht verarbeiten. Die Lösung sind zwei Gruppenrlichtlinienobjekte (GPOs), die per WMI-Filter "Ihre" Version aussortieren.

Aber auf welchen Wert kann man filtern? Die offizielle Nummer des Feature-Release kann man per WMI-Filter nicht erfragen. Stattdessen kann man aber die Build-Nummer verwenden, die sich mit jedem Feature-Release ändert. Eine Liste der aktuellen Build-Nummern finden Sie bei Wikipedia unter https://en.wikipedia.org/wiki/Windows_10_version_history. In der ersten Tabelle finden Sie in der Spalte Builds die jeweilige Build-Nummer.

Per WMI ermitteln Sie die Build-Nummer über die Klasse Win32_OperatingSystem und die Eigenschaft BuildNumber.

Weiterlesen
0 Kommentare

Das Administrative Windows-Startmenü (Alt+X) um eigene Werkzeuge erweitern

Seit Windows 8.1 gibt es das administrative Startmenü (im englischen Power User Menü genannt), das man über Windows-Taste+X oder über das Kontextmenü des Startbuttons erreichen kann. Das Startmenü ist ausgesprochen praktisch, wenn es um das Aufrufen von administrativen Werkzeugen geht. Außerdem hat man hier die Möglichkeit, den Rechner sowohl herunterzufahren als auch eine Abmeldung durchzuführen, ohne unterschiedliche Menüs verwenden zu müssen.

Leider gibt es keine Bordmittel, um das Menü anzupassen. Prinzipiell kann man auf manuellem Weg mit ein paar Tricks die Einstellungen vornehmen, um eigene Tools im Menü zu verlinken. Es gibt aber auch einen angenehmen Weg, nämlich den Win+X-Editor. Er kann kostenlos bei WinAero heruntergeladen werden. Achten Sie darauf, dass Sie den richtigen Link erwischen, er ist ein wenig versteckt. Eine kleine Anleitung inklusiver der Handgriffe, die man ausführen muß, um die Anpassungen manuell durchzuführen, finden Sie bei Digital Citizen: All the ways to customize the WinX menu in Windows 10 (and Windows 8.1).

0 Kommentare

Die Language-Bar und die Tastenkombination Shift+Alt Entfernen per Gruppenrichtlinie entfernen

Heute habe ich das neue Kapitel über Group Policy Preferences für die Neuauflage meines Gruppenrichtlnienbuchs beendet. Dabei habe ich ein sehr schönes Beispiel für den Einsatz der Registry-Einstellungen gefunden.

Die Sprachleiste ist in den meisten Fällen ein sehr überflüssiges Feature, denn sie erlaubt das Umschalten zwischen verschiedenen Tastaturlayouts. Welchen Sinn das haben soll, ist mir bis heute verborgen geblieben, denn ich wechsel eigentlich nie mal zwischendurch für ein frischeres Erlebnis auf eine chinesische Tastatur. Trotz allem dürfen wir dieses tolle Feature seit vielen Windows-Generationen genießen. Wenn die Funktion einfach nur da wäre, wäre das ja nicht weiter schlimm, aber dummerweise implementiert Sie auch noch die unseelige Tastenkombination Shift+Alt, die das Tastaturlayout automatisch umschaltet. Wie viele Helpdesk-Tickets aufgrund eines versehentlich aktivierten englischen Tastaturlayouts aufgemacht wurden, möchte ich nicht wissen. Glücklicherweise hat Microsoft in der aktellen Version 1803 von Windows 10 zumindest eine Option vorgesehen, das hinzufügen weiterer Layouts zu überspringen.

Die Sprachleiste wird über die Registry gesteuert, und zwar über den Schlüssel HKEY_CURRENT_USER\Keyboard Layout\Preload. Hier ist für jede Sprache ein Werte hinterlegt, wobei der Wertname der Priorität entspricht, und der Wert selber den Sprachcode bestimmt. Bei ITProToday finden Sie eine Liste der Sprachcodes. Bei mir finden sich zwei Einträge in der Liste:

Name  Typ            Daten
1REG_SZ 00000407
2REG_SZ 00000409


Der Wert 407 entspricht dem deutschen Layout, 409 ist das US-Englische Tastaturlayout.

Um die Sprachleiste zu entfernen, müssen Sie lediglich den kompletten Schlüssel Preload entfernen. Dies kann mit einem Powershell-Skript einfach erledigt werden, oder mit Gruppenrichtlinen-Einstellungen.

Weiterlesen
0 Kommentare

Der Taschenrechner ist unter Windows 10 nicht mehr verfügbar

Wenn Ihnen der Taschenrechner unter Windows 10 fehlt, könnte das daran liegen, dass Sie alle Windows Apps deinstalliert haben. Denn der Taschenrechner ist seit Windows 10 keine Anwendung mehr, sondern wird als Universal App ausgeliefert. Wenn Sie weiterhin Zugriff auf den Windows Store haben, können Sie den Taschenrechner direkt daraus installieren.

https://www.microsoft.com/en-us/store/apps/windows-calculator/9wzdncrfhvn5

Wenn Sie auch keinen Zugriff auf den Store mehr haben, aber der Taschenrechner vor dem Entfernen bereits bei einem anderen Benutzer installiert war, können Sie mit dem Cmdlet "Get-AppxPackage" die App aus dem fremden Benutzer reinstallieren.Öffnen Sie hierzu eine Powershell mit Admin-Rechten und starten Sie die folgenden Kommandos:

$calc =  Get-AppxPackage -AllUsers -Name Microsoft.WindowsCalculator
Add-AppxPackage -DisableDevelopmentMode -Register $calc.InstallLocation)\AppXManifest.xml

Sollte auch das nicht funktionieren, hilft Ihnen nur, die Store-App von einem funktionierenden Windows zu kopieren und neu zu installieren.

Markiert in:
Weiterlesen
0 Kommentare

AD Domänenfunktionsebene und Forestfunktionsebene - Bedeutung und Best Practices

Die Active Directory Domänen-Funktionsebene (Domain Functional Level, DFL) und die Forest-Funktionsebene (Forest Functional Level) sind zwei Begriffe, die oft missverstanden werden. Ich werde hier versuchen, ein wenig Licht ins Dunkel zu bringen.
Die Funktionsebene einer Domäne bzw. eines Forest bestimmt, welche AD-Funktionen genutzt werden können. Mit jeder neuen Version von Windows wurden auch neue AD-Funktionalitäten implementiert, von denen einige durch eine Schemaerweiterung aktiviert werden können, während andere voraussetzen, dass alle Domänencontroller des AD sich auf dem gleichen oder einem höheren Betriebssystemstand befinden. Um sicherzustellen, dass alte und neue DCs miteinander kommunizieren können, muss das System sich auf den kleinsten gemeinsamen Nenner einigen. Daher werden neue Funktionen nicht automatisch freigeschaltet, sondern müssen nach dem Herunterstufen aller alten Domänencontroller manuell aktiviert werden. Dabei unterscheidet man zwischen der Funktionsebene einer einzelnen Domäne - um sie zu ändern, müssen alle Domänencontroller der Domäne auf dem gleichen minimalen Stand sein - und der Funktionsebene des Forest, für dessen Änderung alle Domänencontroller des Forest (also alle Domänen) den Versionsstand erreicht haben müssen, der aktiviert werden soll. Um die aktuellen Funktionsebenen abzufragen, öffnen Sie auf einem Computer, auf dem die AD-Verwaltungstools installiert sind, eine Powershell-Konsole und geben folgende Befehle ein:

(Get-ADDomain).DomainMode
(Get-ADForest).ForestMode

Um sich alle Domänencontroller Ihrer Domäne mit Betriebssystemversion ausgeben zu lassen, verwenden Sie

Get-ADDomainController -Filter * | Select-Object Hostname,Operatingsystem

Für alle Domänencontroller aller Domänen verwenden Sie

Weiterlesen
0 Kommentare

DHCP-Proxy, WDS-Server, DHCP-Option 60,66 und 67 und was das mit PXE-Boot zu tun hat

Über wenig Dinge liest man so viel falsches wie über den PXE-Netzwerkboot und wie man den DHCP-Server korrekt konfigurieren muss, um einen Computer aus dem Netzwerk zu starten. Für die ungeduldigen hier zuerst die Konfiguration, die Erklärung folgt danach.

Richten Sie einen DHCP-Server ein. Installieren Sie den WDS-Server auf dem DHCP-Server und lassen Sie den WDS-Server die Konfigurationsarbeit auf dem DHCP-Server erledigen. Der WDS-Server wird dann auf dem DHCP-Server selbständig die Option 60 (PXE-Client) setzen. Wenn Sie den WDS-Server auf einem separaten Server installieren, müssen Sie _NICHTS_ weiter tun. Sie müssen auf dem DHCP-Server weder die Option 60 setzen, noch die Option 66 (TFPT-Server) und 67 (Bootfile). Wenn der WDS-Server und die zu installierenden Clients sich nicht im gleichen Netz befinden, muß der WDS-Server allerdings wie ein DHCP-Server im DHCP-Relay-Agent oder bei Cisco als IP-Helper konfiguiert sein. Der Client findet den WDS-Server dann von selbst und bootet aus dem Netzwerk. Tut er das nicht, liegt es nicht an den DHCP-Optionen!

Was genau passiert beim DHCP-Boot?

Wenn Sie einen Computer über das Netzwerk booten möchten, benötigen Sie einen DHCP-Server und einen TFPT-Server. TFPT ist das Trivial File Transfer Protocol, das im Gegensatz zu FTP Daten per UDP überträgt und ohne Authentifizierung funktioniert. Wenn ein Client einen PXE-Boot initialisiert, schickt er einen DHCP-Request ins Netzwerk, zusammen mit der Information, dass er per PXE booten möchten. Der DHCP-Request wird, wenn er einen DHCP-Server erreicht, mit einem DHCP-Offer beantwortet. Die Antwort beinhaltet die angebotene IP-Adresse, sowie weitere DHCP-Optionen. Prinzipiell kann der DHCP-Server über die Option 66 und 67 dem Client auch einen Bootserver sowie ein Bootfile mitschicken, und das wird auch funktionieren, ist aber nicht notwendig und verursacht zusätzlichen Konfigurationsaufwand. Denn der WDS-Server fungiert als DHCP-Proxy. Das bedeutet, dass er die Anfrage des PXE-Clients ebenfalls beanwortet, allerdings schickt er keine IP-Adresse zurück, sondern nur die Option 66 und 67 mit den Bootfiles, die er zur Verfügung stellt. Das Bootfile ermittelt er selbständig aus seiner Konfiguration. Wichtig ist nur, dass der DHCP-Request beim WDS-Server ankommt. Da der DHCP-Request als Broadcast vom Client verschickt wird, muß die Anfrage also, sofern der WDS-Server nicht im gleichen Netzwerk steht wie der Client, ein DHCP-Weiterleitungsdienst wie der IP-Helper auf dem Router das Datenpaket per Unicast an den WDS-Server weiterleiten. Der WDS wird also genauso auf dem IP-Helper eingetragen wie der DHCP-Server selbst.
Die Option 60, die der WDS-Server bei einer gleichzeitigen Installation im IP-Scope des DHCP-Servers setzt, hat eine andere Funktion. Der DHCP-Proxy funktioniert nämlich wie der DHCP-Server und nutzt auch den gleichen Port ( UDP 67). Wenn der WDS und der DHCP auf dem gleichen Server laufen, muß der WDS-Server einen anderen Port verwenden. Er verwendet dann UDP-Port 4011. Damit der Client auch auf Port 4011 hört und die Konfiguration des DHCP-Proxys akzeptiert, wird die Option 60 vom DHCP-Server gesetzt.

Sollte Ihr Client trotz allem nicht vom WDS-Server booten, kann diese eine andere Ursache haben.  Lesen Sie dafür auch den Artikel "Der PXE-Client startet nicht von WDS-Server - No UEFI-compatible file system found"

Markiert in:
Weiterlesen
0 Kommentare

Der PXE-Client startet nicht von WDS-Server - No UEFI-compatible file system found

Gestern bin ich auf ein merkwürdiges Phänomen gestossen. Nach der Installation eines WDS-Server (Windows Deployment Server) wollte der UEFI-PXE Boot nicht funktionieren. Das BIOS gab nur eine Meldung "TFTP-Error" und "No UEFI-compatible File system was found" aus. Der Boot per Legacy-Boot funktionerte aber einwandfrei. Nach einigem Hin- und her habe ich vor Verzweifelung Wireshark installiert. Untenstehend ein beispielhafter Mitschnitt:

 

Man sieht hier sehr schön, wie der Client eine IP-Adresse angeboten bekommt und auch annimmt (DHCP Ack). Danach startet der Client einen Read-Request per TFTP auf das Boot-File wdsmgfw.efi, das vom Server mit einer File Not Found Fehlermeldung beantwortet wird. Auf unserem Firmeneigenen WDS-Server ist das File vorhanden, wie ich nach kurzer Kontrolle feststellen konnte. Eine kurze Google-Recherche bestätigte dann die Vermutung - das File ist bei der Installation nicht in den Boot-Ordner kopiert worden, wo es aber hätte sein müssen. Ich habe das Phänomen noch nicht bis zum Ende verfolgt, aber ich vermute, der Fehler tritt bei einer Windows Server 2016 RTM-Installation auf.

Um das Problem zu lösen, müssen Sie nur die Datei wdsmgfw.efi in den Ordner "RemoteInstall\Boot\x64" Ihres WDS-Servers kopieren. Sie finden Sie unter %windir%\System32\RemInst\boot\x64\wdsmgfw.efi

Markiert in:
0 Kommentare

Computernamen und DNS-Namen einer Maschine mit Powershell ermitteln

Um den Computernamen zu ermitteln, kann man den Kommandozeilenbefehl Hostname verwenden. Es gibt in Powershell aber keine direkte Möglichkeit, den DNS-Namen eines Computers abzufragen. Hier hilft die DNS-Klasse aus dem .Net Framework aus:

Hostname # Zeigt den Netbios-Computernamen an
$ComputerSystem = [System.Net.Dns]::GetHostByName(($env:computerName))

Das zurückgelieferte Objekt hat drei Eigenschaften, Hostname, Aliases und Addresslist

HostName          Aliases AddressList
--------          ------- -----------
DC1.netz-weise.eu {}      {10.1.0.200}

 

Markiert in:
0 Kommentare

Windows 10 startet immer neu statt herunterzufahren

Unter Windows 10 kann es vorkommen, dass das Herunterfahren des Systems einen Neustart auslöst, anstatt das Gerät auszuschalten. Die Ursache ist vermutlich ein fehlerhafter Treiber, der Windows daran hindert, in den Energiesparmodus zu wechseln. Es handelt sich hierbei um eine neue Funktion, die mit Windows 8 eingeführt wurde, und die als Schnellstartmodus bezeichnet wird. Anstatt das System vollständig herunter zu fahren, wird der aktuelle Benutzer nur abgemeldet und das System dann in den Hibernation-Mode (Ruhezustand) versetzt. Im Ruhezustand wird der Inhalt des Arbeitsspeichers in die Datei hiberfil.sys geschrieben und beim Einschalten wieder gestartet. Dadurch muß beim Hochfahren des Systems nicht mehr das Gerät initialisiert werden, sonden es wird nur noch der letzte Zustand geladen, was deutlich schneller geht.

Wenn ein Fehlerhafter Treiber, eine Fehlerhafte Datei oder ein Bug in Windows das Herstellen des Ruhezustands verhindert, schaltet sich der Rechner nicht ab, sondern öffnet sofort wieder das Anmeldefenster. Um das Problem temporär zu lösen, können Sie den Rechner zwingen, komplett herunter zu fahren, indem Sie beim Klicken auf den Eintrag "Herunterfahren" die Shift-Taste gedrückt halten. Alternativ können Sie den Rechner mithilfe der Kommandozeile ausschalten. Erstellen Sie sich dazu ein Batch-Datei (eine Textdatei mit der Endung .cmd oder .bat) und schreiben Sie folgenden Befehl in die Datei:

Shutdown /s /t 0

Der Shutdown-Befehl fährt den Rechner immer komplett herunter, es sei denn, sie geben explizit den Parameter /hybrid mit an.

Um den Fehler zu beheben, stehen Ihnen, je nach Ursache, mehrere Möglichkeiten zu Auswahl. Wenn es sich um ein Problem des Betriebssystems handelt, dass nach einem Update aufgetreten ist, hilft es vielleicht schon, die neuesten Windows-Updates einzuspielen. Hilft das nicht, versuchen Sie die Gerätetreiber zu akutalisieren. Übliche Verdächtige sind die Netzwerkkarte, die Grafikkarte oder die Chipsatztreiber.

Weiterlesen
0 Kommentare

Mehrfach-Umbenennen mit Powershell, Rename-Item und regulären Ausdrücken

Eine Datei umzubenennen ist mit Powershell mit Hilfe des Cmdlets Rename-Item relativ einfach möglich. Sie müssen nur den Namen der Datei und den neuen Namen angeben:

Rename-Item -Path C:\temp\Test.txt -NewName Produktion.txt

Es gibt aber auch die Möglichkeit, mehrere Dateien in einem Rutsch umzubenennen. Hierfür können Sie die umzubennenden Dateien per Pipeline an Rename-Item weiterleiten und neuen Namen über einen Skriptblock definieren:

Get-ChildItem -Path C:\Skripte\*.ps1 | Rename-Item -NewName { $_.basename + ".txt"  }

In diesem einfachen Beispiel werden alle Dateien mit der Endung .ps1 im Ordner c:\Skripte in .txt umbenannt - $_ ist ein Platzhalter für die einzelnen Dateien, .basename beinhaltet den Dateinamen ohne Dateiendung.

Markiert in:
Weiterlesen
0 Kommentare

By accepting you will be accessing a service provided by a third-party external to https://www.netz-weise-it.training/

Nach oben