2017-06-09 3 views
0

Ich versuche, eine einfache Dateioperationen API für Remote-Computer mit PowerShell von C# zu erstellen.PowerShell Remove-Item mit PSSession

Ich bin zu Copy-Item zu und von entfernten Maschine in der Lage, indem zuerst New-PSSession und Ausführen den Copy-Item cmdlet mit einem zusätzlichen Parameter -ToSession/-FromSession $s zu schaffen, in dem eine Variable $s vom New-PSSession erzeugt wird.

Ich bin auf der Suche nach einer Möglichkeit, das gleiche mit dem Entfernen, Hinzufügen und Verschieben von Elementen zu tun, aber ich bin bereits mit Entfernen Teil fest. MSDN gibt keinen bestimmten Parameter anstelle von -ToSession/-FromSession an. Gibt es eine andere Möglichkeit, eine Datei mithilfe von PSSession zu entfernen? Ich möchte "Wege" der Verbindung mit Remote-Host auf ein Minimum beschränken.

Haftungsausschluss: Ich kann einen Remote-PowerShell-Client in C# erstellen und Befehle remote ausführen, aber ich möchte lieber die Kontrolle über den Prozess auf dem Client behalten, nicht auf dem Host.

+0

Sie möchten also keine Befehle in der PSSession ausführen? – restless1987

+0

Ich möchte genau den Remove-Item-Befehl mit PSSession ausführen, aber soweit ich verstehe, gebe ich die Sitzung als Parameter - aber ich weiß nicht, was der Parameter für diesen Befehl wäre. In der anderen Weise, die ich benutze ich einen Runspace erstellen, Skripte hinzufügen und dann den Remote-Host als den Controller des Skripts ich es ausführen. Ich möchte den Steuerungsteil lieber auf dem lokalen Client belassen. – Asunez

Antwort

2

Von dem, was ich verstanden habe, ist das, was Sie tun möchten:

Wenn Sie den Pfad eingeben möchten:

Invoke-Command -Session $PSSession -Command {Remove-Item c:\windows} 

oder

Verwenden Sie den Pfad als Variable, müssen Sie Verwenden Sie das Schlüsselwort $Using:. Dies funktioniert mit PoShv3 oder höher.

$Path = 'C:\Windows' 
Invoke-Command -Session $PSSession -Command {Remove-Item $Using:Path} 

oder

Wenn Sie klassisch gehen, können Sie die Variablen in die Skript vom -argumentlist Parameter übergeben. Sie können sie innerhalb des Skriptblocks entweder durch $args Array oder durch einen Parameterblock abholen. Natürlich können die Variablennamen innerhalb des Skriptblocks von den äußeren abweichen.

$Path = 'C:\Windows' 
Invoke-Command -Session $PSSession -Command {Param($Path) Remove-Item $Path} -ArgumentList $path 
+0

Genau das habe ich gesucht - vielen Dank. Deine erste Lösung funktioniert, aber ich musste "Remove-Object" in "Remove-Item" ändern. Ist das vielleicht ein Versionskonflikt von Powershell? – Asunez

+0

Nein, ich bin einfach zu dumm zu tippen, manchmal ... – restless1987

+1

Ich habe ein bisschen Erklärung hinzugefügt. Sie könnten es brauchen. – restless1987

Verwandte Themen