Windows 10 Home, Password will never expire …

Oft bekomme ich eine Home-Edition von Windows 10 in die Finger, meistens erfolgt gleich ein Upgrade auf Windows 10 Professional da eine Mitgliedschaft in einer Domäne notwendig ist. Kürzlich war es aber mal wieder soweit und dieses System sollte auf Windows 10 Home belassen werden, damit wollte auf das in diesem Blog beschriebene Script zurück greifen, um das Passwort auf nicht ablaufend zu setzen. Bei einer Passwortlänge von 16 Zeichen, halte ich diese Einstellung für vertretbar.

Gleich vorneweg, ja das Script funktioniert nach wie vor. Mir ist aber aufgefallen, dass ich zum einen weitere Parameter für das Benutzer-Konto setzen will und darüber hinaus PowerShell das doch noch viel besser machen kann  Thumbs up Dazu muss aber mindestens die Version Windows 10 1607 oder neuer im Einsatz sein. Das Script unter der Verwendung von WMIC wurde davor entwickelt.

Aufgabe

Ein Benutzer mit dem, zugegebenen Maßen kurzem Namen “kn” soll erstellt werden. Ich mache das auf Home Systemen oder auch in kleinen Netzwerken gerne da damit der Name des Windows Benutzer Profils hinreichend kurz wird und z.B. OneDrive ein paar Zeichen mehr im Pfadnamen hat. Durch das zusätzliche Setzen eines vollen Namens, erscheint dann dieser am Anmeldebildschirm.

  1. Benutzername = kn
  2. Vollständiger Name = “Karl Napf”
  3. Passwort-Ablauf = nicht ablaufend / never expires

PowerShell Befehle

Mit dem PowerShell-Befehl New-LocalUser erfolgen. Vor dem eigentlichen Befehl, besteht die Möglichkeit das Passwort vertraulich an der Eingabeaufforderung mit Read-Host einzulesen.

Alle PowerShell-Befehle mitt in einer PowerShell-Sitzung mit erhöhten Rechten ausführen.

# Einlesen des Passworts
$Password = Read-Host -AsSecureString

# Anlegen des Benutzers
New-LocalUser -Name 'kn' -FullName 'Karl Napf' -Password $Password -PasswordNeverExpires -Description 'Karl Napf, der Erfinder der Brotsuppe'

Die Kontrolle mit net user, zeigt ein zufriedenstellendes Ergebnis.

image

Enjoy it, b!

WTF ist mein Amazon MP3 Download

Bei Amazon bekommt man zu einer Musik CD auch gleich die MP3s als Download dazu, diese Option nutze ich sehr gerne. Genau genommen sammle ich die CD nur aus nostalgischen Gründen, Musik liegt als MP3 auf einer Reihe von Endgeräten vor. Das ist aber nicht der Grund für diesen Blog, sondern die Suche nach meinem MP3 Download!

Das Problem

Mit Amazon Music, bietet Amazon eine App welche die bei Amazon erworbenen MP3s nicht nur Verwalten, sondern auch herunterladen kann.

image

Das Herunterladen ist für mich wichtig, da ich meine MP3s gerne im Auto oder auch offline auf dem Smartphone höre. Der Download selbst gestaltet sich unproblematisch, hat man einmal das Album gefunden lassen sich einzelne Titel oder das ganze Album problemlos in den folgenden Ordner herunterladen.

%USERPROFILE%\Music\Amazon MP3

Was für die Mäuseschubser unter uns, dieser Ordner ist.

image

Da der Ordner Music (oder Musik auf einem Windows mit deutscher Sprache) zum Benutzer-Profil gehört, kann dieser über eine Gruppenrichtlinie oder manuell umgeleitet werden, seine Position im Dateisystem damit verändert werden. Früher hatte ich alle Ordner auf den Server umgeleitet, habe das aber aufgrund von vielen Programmen (Adobe) welche mit umgeleiteten Applikationsdaten (AppData) Probleme haben auf die folgenden Ordner reduziert.

  • Videos
  • Music
  • Documents
  • Pictures

Meine MP3s von Amazon sollten also im Ordner Music landen, welcher hier auf den folgenden Server zeigt, dort waren sie aber nicht.

\\scotia\Folder Redirection\%USERNAME%\music

Lokal konnte ich einige MP3s finden, nur nicht das neu erworbene Album.

Wo zur Hölle sind also die MP3s? Zuerst hatte ich Amazon im Verdacht, vielleicht findet der Download nur noch in einen geschützten Container statt um die Dateien nicht mehr beliebig auf seinen Geräten abspielen zu können. So etwas würde aber Amazon bestimmt nicht tun, oder man bekommt solche Maßnahmen auf die eine oder andere Art mit.

Die Analyse

Damit blieb mir nur die Möglichkeit die Sache eingehend zu analysieren und dazu griff ich auf den Process Monitor von Sysinternals zurück. Der Download einer MP3 Datei war ausreichend, um dem Problem auf die Spur zu kommen.

Dazu waren die folgenden Schritte notwendig.

  1. Start des Process Monitors als Administrator und Rücksetzen aller Filter
  2. Start von Amazon Music unter den angemeldeten Benutzer und Auswahl eines Liedes zum Download
  3. Auswahl der Amazon Music App mit der Zielscheibe (Fadenkreuz) des Process Monitors

Ups, der Download erfolgt schon aber in einem Pfad, bzw. auf einen Server den es schon lange nicht mehr gibt.

image

Damit hat wohl auch Amazon Music seine Probleme mit der Umleitung von Ordnern, vor allem wenn irgendwann noch eine Migration dieser erfolgt ist.

Durch das Ergebnis neugierig geworden, wollte ich mir den Inhalt des CSC Ordners genauer anschauen, dieser wird aber von Windows besonders geschützt und verweigert per Default auch einem Admin den Zugriff. Lediglich der SYSTEM Account hat hier die notwendigen Berechtigungen. Eine Eingabeaufforderung für eben diesen, kann aber recht einfach mit PsExec, ebenfalls aus der Sysinternals Suite gestartet werden.

c:\Windows> "\Program Files (x86)\Windows Sysinternals Tools\psexec.exe" -s cmd.exe

image

Damit ist ein Zugang zum CSC Ordner möglich, in dem sich zwei Namespaces befinden. Neben dem aktuellen auch der im Process Monitor angezeigte alte.

image

Der sich darin befindliche Ordner Music zeigte auch das Datum und die Uhrzeit des ersten Downloads …

Mittels eines weiteren Tools aus der Sysinternals Suite konnte ich die Verwendung des Ordners durch die Amazon Music App weiter analysieren. Handle zeigt, dass Amazon Music einige Ordner und Dateien verwendet.

C:\Windows\CSC\v2.0.6\namespace> "\Program Files (x86)\Windows Sysinternals Tools\handle.exe" -nobanner -accepteula cardhu

image

Der Aufruf von Handle erfolgte innerhalb der über PsExec gestarteten Eingabeaufforderung.

Meine Absicht war nun, den Ordner dort einfach zu löschen. Durch das Schließen von Amazon Music waren nur noch fünf Handles offen, aber ein Löschen des Verzeichnisses eben wegen dieser, immer noch nicht möglich.

image

Während dem Windows Explorer noch mit einer Terminierung beizukommen wäre, lässt sich der System Prozess von Windows nicht stoppen.

Die Amazon Music App zeigte sich zudem unbeeindruckt und wählte nach einem Neustart eben genau dieses Verzeichnis zum wiederholten Download.

Die Lösung

Die Lösung des Problems war nun das folgende Vorgehen.

  1. Löschen des CSC\v2.0.6\namespace Ordners über ein Windows 10 Installations Medium (USB Stick oder DVD)
  2. Deinstallation der Amazon App, löschen aller Fragmente und Neuinstallation über den Windows Store.

Nach dem Start des PCs mit einem Windows 10 ISO, kann über die Kombination SHIFT+F10 eine Eingabeaufforderung geöffnet werden Smile mit deren Hilfe sich das Verzeichnis ohne Probleme löschen läßt.

Untitled

C:\Windows\CSC\v2.0.6\namespace> rd <Youf-F...-Namespace> /s /q

Nach der Deinstallation von Amazon Music, habe ich an den folgenden Stellen im Betriebssystem nach Fragmenten gesucht.

Windows Registry:

image

Im Dateisystem:

C:\Temp> dir %USERPROFILE%\Appdata\Roaming

C:\Temp> dir %USERPROFILE%\AppdataLocal

C:\Temp> dir %ProgramFiles%

C:\Temp> dir %ProgramFiles(x86)%

C:\Temp> dir %ProgramData%

Amazon Music muss nicht zwingend an allen Stellen Informationen ablegen. Da auf dem Rechner noch Reste einer alten Installation vorhanden, habe ich alle Einträge gelöscht und danach aus dem WIndows Store Amazon Music erneut installiert.

Die neu installierte App war dann zwar der Meinung, dass C.\Windows\System32\Amazon Music der richtige Download Ordner wäre, was man aber in den Preferences/Einstellungen korrigieren kann.

image

Damit ist sogar die Speicherung in einem um geleiten Ordner möglich.

image

So, alles gut.

Enjoy it, b!

Ändern der IP-Adresse von statisch auf DHCP

Mit dem Befehl netsh.exe lässt sich unter Windows der komplette IP-Stack konfigurieren, das habe ich mir bei einem kürzlich stattgefundenen DHCP-Rollout zu Nutze gemacht und die PCs über das folgende Script von einer statischen IP-Adresse auf DHCP umgestellt.

@echo off

:: Ändern des DNS von statisch auf DHCP
netsh interface ip set dns "Local Area Connection" dhcp

:: Ändern der IP-Adresse von statisch auf DHCP
netsh interface ip set address "Local Area Connection" dhcp

Das Script kann dann beim Start oder beim Herunterfahren des PCs per GPO ausgeführt werden. Alternativ natürlich mit psexec aus den Sysinternals Tools. Sollte es sich um PC mit einem Windows in deutscher Sprache handeln, dann einfach “Local Area Connection” mit “LAN-Verbindung” ersetzen oder in der Netzwerkumgebung nachschauen wie der Adapter genau benannt wurde.

Enjoy it, b!

Windows Build Number / Nummer

Bald kommt das Herbstrelease von Windows 10 in der Version 1809. Dabei stellt sich die Frage, welche Buildnummer hat eigentlich mein Windows 10 System und wie bekomme ich diese am einfachsten heraus?

Auf meinem aktuellen System mit Windows 10, 1803 ist der Build 17134 …

c:\Temp> ver

Microsoft Windows [Version 10.0.17134.286]

… und unter Windows 10, 1809 wird er dann 17663 sein.

C:\Temp> ver

Microsoft Windows [Version 10.0.17763.1]

image

Da aber die Zukunft PowerShell heißt, können wir uns das dort noch viel schöner anzeigen lassen.

PS C:\Temp> [System.Environment]::OSVersion.Version

image

Windows 10, Build 17763, das Herbst-Release 2018.

Enjoy it, b!

Erstellen von Hashes unter Windows

Gelegentlich muss ich von einer Datei einen Hash erzeugen, um sie zum Beispiel im Virenscanner vom Zugriff aus zu nehmen.

Bisher oder früher hat man das recht einfach mit dem File Checksum Integrity Verifier Utility gemacht, welches Microsoft zum Download anbietet.

Der folgende Aufruf hat dann einen MD5 und SHA1 Hash erzeugt.

FCIV -md5 -sha1 path\filename.ext

Inzwischen gibt es seit PowerShell 4.0 (also auch schon einige Zeit) den Befehl Get-FileHash und damit die Möglichkeit einen Hash ganz ohne 3rd Party Tools oder Downloads zu erstellen.

PS C:\temp> Get-FileHash MEMORY.DMP -Algorithm SHA1

image

Enjoy it, b!

Diskpart und das RO-Flag

Sollte für eine Disk in Windows das RO-Flag (Read-Only) Flag gesetzt haben, ist eine Einrichtung nicht möglich. Dazu muss das RO-Flag zurück gesetzt werden, was mit DISKPART einfach geht.

Zuerst schauen wir, ob die Disk auch unter DISKPART angezeigt wird (in diesem Fall ist es Disk 1)

DISKPART> list disk

  Disk ###  Status         Size     Free     Dyn  Gpt
  --------  -------------  -------  -------  ---  ---
  Disk 0    Online          256 GB  1024 KB
  Disk 1    Online          512GB   512 GB

Danach wählen wir die Disk aus:

DISKPART> select disk 1

Um mit dem folgenden Befehl das RO-Flag zurück zu setzen.

attributes disk clear readonly

So, fertig und eigentlich kein großes Ding.

Bildergebnis für Frohe Weihnachten

Ausführen von PowerShell über eine Batch

PowerShell Skripte oder CmdLets lassen sich auch über eine Batchdatei (.cmd / .bat) ausführen. Das geht recht einfach und sogar Parameter können mit angegeben werden. Es muss lediglich auf korrekte gesetzte Quoten (Anführungszeichen) geachtet werden.

:: Variables
set log="%temp%\Expand-Raw.log"

:: Header
echo Expand-Raw ...
echo Expand-Raw ... >%log%
echo.

for /f "tokens=*" %%a in ('dir RAW*.zip /b') do (

	rem  PowerShell -NoExit "&" ""P:\Code\Distribute-Pictures.ps1" -Action dis -File '.\%%a'"
	PowerShell ""P:\Code\Distribute-Pictures.ps1" -Action dis -File '.\%%a'"
	echo [RC=%ERRORLEVEL%], PowerShell -NoExit "&" ""P:\Code\Distribute-Pictures.ps1" -Action dis -File '.\%%a'" >>%log%

)

:_End

Schauen wir uns das PowerShell-Skript genauer an, dann sehen wir das insgesamt 4 Parameter übergeben werden:

  • -Action und die entsprechende Aktion, also –Action dis
  • -File und Dateiname, also –File ‘RAW 2017-01-08-01, Huskies auf der Alb.zip’

Der Aufruf unter PowerShell (also nicht über eine Batch sieht wie folgt aus):

.\Distribute-Pictures.ps1 -Action dis -File 'RAW 2017-01-08-01, Huskies auf der Alb.zip'

Die Batch Datei, welche nun drum herum abläuft, soll das PowerShell-Skript einfach mehrfach für eine Reihe von Dateien im gleichen Verzeichnis ausführen. Darum erfolgt ein Aufruf von PowerShell.exe mit dem Script und den Parametern aus der Batch heraus.

PowerShell ""P:\Code\Distribute-Pictures.ps1" -Action dis -File '.\%%a'"

PowerShell ruft die PowerShell.exe auf, danach wird der vollständige Aufruf für PowerShell in normale Anführungszeichen gesetzt.

""P:\Code\Distribute-Pictures.ps1" -Action dis -File '.\%%a'"

Innerhalb dieser Anführungszeichnen (“) steht dann das PowerShell-Script in weiteren Anführungszeichen, gefolgt von den Parametern. Der letzte Parameter, welcher den Dateinamen darstellt, wird in einfache Anführungszeichen (‘) gesetzt, da ihn PowerShell dann literal behandelt.

Enjoy it, b!

Konvertierung von m4a Dateien nach mp3

Leider können nicht alle Car-Audio Systeme M4A-Dateien abspielen. Darum bin ich gelegentlich mit der Aufgabe konfrontiert M4A-Dateien nach MP3 zu konvertieren, was mit ffmpeg.exe und einem kleinen Script an der Eingabeaufforderung ohne große Probleme funktioniert.

Dazu habe ich den aktuellsten Windows-Build von ffmpeg herunter geladen und in ein Verzeichnis auf meinem Server (SBS) entpackt.

https://ffmpeg.zeranoe.com/builds/

Danach in das Verzeichnis mit den M4A-Dateien gewechselt und folgenden Aufruf ausgeführt:

for /f "tokens=1,2 delims=." %a in ('dir *.m4a /b') do \\sbs\xapps\ffmpeg\bin\ffmpeg.exe -i "%a.%b" -b:a 256K -vn "%a.mp3"
  • dir *.m4a /b liefert mir alle M4A-Dateien zurück
  • for /f …. zerlegt die Dateien in den eigentlichen Dateinamen und die Endung (welche nach der Konvertierung .mp3 sein soll)
  • ffmpeg.exe erstellt die entsprechende mp3 Datei mit einer Sampling-Rate von 256Kbit/s

That’s it … ging recht einfach Smile Die M4A-Dateien habe ich dann noch im Anschluss gelöscht.

Enjoy it, b!

Windows 10, Installation des .NET Frameworks 3.5

Liegt der Inhalt des Windows 10 ISOs auf einer Dateifreigabe im Netzwerk so kann das .NET Framework 3.5, über den folgenden Aufruf, von einer Eingabeaufforderung mit Adminrechten installiert werden.

Dism /online /enable-feature /featurename:NetFx3 /All /Source:\server\w10\sources\sxs /LimitAccess

Das geht deutlich einfacher und scheller als über den Dialog der Windows Features.

image

Enjoy it, b!

Windows SBE 2012 R2 Dashboard

Für den Windows Server Small Business Essentials 2012 R2 hat Microsoft das Management mit PowerShell nochmals deutlich verbessert und liefert eine Reihe hilfreicher PowerShell Befehle mit.

https://technet.microsoft.com/en-us/library/dn205088(v=wps.630).aspx

Im Gegensatz zu früheren Versionen, lässt sich damit z.B. das Dashboard nach einer Migration auf SBE 2012 R2 von Benutzerkonten säubern welche dort nicht angezeigt werden sollen (Service Accounts, zusätzliche Admins, etc.).

Dazu wird einfach PowerShell als Administrator gestartet und die vorhandenen Benutzer des Dashboards ermittelt:

# Ermittlung der im Dashboard angezeigten Benutzer
Get-WssUser | fl UserName

image

Die beiden grün markierten Benutzer sollen nicht mehr im Dashboard angezeigt werden (das eine ist mein Administrator, der andere DHCP2DNS ist der Proxy-Account für DNS Updates).

# Deaktivieren der Anzeige von Benutzern im Dashboard
Set-WssUserDashboardVisibility -Name bernd-adm -Hidden

Set-WssUserDashboardVisibility -Name DHCP2DNS-Update -Hidden

image

Damit zeigt das Dashboard lediglich den Administrator und die eigentlichen SBE Benutzer an.

Enjoy it, b!