Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Powershell: String in andere Session übergeben

Frage Entwicklung Batch & Shell

Mitglied: beta-way-of-life

beta-way-of-life (Level 1) - Jetzt verbinden

15.10.2013, aktualisiert 12:05 Uhr, 3197 Aufrufe, 8 Kommentare, 1 Danke

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.
01.
 $a = "wbadmin blablabla"
Nun wird eine neue Session erzeugt und ich versuche den String $a auszuführen.
01.
Start-Progress {Invoke-Expression -Command $a}
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:
01.
function Start-Progress { 
02.
  param( 
03.
    [ScriptBlock] 
04.
    $code 
05.
06.
   
07.
  $newPowerShell = [PowerShell]::Create().AddScript($code) 
08.
  $handle = $newPowerShell.BeginInvoke() 
09.
   
10.
  while ($handle.IsCompleted -eq $false) { 
11.
    Write-Host '.' -NoNewline 
12.
    Start-Sleep -Milliseconds 500 
13.
14.
   
15.
  Write-Host '' 
16.
   
17.
  $newPowerShell.EndInvoke($handle) 
18.
   
19.
  $newPowerShell.Runspace.Close() 
20.
  $newPowerShell.Dispose() 
21.
}
Ich hoffe das ist einigermaßen verständlich.
Vielleicht hat jemand eine Idee.

LG Joe
Mitglied: colinardo
15.10.2013, aktualisiert um 13:52 Uhr
Hallo Joe,
mach den Aufruf der function doch einfach so, dann klappt 's bei meinen Tests
Start-Progress -code $a
Grüße Uwe
Bitte warten ..
Mitglied: beta-way-of-life
15.10.2013 um 14:11 Uhr
Zitat von colinardo:
Hallo Joe,
mach den Aufruf der function doch einfach so, dann klappt 's bei meinen Tests
> Start-Progress -code $a 
> 
Grüße Uwe

Hallo,

danke, aber wie bekomm ich so die Invoke-Expression hin?

Lg
Bitte warten ..
Mitglied: colinardo
15.10.2013 um 14:15 Uhr
brauchst du doch nicht. Der Befehl wird doch direkt als String an AddScript($code) übergeben und als Befehl interpretiert.
Das wäre doch doppelt gemoppelt.

Grüße Uwe
Bitte warten ..
Mitglied: beta-way-of-life
15.10.2013 um 14:20 Uhr
Zitat von colinardo:
brauchst du doch nicht. Der Befehl wird doch direkt als String an AddScript($code) übergeben und als Befehl
interpretiert.
Das wäre doch doppelt gemoppelt.

Grüße Uwe

Hab ich versucht, aber ich scheine zu blöd zu sein... ;)

01.
$wbadminbefehl = "wbadmin start backup -backuptarget:$verzeichnis -include:$volumes -vssfull -allCritical -quiet >> $log" 
02.
Start-Progress -code $wbadminbefehl
Ergibt:

01.
Start-Progress : Die Argumenttransformation für den Parameter "code" kann nicht verarbeitet werden. Der Wert "wbadmin start backup  
02.
-backuptarget:\\backup01\backup\joe\2013-10-15_14-17_joe01_windows-sicherung -include:C: -vssfull -allCritical -quiet >>  
03.
\\backup01\backup\joe\2013-10-15_14-17_joe01_windows-sicherung\windows-sicherung.log" vom Typ "System.String" kann nicht in den Typ "System.Management.Automation.ScriptBlock"  
04.
konvertiert werden. 
05.
In C:\Scripts\windows-sicherung-flexibel.ps1:222 Zeichen:38 
06.
+                 Start-Progress -code $wbadminbefehl 
07.
+                                      ~~~~~~~~~~~~~~ 
08.
    + CategoryInfo          : InvalidData: (:) [Start-Progress], ParameterBindingArgumentTransformationException 
09.
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,Start-Progress
Bitte warten ..
Mitglied: colinardo
15.10.2013, aktualisiert um 14:32 Uhr
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.
01.
$wbadminbefehl = {wbadmin start backup -backuptarget:$verzeichnis -include:$volumes -vssfull -allCritical -quiet >> $log} 
02.
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
Bitte warten ..
Mitglied: beta-way-of-life
15.10.2013, aktualisiert um 15:00 Uhr
Danke, jetzt ist der Fehler weg.
Funktionieren tuts trotzdem nicht.... Jetzt wird gar kein wbadmin mehr gestartet.

01.
            if ($tempcopy -eq $true) { 
02.
                wbadmin start backup -backuptarget:$tempcopyverzeichnis -include:$volumes -vssfull -allCritical -quiet >> $log 
03.
04.
            elseif ($tempcopy -eq $false) { 
05.
                $wbadminbefehl = {wbadmin start backup -backuptarget:$verzeichnis -include:$volumes -vssfull -allCritical -quiet >> $log} 
06.
                Start-Progress -code $wbadminbefehl 
07.
                #wbadmin start backup -backuptarget:$verzeichnis -include:$volumes -vssfull -allCritical -quiet >> $log 
08.
09.
            else { 
10.
                echo Ungültiger tempcopy Wert! >> $log 
11.
            }
Mit dem Auskommentierten Befehl funktionierts Problemlos.... So leider nicht. Wird einfach übersprungen.
Bitte warten ..
Mitglied: colinardo
15.10.2013, aktualisiert um 15:33 Uhr
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.
01.
function Start-Progress { 
02.
  param( 
03.
    $code 
04.
05.
  ... 
06.
.... 
07.
... 
08.
09.
 
10.
$wbadminbefehl = "wbadmin start backup -backuptarget:$verzeichnis -include:$volumes -vssfull -allCritical -quiet >> $log" 
11.
Start-Progress -code $wbadminbefehl
...oder als weitere Option via [ScriptBlock]::Create("deinBefehl") definieren
01.
function Start-Progress { 
02.
  param( 
03.
    [ScriptBlock] $code 
04.
05.
   
06.
 .... 
07.
.... 
08.
09.
 
10.
$wbadminbefehl = [ScriptBlock]::Create("wbadmin start backup -backuptarget:$verzeichnis -include:$volumes -vssfull -allCritical -quiet >> $log") 
11.
Start-Progress -code $wbadminbefehl
Grüße Uwe
Bitte warten ..
Mitglied: beta-way-of-life
15.10.2013 um 15:43 Uhr
Bestens, jetzt läuft es.
Vielen Dank.
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
gelöst PowerShell String zerlegen in Array, DataTable, Hashtable speichern (7)

Frage von derhoeppi zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell String Suchen mit Wildcard und Ersetzen (6)

Frage von herrmanndominic zum Thema Batch & Shell ...

Batch & Shell
Powershell - In Textdatei suchen und ersetzen (1)

Frage von Raaja89 zum Thema Batch & Shell ...

Batch & Shell
gelöst PowerShell Domain Join (2)

Frage von Patrick-IT zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...