POWERSHELL FUNCTION REMOTE AUSFÜHREN

Wie kann eine in einem Powershell Skript definierte Funktion in einer Remote Session ausgeführt werden?

Dazu ein Beispiel:

Die folgende Funktion verwendet das PSDrive AD, um die Access Control List eines  Active Directory Objects zu ermitteln. Dazu muss die Funktion remote auf einem Domain Controller ausgeführt werden oder das Active Directory Module für die Pwershell muss auf dem lokalen Rechner als Remoteverwaltungstool installiert sein.

Function get-ADACL { Param ([String]$DistinguishedName) Import-module Activedirectory$path = "AD:\$distinguishedName"return get-acl $path }

Wir wollen die Funktion aber ausführen können, ohne dass das Active Directory Modul installiert ist. Auch wenn das Modul vorhanden ist, unterliegt die Funktion der Einschränkung, dass die ACL nicht von einem bestimmten Domain Controller ermittelt werden kann.

Ohne das Modul oder wenn die ACL von einem bestimmten Domain Controller ermittelt werden soll, bleibt eine Remoteaufführung in einer PSSession. Dazu übergibt man den Code der Funktion als Scriptblock und den Distinguishedname als Parameter über die Argumentlist des Cmdlets invoke-command:

$session = new-pssession -computername "DC001.foo.local"$distinguishedName = "ou=Managed Objects,dc=foo,dc=local"invoke-Command -session
$session -scriptblock $ScriptBlock -argumentlist $distinguishedName

Wie wird der ScriptBlock ermittelt? Wenn eine Funktion definiert wurde, wird sie dem PSDrive Function hinzugefügt und kann mit get-item ausgelesen werden:

Get-item Function:\get-ADACL

Das Objekt, dass get-item liefert, hat u.a. die Eigenschaft ScriptBlock, die den Code der Funktion als ausführen Powershell Scriptblock bereitstellt. Damit dann dem Cmdlet invoke-Command der Scriptblock übergeben werden und zur Ausführung aus einem Remote Computer gebracht werden. Parameter werden in der Reihenfolge ihrer Angabe im Parameterblock des Scriptblocks in einem Array über die Argumentlist übertragen.

Hier das komplette Beispiel:

# Definition der FunktionFunction get-ADACL {Param ([String]$DistinguishedName)Import-module Activedirectory$path "AD:\$distinguishedName"return get-acl $path}## Verwenden der Funktion in einer Remote Session#$session new-pssession -computername "DC001.foo.local"$distinguishedName "ou=Managed Objects,dc=foo,dc=local"$scriptBlock = (get-item Function:\get-ADACL).scriptblockinvoke-Command -session $session -scriptblock $ScriptBlock -argumentlist $distinguishedName

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn
Share on pinterest
Pinterest
Share on email
Email
Scroll to Top