HeyHo,
ich habe folgendes Problem mit der Ausführung eines Powershell Commands mittels C#.
Folgendes Statement wird bei einem Aufruf mittels
ICollection<PSObject> result = this.powershell.Invoke();
var psCommand = "Get-MailboxStatistics -Identity '{0}\\{1}' | SELECT TotalItemSize"
terminiert. Dies geschieht immer mit der Meldung das er das SELECT-Statement nicht erkannt hat. Dieses Problem bestand schonmal vor ein paar Monaten als ein Kollege mit Powershell-Commands gearbeitet hat welche dieses Pipe-Char beinhalten.
Er kann sich leider nicht mehr erinnern wie er das problem gelöst hat 😦.
Zudem lässt sich das Statement ohne Probleme direkt über die Powershell ausführen
Wisst ihr was zu tun ist? Sicher ist aufjedenfall das es an dem Pipe-Char liegt.
Hallo iced-t89,
hast du mal versucht, dass Pipe Zeichen zu escapen?
Vlt. hilft das ja (ohne es jetzt zu testen).
Gruß
Hey,
ja ich habe versucht das Pipe-Zeichen zu escapen.
var psCommand = "Get-MailboxStatistics -Identity '{0}\{1}' | SELECT TotalItemSize"
Dies hat aber leider nix am Verhalten geändert.
Mach doch mal @ for den string anstatt direct zu escapen.
Hallo iced-t89,
"Anstatt" ist vielleicht nicht das richtige Wort. Allerdings ist schon richtig, dass man darauf achten muss, was man überhaupt auf welcher Ebene escapen will. Mit "|" in einem normalen String wird auf C#-Ebene escaped, was aber überhaupt nicht nötig ist und nichts bringt, da "|" sowieso für sich selber steht. Wenn man auf Powershell-Ebene escapen will, muss man schon "\|" schreiben oder eben @"|" (wobei man bei @ darauf achten muss, dass alle im String vorkommenden Backslashes davon betroffen sind).
Ich würde allerdings eher darauf bauen, dass deinem Kollegen noch einfällt, was er damals gemacht hat. Auf jeden Fall solltest du eine Lösung posten, wenn du eine findest.
herbivore