Preciso executar um script PowerShell de dentro do C #. O script precisa de argumentos de linha de comando.
Isso é o que eu fiz até agora:
RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();
Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration);
runspace.Open();
RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace);
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.Add(scriptFile);
// Execute PowerShell script
results = pipeline.Invoke();
scriptFile contém algo como "C: \ Arquivos de programas \ MyProgram \ Whatever.ps1".
O script usa um argumento de linha de comando como "-key Value", enquanto Value pode ser algo como um caminho que também pode conter espaços.
Eu não consigo fazer isso funcionar. Alguém sabe como passar argumentos de linha de comando para um script do PowerShell de dentro do C # e certificar-se de que os espaços não são problema?
c#
command-line
powershell
scripting
arguments
Mephisztoe
fonte
fonte
Command myCommand = new Command(scriptfile);
e, em seguida,pipeline.Commands.Add(myCommand);
resolva o problema de escape.Respostas:
Tente criar scriptfile como um comando separado:
então você pode adicionar parâmetros com
e finalmente
Aqui está o código editado completo:
fonte
Eu tenho outra solução. Só quero testar se a execução de um script do PowerShell é bem-sucedida, porque talvez alguém possa alterar a política. Como argumento, apenas especifico o caminho do script a ser executado.
Com o conteúdo do script sendo:
fonte
Tive problemas para passar parâmetros para o método Commands.AddScript.
Resolvi isso passando
null
como o nome e o parâmetro como valor em uma coleção deCommandParameters
Aqui está minha função:
fonte
using (Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration))...using (Pipeline pipeline = runspace.CreatePipeline())
Você também pode apenas usar o pipeline com o Método AddScript:
Ele terá uma string e quaisquer parâmetros que você passar.
fonte
O meu é um pouco mais pequeno e simples:
fonte
Esta é uma maneira de adicionar parâmetros ao script se você usou
Isso ocorre com o uso de um HashMap como parâmetros, a chave sendo o nome da variável no script e o valor é o valor da variável.
E o método da variável de preenchimento é:
dessa forma, você pode adicionar facilmente vários parâmetros a um script. Também percebi que se você deseja obter um valor de uma variável em seu script, como:
// resultados sendo o nome de v
você terá que fazer da maneira que mostrei porque, por algum motivo, se você fizer da maneira que Kosi2801 sugere, a lista de variáveis de script não é preenchida com suas próprias variáveis.
fonte
Para mim, a maneira mais flexível de executar o script do PowerShell em C # era usando
PowerShell.Create().AddScript()
O snippet do código é
Você pode verificar se há algum erro verificando Streams.Error. Foi muito útil conferir a coleção. Usuário é o tipo de objeto que o script do PowerShell retorna.
fonte