Blog-Kategorie
Data Center

Hier bloggen sepago Experten über: Data Center

| |

WSUS Service stopped – do not install KB3148812 on Configuration Manager or WSUS servers

Last week Microsoft released Patch KB3148812 on Windows update. So this week we installed it on a customer ConfigMgr Sites (1x CAS, 2x Primary) due to an maintenance job.
The KB article says something about enabling ESD encryption for WSUS:

https://support.microsoft.com/en-us/kb/3148812

So here is my advice:

DO NOT INSTALL THIS UPDATE on WSUS or SCCM Servers!!!

At our environment it broke the WSUS Service completely.

| |

PowerShell: Sprachkonstrukte (For-Schleife) – Part 17.2

4.4.2     For-Schleife

Die For-Schleife ist eine einfache numerische Schleife. In der PowerShell ist sie als eine ausdrucksorientierte Schleife implementiert. Das hört sich kompliziert an, bedeutet aber nur, dass sie auch Pipelines verarbeiten kann. Die For-Schleife hat die folgende Syntax:

For
(

For Schlüsselwort

<Pipeline1>;
<Pipeline2>;
Initialisierungspipeline
Testpipeline

<Pipeline3>   
)   
{
Inkrementpipeline

<StatementList>

| |

PowerShell: Rückgabewerte von Funktionen, Kommentare und Hilfe – Part 16

Solange eine Funktion Befehle enthält, welche eine Bildschirmausgabe tätigen (und das tun fast alle Befehle), ist eine dedizierte Rückgabe von Werten aus einer Funktion nicht notwendig:

?

1
2
3
4
5
6
7
8

1.  PS X:\Temp> function Get-Density([Int32]$Mass, [Int32]$Volume)
2.  >> {$Mass/$Volume}
3.  >>
4.  Get-Density 40 100
0,4
5.  $a = Get-Density 33 50
6.  $a
0,66

 

Eine direkte Zuweisung einer Funktion zu einer Variablen speichert dort die Ausgabe der Funktion (ausgenommen sind hier Ausgaben,

| |

PowerShell: Die Parametersets – Part 15.3

4.1.6     Parametersets

Die erweiterte Parameterdefinition erlaubt es auch, sogenannte Parametersets zu definieren. Parametersets können mit dem Überladen von Funktionen in C# verglichen werden. Das Überladen von Funktionen hat zur Folge, dass eine Funktion unterschiedliche Signaturen*  haben kann, wobei jede Signatur ein abweichendes (oder zum Teil auch ein völlig anderes) Verhalten der Funktion bewirkt. Viele CMDLets der PowerShell verwenden diese Funktionalität (z.B. Invoke-Command implementiert sieben Parametersets, Test-Connection drei, etc.). Die erweiterte Parameterdefinition wird daher auch als CMDLet-Binding bezeichnet.

| |

PowerShell: Die Param Anweisung, Erweiterte Parameterdefinition (Advanced Parameters) – Part 15.2

4.1.4  Die Param  Anweisung

Die Definition von Parametern für Skripte muss etwas anders funktionieren, als für die Funktionen, da bei einem Skript die Möglichkeit fehlt, die Parameter in Klammern irgendwo einzugeben. Geschähe das einfach am Anfang des Skriptes, wäre das nicht eindeutig und könnte nicht interpretiert werden, da die Definition von Parametern optional ist. In Skripten wird deshalb für die Parameterdefinition die Param Anweisung verwendet. Es muss der erste Befehl in einem Skript sein (davor sind lediglich Kommentare erlaubt).

| |

PowerShell: Response is slow after each command on command line: get-childitem, start a script, dir, etc.

From one day to another I got some „affects” using PowerShell. I got a delay of 6 seconds after each command I executed. Also for starting a script. For example:

Get-ChildItem

(delay of 6 seconds)

<directory>

I used Microsofts Process Monitor (https://technet.microsoft.com/de-de/sysinternals/processmonitor.aspx) to find the reason. Here is my result:

Accessing the history file in „%AppData%\Microsoft\Windows\PowerShell\PSReadline“ causes this delay (for whatever reason).

| |

PowerShell: Typisierung von Parametern, Initialisierung von Parametern, Switchparameter – Part 15.1

4.1.1 Typisierung von Parametern

Die Definition von Parametern innerhalb einer Funktion kann im einfachsten Fall ohne Angabe eines Datentyps erfolgen. In vielen Fällen ist das auch völlig ausreichend. Hin und wieder ist es jedoch sinnvoll, einen bestimmten Datentyp eines Parameters zu erzwingen. Besonders dann, wenn an diesem Parameter innerhalb der Funktion Operationen durchgeführt werden, welche nur mit einem bestimmten Datentyp funktionieren oder sinnvolle Ergebnisse ergeben und der Typ des übergebenen Arguments nicht in den erwarteten Datentyp konvertiert werden kann (was die PowerShell selbständig versuchen würde).

| |

PowerShell: Skripte, Funktionen und Skriptblöcke (Parameter und Argumente) – Part 15

4.1 Parameter und Argumente

Ohne die Möglichkeit, Argumente an Funktionen und Skripte zu übergeben, wäre der Nutzen solcher sehr gering. Die Übergabe von Argumenten funktioniert bei Funktionen und Skripten gleich, daher werden die Zusammenhänge vorerst anhand von Funktionen erklärt.
Im ersten Schritt soll die informelle Argumentenübergabe (positional parameters) behandelt werden. Alle Argumente, die an eine Funktion übergeben werden, werden in einem Array Namens $Args gespeichert. Über den Ausdruck $Args.Count innerhalb der Funktion kann die Anzahl der übergebenen Argumente ermittelt werden.

| |

Last Logon Time / Authentication of a AD or Service User Account – #Powershell

Sometimes it is helpful to know when an AD user or an AD function account has been authenticated the last time. After some failed attempts with „LastLogonDate“ I found the correct value in the „LastLogon“ property. This value is not replicated between the domain controllers. In addition, it is a not a readable date (it’s in ticks).

The following script determines the latest authentication of an account on all domain controller in a domain (one-liner):

1

([DateTime][long]($(ForEach ($dc in ((get-addomaincontroller -filter *).name)){(Get-ADUser -Identity „<userlogonname>“ -Properties „LastLogon“ -server $dc).LastLogon}) | Measure -Maximum).Maximum).AddYears(1600)

Or somewhat clearer:

1
2
3
4
5
6

([DateTime][long](
    $(ForEach ($dc in ((get-addomaincontroller -filter *).name))
    {
        (Get-ADUser -Identity „<userlogonname>“ -Properties „LastLogon“ -server $dc).LastLogon
    }
) | Measure -Maximum).Maximum).AddYears(1600)

Sample:

See also:

Christopher Ream – Understanding the AD Account attributes – LastLogon,

| |

Letztes Anmeldedatum/Authentifizierung eines AD- oder Service Benutzers #Powershell

Manchmal ist es hilfreich zu wissen, wann ein AD-Benutzer oder Funktionsaccount das letzte Mal authentifiziert wurde. Nach einigen Fehlversuchen mit  „LastLogonDate“ habe ich mit „LastLogon“ den richtigen Wert gefunden. Dieser Wert wird allerdings nicht zwischen den Domain Controllern repliziert. Zusätzlich liegt er nummerisch vor (Ticks).

Das folgende Skript ermittelt die aktuellste Authentifizierung über alle Domänen Controller einer Domäne hinweg (als Einzeiler):

1

([DateTime][long]($(ForEach ($dc in ((get-addomaincontroller -filter *).name)){(Get-ADUser -Identity „<userlogonname>“ -Properties „LastLogon“ -server $dc).LastLogon}) | Measure -Maximum).Maximum).AddYears(1600)

Oder etwas übersichtlicher:

1
2
3
4
5
6

([DateTime][long](
    $(ForEach ($dc in ((get-addomaincontroller -filter *).name))
    {
        (Get-ADUser -Identity „<userlogonname>“ -Properties „LastLogon“ -server $dc).LastLogon
    }
) | Measure -Maximum).Maximum).AddYears(1600)

Beispiel:

Siehe auch:

Christopher Ream –