Archive for Mai 2014

Arbeitsweise von Powershell Desired State Configuration und Infos darüber

25 Mai 2014

Mit Powershell 4.0 hat die sogenannte Desired State Configuration (DSC) Einzug gehalten. Dabei schreibt man nicht ein Script, was wie eingerichtet werden soll, sondern man beschreibt, wie die Konfiguration eines Rechners aussehen soll. Dabei wird das laufende System von einem speziellen Prozess überwacht. Wird von diesem Prozess eine Änderung festgestellt, die nicht der gewünschten Konfiguration entspricht, kann automatisch ein Reparaturprozess gestartet werden. Dabei kann man diese Konfigurationen einfach per WSMan auf einzelne Rechner im Netz verteilen.

Hier sehr schöner Artikel, der die Vorgehensweise und vor allem auch ein paar Hintergründe beschreibt, wie die Windows Aufgabenplanung mit eingesetzt wird: http://www.verboon.info/2013/11/powershell-desire-state-configuration-my-first-experiences/

Momentan ist DSC noch nicht voll ausgereift aber die Grundlagen sind gelegt und das nötige Ökosystem entwickelt sich schnell.

Bei der Einrichtung zu beachten:

On Windows 8.1 and Windows Server 2012 R2, make certain that KB2883200 is installed or DSC will not work. On Windows Server 2008 R2, Windows 7, and Windows Server 2008, be sure to install the full Microsoft .NET Framework 4.5 package prior to installing WMF 4.0 or DSC may not work correctly.

Ein kleines eBook über DSC: https://onedrive.live.com/?cid=7F868AA697B937FE&id=7F868AA697B937FE%21110

Einführungsvideo mit Erklärungen zur Infrastruktur im Netzwerk und Einsatz mit Linux: http://channel9.msdn.com/Events/TechEd/NorthAmerica/2014/DCIM-B417#fbid=

Wenn man Probleme hat, hilft unter Windows:

Get-WinEvent –LogName "Microsoft-Windows-Dsc/Operational"

Teamviewer unter Windows 7 und Windows 8 (8.1) bei aktivierter Benutzerkontensteuerung optimal nutzen–ohne Adminrechte für Benutzer

22 Mai 2014

Diese Beschreibung geht auf einen speziellen Sachverhalt ein, welcher oft bei der Einrichtung und Betreuung von Rechnern von Kunden untergeht. Das Problem ist, der Kunde soll möglichst einfach seinen Teamviewer, vornehmlich den Quicksupport öffnen können. Dabei sollte es aber für den Supporter möglich sein, im Zweifelsfall Systemeinstellungen auf dem ferngewarteten Rechner vorzunehmen. Dies impliziert nun einen Admin-Account. Da der Benutzer in der Regel nicht mit Adminrechten ausgestattet sein soll und in den meisten Fällen auch keine Kenntnis von einem Adminpasswort haben soll, hat man ein Problem.

Damit die hier geschilderte Lösung funktioniert, muss man zumindest einmal zur Einrichtung Adminrechte bekommen oder es müssen einem das Adminkonto und das zugehörige Passwort bekannt sein. Alle späteren Fernwartungen laufen dann für den Benutzer mit normalen Rechten ab.

Hier der generelle Ablauf einer Sitzung:
Der Benutzer startet seinen Teamviewer-Quicksupport ohne spezielle Rechte. Dieser verbindet sich mit dem Teamviewerserver, zeigt seine ID und das Kennwort an. Der Status des Fensters lautet:

Bereit zum Verbinden (Sichere Verbindung)

Nun gibt der Benutzer dem Supporter die ID und das Kennwort durch, der Supporter verbindet sich mit dem fernen Rechner und der Benutzer bekommt

Warte auf Authentifizierung

angezeigt.

Der Supporter, anstatt das Kennwort einzugeben, klickt auf “+ Erweitert” unten links und wählt bei Authentifizierung Windows aus. Nun kann man man den Benutzernamen und Kennwort eines lokalen Adminbenutzers des fernen Rechners eingeben. Daraufhin wird die aktuelle Verbindung beendet und beim Teamviewer des Supporters wird kurz

Bitte warten, der Teamviewer Ihres Partners wird mit erhöhten Rechten gestartet.

angezeigt. Der Benutzer am ferngewarteten Rechner sieht darauf hin einen UAC-Dialog, also die Aufforderung mit

Möchten Sie zulassen, dass durch das folgende Programm Änderungen an diesem Computer vorgenommen werden?

Programmname: Teamviewer

Erst wenn der Benutzer hier auf Ja klickt, wird die Fernwartungsverbindung aufgebaut und der Supporter hat nun vollen Zugriff!

Ein Punkt der noch wichtig ist: Teamviewer verlangt bei den Anmeldungen über ein Windowskonto eine Mindestpasswortlänge von 8 Zeichen! Je mehr desto besser natürlich. Wer für diese Aktion einen speziellen Benutzer einrichtet, der nicht unbedingt am Anmeldebildschirm auftauchen soll, der beachte diesen Artikel: https://newyear2006.wordpress.com/2014/05/22/automatische-anmeldung-von-benutzern-und-benutzerkonten-verstecken-bzw-ausblenden/

Automatische Anmeldung von Benutzern und Benutzerkonten verstecken bzw. ausblenden

22 Mai 2014

Um den Zugang zu Windows einfacher zu gestalten, ist es manchmal sinnvoll, für unbedarfte Benutzer seinen eigenen ServiceAdmin-Account vom Anmeldebildschirm zu verbannen.

Das Konto bleibt aktiv, kann aber bei Ausführung dieses Befehls ausgeblendet werden:

reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\W
inlogon\SpecialAccounts\UserList" /t reg_DWord /v ServiceAdmin /d 0

Möchte man den Account wieder angezeigt bekommen, muss man einfach die letzte 0 durch eine 1 ersetzen und den Vorgang nochmal durchführen.

Und wenn wir gerade beim Anmeldebildschirm sind. Nach dem Windows 8.1 Update Update landet man nun ja endlich wieder direkt auf dem Desktop. Aber den einen oder anderen Benutzer stört es noch, vorweg ein Passwort eingeben zu müssen. Kein Problem. Mittels

control userpasswords2

öffnet sich ein Dialog, über den dies geändert werden kann. Dürfte allerdings nur außerhalb von Domänen funktionieren. Dazu muss man nur bei “Benutzer müssen Benutzernamen und Kennwort eingeben” das Häkchen entfernen und den anschließenden Dialog bedienen.

Dieser Artikel greift einen alten Beitrag auf: https://newyear2006.wordpress.com/2008/01/24/aspnet-machine-account-und-automatisches-anmelden-eines-benutzers-unter-windows-xp/

Hier gibt es noch eine bebilderte Anleitung für die automatische Anmeldung: http://www.windowspower.de/ohne-passworteingabe-anmelden-unter-windows-8_12028.html

Powershell Cmdlets nach Verben und Substantiven (Nouns) sortiert ausgeben

21 Mai 2014

Wenn man Powershell Cmdlets schreibt, steht man das eine oder andere Mal vor der Frage, mit welchem Verb man sein Cmdlet bezeichnen sollte.

Zur Inspiration kann man sich ja einfach mal die bestehenden ausgeben lassen:

get-command -CommandType Cmdlet | Group-Object -Property Verb | Sort-Object -Property Count –Descending

Wenn man dann schon dabei ist, kann man sich ja gleich auch noch die aktuellen Substantive (Nouns) ausgeben lassen:

get-command -CommandType Cmdlet | Group-Object -Property Noun  | Sort-Object -Property Count -Descending

Ach und wer seine Cmdlets Professional aussehen lassen will, der verwendet in der Powershell ISE im Editor die Combination STRG+J zur Auswahl von Cmdlet-Codesnippets also Codeschnipsel! Leider erst ab PS 3.0 aufwärts verfügbar.

Windows Server 2012 (R2) Server Manager um eigene Powershell Skripte erweitern

19 Mai 2014

Seit Windows Server 2012 hat Microsoft bei den GUI-Verwaltungen der alten MMC den Kampf angesagt. Alle neuen Tools werden immer weiter in den neuen Server-Manager integriert. Führt man über das Toolsmenü einen Befehl aus, läuft im Hintergrund ein Powershell-Skript ab.

Das Toolsmenü kann man um eigene Powershell-Skripte erweitern, dazu muss man nur das Powershell-Skript in das Verzeichnis

%PROGRAMDATA%\Microsoft\Windows\Start Menu\Programs\Administrative Tools

verlinken. Dabei kann man auf alle im Dashboard bekannten Server zurückgreifen, indem man diese Datei ausliest:

%APPDATA%\Microsoft\Windows\ServerManager\ServerList.XML

Näheres beschreibt dieser Artikel: http://blogs.technet.com/b/keithmayer/archive/2013/11/20/step-by-step-extending-server-manager-in-windows-server-2012-and-2012-r2.aspx

Powershell Enumeration zu unbekannten Typ ermitteln

18 Mai 2014

Wenn man beim Durchstöbern von verschiedenen Daten aus Powershellobjekten auf einmal an einem Enumerationstyp landet, wie z. B. diesen hier:

IsPublic IsSerial Name             BaseType
——– ——– —-             ——–
True     True     ImageHealthState System.Enum

Dann fragt man sich, was könnten die anderen Werte noch sein? Wie kommt an die anderen Werte, wenn Google nichts brauchbares liefert und die Werte scheinbar nirgends offiziell dokumentiert sind?

In so einem Fall hilft die ausführliche Ausgabe mittels Format-List:

PS C:\> $h.ImageHealthState.GetType()| fl *

Module                : Microsoft.Dism.PowerShell.dll
Assembly              : Microsoft.Dism.PowerShell, Version=6.3.0.0,Culture=neutral, PublicKeyToken=null
TypeHandle            : System.RuntimeTypeHandle
DeclaringMethod       :
BaseType              : System.Enum
UnderlyingSystemType  : Microsoft.Dism.Commands.ImageHealthState
FullName              : Microsoft.Dism.Commands.ImageHealthState
AssemblyQualifiedName : Microsoft.Dism.Commands.ImageHealthState,                            Microsoft.Dism.PowerShell, Version=6.3.0.0,                            Culture=neutral, PublicKeyToken=null
Namespace              : Microsoft.Dism.Commands
GUID                   : eea8dbef-fb34-3b75-8b86-c80dcd47dd53
IsEnum                     : True
GenericParameterAttributes :
IsSecurityCritical         : True
IsSecuritySafeCritical     : False
IsSecurityTransparent      : False
IsGenericTypeDefinition    : False
IsGenericParameter         : False
GenericParameterPosition   :
IsGenericType              : False
IsConstructedGenericType   : False
ContainsGenericParameters  : False
StructLayoutAttribute      : System.Runtime.InteropServices.StructLayoutAttribu
                             te
Name                       : ImageHealthState
MemberType                 : TypeInfo
DeclaringType              :
ReflectedType              :
MetadataToken              : 33554456
GenericTypeParameters      : {}
DeclaredConstructors       : {}
DeclaredEvents             : {}
DeclaredFields             : {value__, Healthy, Repairable, NonRepairable}
DeclaredMembers            : {value__, Healthy, Repairable, NonRepairable}
DeclaredMethods            : {}
DeclaredNestedTypes        : {}
DeclaredProperties         : {}
ImplementedInterfaces      : {System.IComparable, System.IFormattable,
                             System.IConvertible}
TypeInitializer            :
IsNested                   : False
Attributes                 : AutoLayout, AnsiClass, Class, Public, Sealed
IsVisible                  : True
IsNotPublic                : False
IsPublic                   : True
IsNestedPublic             : False
IsNestedPrivate            : False
IsNestedFamily             : False
IsNestedAssembly           : False
IsNestedFamANDAssem        : False
IsNestedFamORAssem         : False
IsAutoLayout               : True
IsLayoutSequential         : False
IsExplicitLayout           : False
IsClass                    : False
IsInterface                : False
IsValueType                : True
IsAbstract                 : False
IsSealed                   : True
IsSpecialName              : False
IsImport                   : False
IsSerializable             : True
IsAnsiClass                : True
IsUnicodeClass             : False
IsAutoClass                : False
IsArray                    : False
IsByRef                    : False
IsPointer                  : False
IsPrimitive                : False
IsCOMObject                : False
HasElementType             : False
IsContextful               : False
IsMarshalByRef             : False
GenericTypeArguments       : {}

Bei obiger Auflistung taucht der Fullname auf. Kürzer gehts mit

($h.ImageHealthState.GetType()).Fullname

Diesen Namen kann man verwenden, um die anderen Enumerationsnamen auflisten zu lassen:

PS C:\>
[Microsoft.Dism.Commands.ImageHealthState].GetEnumNames()
Healthy
Repairable
NonRepairable

Hyper-V VMs, Trusted Platform Module und das Problem mit den Virtual Smart Cards

15 Mai 2014

Von Microsoft gibt es endlich mal wieder tolles, neues Spielzeug. Seit Windows 8 gibt es sogenannte Virtual Smart Cards. Von der Funktion her reagieren sie wie echte Smartcards, allerdings hat man sie im Rechner. Vor ein paar Tagen wurde nun Windows Phone 8.1 vorgestellt und siehe da, Windows Phone 8.1 ist nun auch Virtual Smart Card fähig!

OK, wenn man drüber nachdenkt, dann kommt man schnell zum Punkt: Toll was soll die Sache, wenn dann jeder kurz mal meine Smartcards kopieren kann, der irgendwie Zugriff auf meinen Rechner oder Handy hat?

Da kommt nun TPM ins Spiel. Im Businessbereich schon seit Jahren in vielen Rechnern eingebaut und oft unbenutzt, hat TPM mittlerweile Version 2 erreicht. Übrigens vergleichbares bei ARM nennt sich TrustZone. Auf jeden Fall handelt es sich dabei um einen speziellen Speicherbereich, auf dem z. B. auch Privatkeys sicher gespeichert werden können sollen. Android unterstützt diese Hardwarespeicherung auch seit Version 4.3 mit dem sogenannten Hardware Credential Store.

Um sich nun mit diesen interessanten Dingen beschäftigen zu können, kann man selber Smartcards anlegen. Üblicherweise macht man heutzutage alles in VMs. Aber leider fehlt es an diesem Ende mal wieder. Der aktuelle Hyper-V Server 2012 R2 unterstützt zwar SecureBoot bei Generation 2 VMs allerdings bringt er keine Unterstützung von TPM innerhalb von virtuellen Maschinen mit. Schade, sehr schade.

So führt die Verwendung von TPMVSCMGR.EXE dazu:

tpmvscmgr create /name MyVSC /pin default /adminkey random /generate

Standard—PIN verwenden: 12345678
TPM—Smartcard wird erstellt…
Komponente für virtuelle Smartcards wird initialisiert…
Komponente für virtuelle Smartcards wird erstellt…
Fehler beim Erstellen der Komponente für virtuelle Smartcards.
         (0x80090030) Das Gerät, das von diesem kryptografischen Anbieter angefordert wird, kann nicht verwendet werden.

Dieser Artikel bestätigt auch nochmal das Fehlen von TPM in VMs in der aktuellen Version: http://blogs.technet.com/b/jhoward/archive/2013/11/04/hyper-v-generation-2-virtual-machines-part-7.aspx. Schade.

Wenn man bestimmte übergeordnete Instanzen bei Microsoft außer acht lässt und man zunächst davon ausgeht, dass TPM die Privatkeys sicher speichert, dann könnte man es mittels dieser Technologie endlich schaffen sich per Handy mittels Bluetooth über die virtuelle Smartcard anzumelden. Da ja nun mittels Bluetooth 4.0 LE auch der Abstand der Geräte über das ProximityProfile ermittelbar ist, kann man z. B. definieren, dass das Handy immer im Bereich von 30-40cm zum Rechner sein muss, ansonsten wird automatisch der Lockscreen aktiv. Klar klappt das erst perfekt, wenn man mehrere Bluetoothsignalgeber an verschiedenen Stellen hat, aber die Dinger werden immer billiger und kleiner. Daraus resultiert dann quasi ein Inhouse GPS.

Davon spricht man schon ewig aber nun hat man wahrscheinlich alle Komponenten beieinander um so etwas sinnvoll umsetzen zu können. Oh, hab ich was von Windows 9 gehört? Ähm nö, gibts doch noch gar nicht.

Allgemein zu Virtual Smart Cards unter Windows: http://technet.microsoft.com/en-us/library/dn593708.aspx
Der Blog-Eintrag der VSC in Windows Phone 8.1 benennt: http://blogs.windows.com/windows/b/business/archive/2014/04/02/building-the-mobile-workplace-with-windows-and-windows-phone.aspx
Das dahinterliegende Management Protokoll: http://msdn.microsoft.com/library/hh880895.aspx
TPMVSCMGR.EXE-Beschreibung: http://technet.microsoft.com/en-us/library/dn593707.aspx

Fehler 80073712 beim Versuch das Windows 8.1 Update Update einzuspielen

12 Mai 2014

Auf einem schon älteren Windows 8.1 System, welches alle Updates von Anfang an mitgemacht hat, wollte das aktuelle Windows 8.1 Update Update nicht eingespielt werden. Es erzeugte immer den Fehler Code 800732712. Die Logdateien waren auch nicht sehr ergiebig.

Aber dann geschah ein Wunder! Nein, das Update installierte sich nach langer Wartezeit nicht von selber, wäre ja zu schön gewesen. Aber Microsoft scheint seine Telemetriedaten ausgewertet zu haben und hat festgestellt, dass das Problem doch viele Kunden betrifft. Durch diesen Artikel http://www.heise.de/newsticker/meldung/Microsoft-verlaengert-Frist-fuer-die-Aktualisierung-auf-Windows-8-1-Update-2187694.html kam dann der Stein ins rollen.

Aufgrund der häufigen Problematik wurden eigens eine Seite für Fehler im Zusammenhang mit dem Windows 8.1 Update Update eingerichtet. http://windows.microsoft.com/en-us/windows-8/install-latest-update-windows-8-1?woldogcb=0. Übrigens, für die Ewiggestrigen, früher fand man solche Infos in der Knowledge Base aber egal.

Auf jeden Fall ist dort genau der obige Fehler beschrieben! Obwohl am Ende nicht alles komplett geklappt hat und es zwischendrin nochmal einen anderen Fehler gab, konnte nach den folgenden Zeilen endlich das KB2919355-Update eingespielt werden.

C:\WINDOWS\system32>dism /online /remove-package /packagename:Package_for_KB2919
355~31bf3856ad364e35~amd64~~6.3.1.14

Tool zur Imageverwaltung für die Bereitstellung
Version: 6.3.9600.16384

Abbildversion: 6.3.9600.16384

1 von 1 werden verarbeitet – Paket "Package_for_KB2919355~31bf3856ad364e35~amd64
~~6.3.1.14" wird entfernt
[==========================100.0%==========================]
Der Vorgang wurde erfolgreich beendet.

C:\WINDOWS\system32>DISM.exe /Online /Cleanup-image /Restorehealth

Tool zur Imageverwaltung für die Bereitstellung
Version: 6.3.9600.16384

Abbildversion: 6.3.9600.16384

[==========================100.0%==========================]
Fehler beim Wiederherstellungsvorgang. Entweder wurde die Reparaturquelle nicht
gefunden, oder der Komponentenspeicher konnte nicht repariert werden.

Fehler: 0x800f081f  *

DISM-Fehler: Es wurde kein Vorgang ausgeführt.
Weitere Informationen finden Sie in der Protokolldatei.

Die DISM-Protokolldatei befindet sich unter "C:\WINDOWS\Logs\DISM\dism.log".

C:\WINDOWS\system32>notepad c:\Windows\logs\DISM\dism.log

C:\WINDOWS\system32>dism /online /cleanup-image /startcomponentcleanup

Tool zur Imageverwaltung für die Bereitstellung
Version: 6.3.9600.16384

Abbildversion: 6.3.9600.16384

[==========================100.0%==========================]
Der Vorgang wurde erfolgreich beendet.

C:\WINDOWS\system32>

* Der obige Fehler 0x800f081f wurde meinerseits großzügig ignoriert. Normalerweise nicht mein Ding aber in diesem Fall will ich es echt nicht wissen.