netzwerkdude
Goto Top

PSRemoting - zweiter Hop - prüfen auf mitgegebenen Parameter

Moin,

hab ein Skript (skript.ps1) auf Server1 das verschiedene Sachen macht, u.a. eine Datei auf Server2 anlegen - das funktioniert wunderbar wenn man das Skript auf Server1 ausführt.
Wenn man sich jedoch von einem Client auf Server1 mittels PowerShell Remoting verbindet, scheitert es beim Hop auf Server2 - soweit auch okay, das ist "By-Design so", siehe:
https://docs.microsoft.com/de-de/powershell/scripting/learn/remoting/ps- ...

skm_c25819030812010

Ich hab das also im skript.ps1 mit der "pass-credentials-inside-an-invoke-command-script-block" Idee gelöst - soweit sogut und es funktioniert auch - sofern der Verbindung beim 1 Hop die $Cred mitgegeben wird, nochmal das Beispiel aus dem Link

# This works without delegation, passing fresh creds
# Note $Using:Cred in nested request
$cred = Get-Credential Contoso\Administrator
Invoke-Command -ComputerName ServerB -Credential $cred -ScriptBlock {
    hostname
    Invoke-Command -ComputerName ServerC -Credential $Using:cred -ScriptBlock {hostname}
}

Der User kann also das skript auf dem Client starten und eine cred Variable anlegen + übergeben (richtig, funktioniert)
$cred = Get-Credential domain\adminuser
Invoke-Command -ComputerName Server1 -ScriptBlock {C:\skripte\skript.ps1} -Credential $cred

Oder er startet die Powershell direkt als domain\adminuser und sagt dann nur
Invoke-Command -ComputerName Server1 -ScriptBlock {C:\skripte\skript.ps1}
Das funktioniert bis zu dem Punkt an dem das Skript via $Using:cred Dateien auf dem Server2 anlegen will, was scheitert da es kein $cred gibt (logisch)

Nun die Frage:

Wie kann ich im skript.ps1 prüfen ob der Aufrufer eine $cred mitgab?
Beim Remoting scheint $MyInvokation leer zu sein + Get-Host liefert auf den ersten blick auch keine Infos

Content-Key: 426317

Url: https://administrator.de/contentid/426317

Ausgedruckt am: 29.03.2024 um 14:03 Uhr

Mitglied: erikro
Lösung erikro 08.03.2019 aktualisiert um 12:39:33 Uhr
Goto Top
Moin,

ich würde das Ganze in ein Skript packen und den Username zu einem Pflichtparameter machen.

param(

     [parameter(Mandatory=$true)]
     $username

)


$cred = Get-Credential $username # Eventuell hier noch die Domain voranstellen

if($cred) {
Invoke-Command -ComputerName ServerB -Credential $cred -ScriptBlock {
    hostname
    Invoke-Command -ComputerName ServerC -Credential $Using:cred -ScriptBlock {hostname}
}
}
else {

write-error "Authentifizierung fehlgeschlagen!"  

}

hth

Erik
Mitglied: NetzwerkDude
NetzwerkDude 08.03.2019 um 14:09:02 Uhr
Goto Top
Ist ein Workaround, soweit i.O.
Ich lass es noch etwas ungelöst, evtl. hat ja jemand ne Idee auf die Ursprungsfrage