Pour appeler un fichier de script powershell (exemple.ps1) à partir de C#
J'ai essayé de lancer un script localwindows.ps1 à partir de C# à l'aide du Code suivant :
PSCredential credential = new PSCredential(userName, securePassword);
WSManConnectionInfo connectionInfo = new WSManConnectionInfo(false, "machineName", 5985, "/wsman", shellUri, credential);
using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo))
{
runspace.Open();
String file = "C:\\localwindows.ps1";
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(file);
pipeline.Commands.Add("Out-String");
Collection<PSObject> results = pipeline.Invoke();
}
Mais l'obtention d'exception : "Le terme 'C:\localwindows.ps1' n'est pas reconnu comme nom d'applet de commande, fonction, fichier de script ou d'un programme exécutable.
J'ai donc essayé le suivant :
PSCredential credential = new PSCredential(userName, securePassword);
WSManConnectionInfo connectionInfo = new WSManConnectionInfo(false, "machineName", 5985, "/wsman", shellUri, credential);
using (Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo))
{
runspace.Open();
using (PowerShell powershell = PowerShell.Create())
{
powershell.Runspace = runspace;
PSCommand new1 = new PSCommand();
String machinename = "machinename";
String file = "C:\\localwindows.ps1";
new1.AddCommand("Invoke-Command");
new1.AddParameter("computername", machinename);
new1.AddParameter("filepath", file);
powershell.Commands = new1;
Console.WriteLine(powershell.Commands.ToString());
Collection<PSObject> results = powershell.Invoke();
}
J'obtiens l'erreur : "Impossible de trouver le chemin "C:\localwindows.ps1" car il n'existe pas."
Mais à l'aide de la commande " Invoke-Command -ComputerName "machineName" -filepath C:\localwindows.ps1", à partir de powershell sur la machine locale a créé un nouveau compte sur la machine distante.
Comment appeler le script localwindows.ps1 à partir de C#?
Comment exécuter la commande " Invoke-Command -ComputerName "machineName" -filepath C:\localwindows.ps1 " par C#?
Le script localwindows.ps1 est
$comp = [adsi]“WinNT://machinename,computer”
$user = $comp.Create(“User”, "account3")
$user.SetPassword(“change,password.10")
$user.SetInfo()
Vous devez vous connecter pour publier un commentaire.
Fait votre invocation style de travail. Mais dans les deux exemples, le script
c:\localwindows.ps1
doit résider sur l'ordinateur local. Dans la Commande Invoke-command cas, il sera copié à partir de l'ordinateur local à l'ordinateur distant.Si, dans la Commande Invoke-command cas, le script existe déjà sur l'ordinateur distant et que vous n'avez pas besoin de copier, supprimer la
FilePath
paramètre et ajouter ceci:c:\localwindows.ps1
.J'ai un article qui décrit un moyen facile de courir Powershell par WinRM de .NET à http://getthinktank.com/2015/06/22/naos-winrm-windows-remote-management-through-net/.
Le code est dans un seul fichier, si vous voulez simplement copier et en plus c'est un package NuGet qui comprend la référence au Système.De la gestion.L'automatisation.
Auto gère les hôtes approuvés, peuvent exécuter des blocs de script, et également envoyer des fichiers (ce qui n'est pas vraiment pris en charge, mais j'ai créé un travail autour). Les retours sont toujours les premières objets à partir de Powershell.
Veuillez marquer comme réponse si cela aide. Je l'ai utilisé pendant un moment avec mon déploiements automatisés. Merci de laisser des commentaires si vous trouvez des problèmes.