2015-12-20 6 views
5

Quindi .. molto strano problema.Proprietà "Informazioni" sulla proprietà Streams dell'istanza di Powershell non disponibile compiletime

Utilizzando VS2015 e .net 4.52

ho sviluppato questo codice # PowerShell C, è in esecuzione uno script e coglie l'uscita. in questo modo:

 using (PowerShell powerShellInstance = PowerShell.Create()) 
     { 
      powerShellInstance.AddScript(scriptContents); 

      Collection<PSObject> PSOutput = powerShellInstance.Invoke(); 

      if (powerShellInstance.Streams.Information.Count > 0) 
      { 

        foreach (var item in powerShellInstance.Streams.Information) 
        { 
         //do something with info 
        } 


       } 

      } 
     } 

compilato ed eseguito (su un Windows 10 macchine pro), nessun problema.

finché non ho avuto una macchina nuova (superficie pro 4, così anche le finestre 10 Pro) e ho cercato di compilare il codice, ottengo questo errore:

'PSDataStreams' does not contain a definition for 'Information' and no extension method 'Information' accepting a first argument of type 'PSDataStreams' could be found (are you missing a using directive or an assembly reference?)

Questo è tutto basato TFS, quindi sono sicuro che è lo stesso codice.

Se io goto definizione su due macchine il problema diventa evidente:

enter image description here

Così, ho commentato il codice non compilazione e corse, per vedere cosa stava succedendo runtime:

enter image description here

Quindi la proprietà È lì .. Qualcuno ha una buona spiegazione per questo?

BTW: la documentazione msdn non menziona una proprietà informazioni ..

+0

Hai installato l'anteprima di Powershell 5 sul vecchio sistema, ma non quella nuova? O forse versioni diverse di esso tra i due? – alroc

+0

No, questa è una macchina vincente pulita 10, con solo studio installato – Flores

risposta

7

Si potrebbe fa riferimento la versione sbagliata del gruppo System.Management.Automation.dll sulla superficie Pro.

sul mio Windows 10 installazione Pro (aggiornato da Windows 8.1), ho due versioni, one in each GAC:

2 ps versions

Quello selezionato nella foto è il "vecchio", vive nel vecchio GAC (C:\windows\assembly) e si identifica con il file Versione 6.1.7600.16385.

L'altra (che contiene la versione corretta di PSDataStreams ed espone il flusso Information) vive in C:\Windows\Microsoft.NET\assembly e ha dei file Version 10.0.10240.16384 come della scrittura.

+0

Huh .. Mi riferisco a C: \ Programmi (x86) \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ 3.0 \ System.Management.Automation.dll Ci sono tre? – Flores

+0

Ma come puoi vedere nel primo screenshot mi riferisco esattamente allo stesso file .. cioè ... la stessa posizione .. – Flores

+0

Strane cose .. Ci sono davvero tre, i due che hai citato e quello che ho usato. Sono tutti diversi. Dimensioni del file ~ 1mb, ~ 3mb e ~ 6mb. – Flores