Powershell: String in andere Session übergeben
Hallo Leute,
ich versuche eine Variable in eine zweite Session zu übergeben.
Grund ist folgender:
Für eine Fortschrittsanzeige wird eine neue Powershell Session erstellt.
Ich versuche einen String zu übergeben und diesen dann als Befehl auszuführen.
Nun wird eine neue Session erzeugt und ich versuche den String $a auszuführen.
Dies klappt natürlich nicht weil die Variable $a nicht existiert bzw. leer ist.....
Ich würde gerne wissen wie/ob ich das zum laufen bringe. ;)
Hier noch der Code zum erzeugen der neuen Session:
Ich hoffe das ist einigermaßen verständlich.
Vielleicht hat jemand eine Idee.
LG Joe
ich versuche eine Variable in eine zweite Session zu übergeben.
Grund ist folgender:
Für eine Fortschrittsanzeige wird eine neue Powershell Session erstellt.
Ich versuche einen String zu übergeben und diesen dann als Befehl auszuführen.
$a = "wbadmin blablabla"
Start-Progress {Invoke-Expression -Command $a}
Ich würde gerne wissen wie/ob ich das zum laufen bringe. ;)
Hier noch der Code zum erzeugen der neuen Session:
function Start-Progress {
param(
[ScriptBlock]
$code
)
$newPowerShell = [PowerShell]::Create().AddScript($code)
$handle = $newPowerShell.BeginInvoke()
while ($handle.IsCompleted -eq $false) {
Write-Host '.' -NoNewline
Start-Sleep -Milliseconds 500
}
Write-Host ''
$newPowerShell.EndInvoke($handle)
$newPowerShell.Runspace.Close()
$newPowerShell.Dispose()
}
Vielleicht hat jemand eine Idee.
LG Joe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 219418
Url: https://administrator.de/contentid/219418
Ausgedruckt am: 22.11.2024 um 17:11 Uhr
8 Kommentare
Neuester Kommentar
ach OK ich seh den Fehler, du hast den Parameter $code als Typ [ScriptBlock] definiert, dann musst du um den eigentlichen Befehl geschweifte Klammern setzen anstatt Anführungszeichen.
oder als Alternative in deiner Function das [ScriptBlock] entfernen, dann kannst du die Variable mit Anführungszeichen verwenden.
Grüße Uwe
$wbadminbefehl = {wbadmin start backup -backuptarget:$verzeichnis -include:$volumes -vssfull -allCritical -quiet >> $log}
Start-Progress -code $wbadminbefehl
oder als Alternative in deiner Function das [ScriptBlock] entfernen, dann kannst du die Variable mit Anführungszeichen verwenden.
Grüße Uwe
Die Variablen im Script-Block werden nicht aufgelöst, da müsstest du diese vorher mit Scope definieren. Am einfachsten machst du es wie ich oben als Alternative geschrieben habe :
[ScriptBlock] aus der Function entfernen und den Befehl nur in Anführungszeichen setzen.
...oder als weitere Option via
Grüße Uwe
[ScriptBlock] aus der Function entfernen und den Befehl nur in Anführungszeichen setzen.
function Start-Progress {
param(
$code
)
...
....
...
}
$wbadminbefehl = "wbadmin start backup -backuptarget:$verzeichnis -include:$volumes -vssfull -allCritical -quiet >> $log"
Start-Progress -code $wbadminbefehl
[ScriptBlock]::Create("deinBefehl")
definierenfunction Start-Progress {
param(
[ScriptBlock] $code
)
....
....
}
$wbadminbefehl = [ScriptBlock]::Create("wbadmin start backup -backuptarget:$verzeichnis -include:$volumes -vssfull -allCritical -quiet >> $log")
Start-Progress -code $wbadminbefehl
Grüße Uwe