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- ...
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
Der User kann also das skript auf dem Client starten und eine cred Variable anlegen + übergeben (richtig, funktioniert)
Oder er startet die Powershell direkt als domain\adminuser und sagt dann nur
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
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- ...
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}
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 426317
Url: https://administrator.de/forum/psremoting-zweiter-hop-pruefen-auf-mitgegebenen-parameter-426317.html
Ausgedruckt am: 06.04.2025 um 20:04 Uhr
2 Kommentare
Neuester Kommentar
Moin,
ich würde das Ganze in ein Skript packen und den Username zu einem Pflichtparameter machen.
hth
Erik
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