PowerShell 2.0 via C#, os valores de retorno estão vazios?
-
20-09-2019 - |
Pergunta
Estou usando o C# para ligar para os métodos do Exchange 2010 PowerShell e acabei de encontrar um problema.
A coleção retornada pelo método Execute não possui um objeto Base. Eu posso usar .Properties ["PropertyName"], mas parece que todos esses valores são valores de string. Não é muito prático para o tamanho do arquivo, GUIDS e assim por diante.
Leitura http://blogs.msdn.com/powershell/archive/2010/01/07/how-objects-are-sent-to-and-from-romote-sessions.aspx, parece que isso é normal e os tipos que tenho são desaperializados.NamesPace.TypeName.
Estou procurando uma maneira de serializar -os de volta a um objeto vivo que posso usar propriedades e assim por diante. Eu tenho a DLL apropriada e tudo.
Solução
Parece que posso obter qualquer propriedade que eu queira, mas ela precisa estar no script do PS que invoco remotamente.
Eu descobri enquanto consulta o PowerShell via PowerShell remoto direto, não com o espaço para nome do Exchange.
Aqui está um exemplo
$spsite | Select Id, Url,
@{ Name = "Owner"; Expression = { $_.Owner.UserLogin } }
Isso funciona perfeitamente, eu posso usar
psResult.Members["Owner"].Value as string
Para conseguir o proprietário
Outras dicas
Você pode obter o objeto orginal como este:
PS Bit:
$results = $MyCustomCollection
C# Bit:
System.Collections.ObjectModel.Collection<PSObject>
results = pipeline.Invoke();
CustomCollection theCustumCollection
= (CustomCollection )runspace.SessionStateProxy.GetVariable("results");
Você precisa garantir que a única coisa devolvida seja esse objeto e nada mais; Então coloque qualquer coisa que retorne qualquer coisa a NULL;