J'ai un article qui décrit un moyen facile d'exécuter Powershell via WinRM à partir de .NET au http://getthinktank.com/2015/06/22/naos-winrm-windows-remote-management-through-net/.
Le code se trouve dans un fichier unique si vous voulez simplement le copier et c'est aussi un paquet NuGet qui inclut la référence à System.Management.Automation.
Il gère automatiquement les hôtes de confiance, peut exécuter des blocs de script, et aussi envoyer des fichiers (ce qui n'est pas vraiment supporté mais j'ai créé un travail autour). Les retours sont toujours les objets bruts de Powershell.
// this is the entrypoint to interact with the system (interfaced for testing).
var machineManager = new MachineManager(
"10.0.0.1",
"Administrator",
MachineManager.ConvertStringToSecureString("xxx"),
true);
// will perform a user initiated reboot.
machineManager.Reboot();
// can run random script blocks WITH parameters.
var fileObjects = machineManager.RunScript(
"{ param($path) ls $path }",
new[] { @"C:\PathToList" });
// can transfer files to the remote server (over WinRM's protocol!).
var localFilePath = @"D:\Temp\BigFileLocal.nupkg";
var fileBytes = File.ReadAllBytes(localFilePath);
var remoteFilePath = @"D:\Temp\BigFileRemote.nupkg";
machineManager.SendFile(remoteFilePath, fileBytes);
J'espère que cela aide, je l'utilise depuis un certain temps avec mes déploiements automatisés. S'il vous plaît laissez des commentaires si vous trouvez des problèmes.