powershell

Delete Older Files

Written by  on August 11, 2019
$Path = "C:\temp"
$Daysback = "-30"
 
$CurrentDate = Get-Date
$DatetoDelete = $CurrentDate.AddDays($Daysback)
Get-ChildItem $Path | Where-Object { $_.LastWriteTime -lt $DatetoDelete } | Remove-Item

Powershell: Delete files older than

Disable new calender

Written by  on Juni 19, 2019
Set-ItemProperty -Path Microsoft.PowerShell.Core\Registry::HKEY_USERS\S-1-5-21-xxxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxx\Software\Policies\Microsoft\office\16.0\outlook\options\webcal -Name disable -Value 1

Drucker Dienst Neustarten

Written by  on Mai 8, 2019

Manchmal mag Windows erst was zum Drucker schicken, wenn man den spooler Service neu gestartet hat.
Am einfachsten über die Powershell (muss mit Admin Rechten laufen!)

restart-service -name spooler

Windows 10 Diagnose Daten

Written by  on Dezember 23, 2018

In c’t 2019, Heft 1 wird im Artikel „Telefonierverbot, Windows 10: Telemetrie lahmlegen, Privatsphäre schützen“ beschrieben, dass man einfach den Dienst DiagTrack – „Benutzererfahrung und Telemetrie im verbundenen Modus“ – über die Dienste (services.msc) abdrehen kann. Und schon telefoniert Windows nicht mehr nach Hause.
In der englischen Sprachversion heißt der Dienst „Connected User Experiences and Telemetry“!
Überprüfen ob man den Richtigen Eintrag gefunden hat, kann man an der Zeile „Path to executeable“ – hier muss „C:\WINDOWS\System32\svchost.exe -k utcsvc -p“ stehen.
Auf der Powershell kann der Dienst einfach deaktiviert werden.

Set-Service DiagTrack -StartupType Disabled -Status Stopped

Das muss aber nach einem Funktions-Update wiederholt werden. Bei Problemen mit dem Befehel: Die Powershell als Admin starten. Wenn stoppen nicht geht, reicht auch Disabled und Reboot!

Registry bearbeiten

Written by  on Dezember 6, 2018

Einträge in der Windows Registry lassen sich auch mit der Powershell einfach bearbeiten. Das kann etwa sinnvoll sein, wenn man von einem lokalen Administrator Account Einträge für Benutzer setzen muss. Problem dabei ist, dass die Powershell nur eigene Laufwerke für HKCU: und HKLM: erstellt. Damit kommt man nur in die Einstellungen vom Current User oder von Local Machine.
Glücklicherweise werden unter Accessing HKEY_USERS With Powershell
gleich verschiedene Methoden vorgestellt wie das trotzdem funktioniert.
Sinnvoll scheint mir, mit

New-PSDrive HKU Registry HKEY_USERS

ein neues Laufwerk anzulegen oder direkt ohne Powershell Laufwerksbuchstaben einen Wert zu setzen

Set-ItemProperty -Path Microsoft.PowerShell.Core\Registry::HKEY_USERS\S-1-5-21-1234567890-xxxxxxxxxx-yyyyyyyyyy-zzzzz\Software\Microsoft\Windows\CurrentVersion\Policies\System -Name Wallpaper -Value C:\Pictures\cats.jpg

Powershell: Get-ADComputer

Written by  on Juli 20, 2018

Eine Liste von Computerobjekten aus dem Active Directory holen. Nur Rechnernamen anzeigen

Get-ADComputer -Filter 'CN -Like "Prefix*"' | Select -Expand Name

PUAProtection

Written by  on April 16, 2018

Windows Defender, der in Windows verbaute Virenschutz kann noch etwas mehr. Etwa vor PUAs (Potentually Unwanted Applications) schützen. Aktivieren kann man das Feature unter Windows 10 auf einer Powershell mit Administratorrechten:

Set-MpPreference -PUAProtection 1

Prüfen der gesetzten Werte

Get-MpPreference

Das sollte auch vor nicht wirklich bedrohlicher Software schützen, etwa Mining Tools.

Quelle: c’t 2018, Heft 9, S. 86f; Praxis | Crypto-Miner: Parasiten loswerden

Powershell Stringverwendung

Written by  on April 10, 2017

Ein Script verhält sich anders auf Windows 2008 und Windows 2012? Scheinbar hat sich die Stringverarbeitung leicht verändert. Wo unter 2012 eine Variable aufgelöst wird, passiert das unter 2008 nicht:

Windows 2008 R2

$A="IchBinEineVariable"

echo "-p$A"
-pIchBinEineVariable

echo -p"$A"
-p"$A"

echo -p$A
-p$A

Windows 2012 R2

$A="IchBinEineVariable"

echo "-p$A"
-pIchBinEineVariable

echo -p"$A"
-pIchBinEineVariable

echo -p$A
-p$A

Powershell 32 Bit vs. 64 Bit

Written by  on März 21, 2017

Wenn einem Certutil.exe bei manchen Parametern mitteilt, dass manche Klassen nicht geladen werden könne, ist möglicherweise die 32 Bit vs. 64 Bit Problematik daran schuld.

C:\windows\System32\certutil.exe -view -restrict "Issued Common Name=<CN>, Disposition=20" -out "RequestID,RequesterName"  -config "<CAHostName>\<CAName>"
CertUtil: -view command FAILED: 0x80040154 (-2147221164)
CertUtil: Class not registered

Wie tritt das auf, wenn ich doch ein 64 Bit Betriebssystem habe? Und wie stelle ich fest, was ich für eine PowerShell am laufen habe?
Eine „normale“ PowerShell:

> [Environment]::Is64BitProcess
True

Die „gleiche“ PowerShell geöffnet in MobaXterm:

> [Environment]::Is64BitProcess
False

Erst Version 10 von MobaXterm soll das Problem beheben und auf 64 Bit Systemen die korrekte PowerShell öffnen.

Interessantes Detail am Rande, eine 64 Bit PowerShell liegt unter C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe die 32 Bit Version ist zu finden unter C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe!

Empty Array in Powershell

Written by  on September 30, 2016

Ein leeres Array braucht man z.B. damit eine Schleife die auf das Array zugreift gar nicht erst durchläuft.

Initialisiert wird es mit

$array = @()

Ein Array allgemein definieren

$array="wert1","wert2","wert3"

Die Schleife dazu sieht so aus

foreach ($element in $array)
{
  print ("$element");
}