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.

Foi útil?

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;

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top