Categories
PowerShell

Auflösung von Variablen in der PowerShell gezielt steuern

In diesem Tipp geht es um das Maskieren von Variablen und deren Auflösung in der PowerShell. Wie kann ich also zum Beispiel den Text $VAR ausgeben, ohne dass der Inhalt der Variable $VAR angezeigt wird?
(Unter Auflösung einer Varibale wird die Anzeige des Inhaltes/Wertes der Variablen verstanden.)

Beispiel 1

$a = "Das ist die Variable a"
$b = "DAS IST b""$a und $b werden aufgelöst"

Das ist die Variable a und DAS IST b werden aufgelöst

Beispiel 2
In Literalstrings (umgeben mit einfachen Hochkomma) sollen Variablen nicht aufgelöst werden.

'$a und $b werden nicht aufgelöst'

$a und $b werden nicht aufgelöst

"`$a wird nicht aufgelöst, $b schon"

$a wird nicht aufgelöst, Das ist b schon

Beispiel 3

"`$a hat den Inhalt: $a"

$a hat den Inhalt: Das ist die Variable a
Der Trick im letzten Beispiel ist der Back-Tick ` (neben ß, mit SHIFT)

Categories
PowerShell

Powershell Befehle mit bestimmten Parametern ermitteln

Ich möchte kurz erläutern, wie ein PowerShell Befehl gefunden werden kann, der einen bestimmten Parameter besitzt. Dieser Tipp erscheint auf den ersten Blick nicht sonderlich sinnvoll. An einem Beispiel wird aber schnell die sinnvolle Verwendung deutlich. Insbesondere Anfänger, welche die PowerShell erlernen, werden diese Abfrage schnell zu schätzen wissen.

Ich möchte zum Beispiel alle Befehle finden, die etwas rekursiv durchsuchen (Dateien/Verzeichnisse/Regitry/etc):

Get-Command|where { $_.Parameters.Keys -contains "recurse" }

CommandType Name Definition
———– —- ———-
Alias copy Copy-Item
Cmdlet Copy-Item Copy-Item [-Path] [[-Destination]
Alias cp Copy-Item
Alias cpi Copy-Item
Alias del Remove-Item
Alias dir Get-ChildItem
Alias erase Remove-Item
Alias gci Get-ChildItem
Cmdlet Get-ChildItem Get-ChildItem [[-Path] ] [[-Filter]
Cmdlet Get-WmiObject Get-WmiObject [-Class] [[-Property]
Alias gwmi Get-WmiObject
Alias ls Get-ChildItem
Alias rd Remove-Item
Cmdlet Remove-Item Remove-Item [-Path] [-Filter
Alias ri Remove-Item
Alias rm Remove-Item
Alias rmdir Remove-Item

Ähnlich hilfreich kann die Suche nach Befehlen, die sich auf Windows Dienste (Service) oder die Befehle mit Rechnernamen als Parameter enthalten, sein:

Get-Command | Where-Object { $_.parameters.keys -Match "Service"}

Get-Command | Where-Object { $_.parameters.keys -Match "ComputerName"}

Categories
PowerShell Windows

Die Ausführung von PowerShell Skripten zulassen

PowerShell Skripte dürfen in Windows standardmäßig nicht ausgeführt werden. Windows verweigert die Ausführung.
Öffnen Sie die Windows PowerShell mit dem Kontextmenübefehl Als Administrator ausführen (rechter Mausklick auf das PowerShell Icon) und geben Sie den Befehl

PS> Set-ExecutionPolicy RemoteSigned

ein. Ich empfehle grundsätzlich die Eingabe von RemoteSigned anstatt Unrestricted.

RemoteSigned erlaubt im Gegensatz zu Unrestricted die Ausführung von lokal erstellten PowerShell Skripten. Diese Skriptdateien müssen nicht signiert werden. Achtung: Sollten die Skripte auf einem anderen Rechner erstellt worden sein, so verweigert Windows die Ausführung unter Umständen (wenn der Rechner nicht in einer vertrauenwürdigen Umgebung war (siehe Internet Explorer Zones).

Mit dem Befehl

Set-ExecutionPolicy Allsigned

müssen alle Skripte digital signiert werden. Ob dies notwendig ist, hängt von den Sicherheitsanforderungen an den Server bzw. der Anwendung ab.

Categories
PowerShell

Zugriff auf Active Directory mit PowerShell

Um Zugriff auf das Microsoft Windows Active Directory zu bekommen, ist das Modul ActiveDirectory erforderlich. Dieses kann über den Server Manager eingefügt werden.

Vorgehensweise:
Microsoft Windows Server Manager starten, im Baum links Features auswählen, dann im Hauptfenster Add Features anklicken.
Im folgenden Dialogfenster

  • Remote Server Administration Tools
  • Role Administration Tools
  • AD DS and AD LDS Tools

aufklappen.
ActiveDirectory Modul
Active Directory module for Windows PowerShell anklicken (Haken setzen)
Next anklicken. Eventuell ist der Installation des .Net Frameworks zuzustimmen. Fertig.

Das Modul ActiveDirectory ist jetzt verfügbar:

PS > Get-Module -ListAvailable
ModuleType Name ExportedCommands
———- —- —————-
Manifest ActiveDirectory {}

Categories
PowerShell

PowerShell Module

Sind bestimmte Module auf dem Windows PC vorhanden? Eine Anzeige der installierten Module liefert der Befehl Get-Module.

PS > Get-Module -ListAvailable

ModuleType Name ExportedCommands
---------- ---- ----------------
Manifest ADRMS {}
Manifest AppLocker {}
Manifest BestPractices {}
Manifest BitsTransfer {}
Manifest PSDiagnostics {}
Manifest ServerManager {}
Manifest TroubleshootingPack {}

PS > Get-Module Hyper-V

Keine Ausgabe, wie beim letzten Kommando, bedeutet, dass dieses Modul nicht installiert ist oder man sich vertippt hat.

Categories
PowerShell

Powershell Version

Oft ist es relevant zu wissen, welche PowerShell Version installiert ist. Dies kann durch Ausgabe der Variablen $PSVersionTable.PSVersion erfolgen. In PowerShell 1.0 gibt es diese Variable noch nicht.

PS > $PSVersionTable.PSVersion

Major Minor Build Revision
----- ----- ----- --------
2 0 -1 -1

In diesem Fall liegt Version 2.0 vor.