2
我有這個使用PowerShell的簡單程序。這只是一個概念證明,我在一個更大的應用程序中使用相同的代碼。問題是無法讀取下面代碼中某些屬性的值。讀取Value屬性會引發GetValueInvocationException異常。枚舉PowerShell對象的屬性拋出
這實際上甚至發生在隨PowerShell SDK一起提供的Microsoft示例項目中。爲什麼是這樣的,有沒有解決方案?
static void Main(string[] args)
{
var powerShell = System.Management.Automation.PowerShell.Create();
var runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
Runspace.DefaultRunspace = runspace;
powerShell.Runspace = runspace;
powerShell.AddScript("Get-Process");
var results = powerShell.Invoke();
foreach (var prop in results.First().Properties)
{
try
{
Console.WriteLine(prop.Name + " : " + prop.Value);
}
catch (Exception e)
{
Console.WriteLine(string.Format("Exception {0} on {1}", e.GetType(), prop.Name));
}
}
Console.ReadKey();
}
是的,你可能是對的。我應該忽略這些屬性。事情是,我一般這樣做,並不知道代碼中的BaseObject是什麼。我之前(並想改變)所做的是使用PowerShell Job API。然後我沒有這樣的問題。但是當我查看返回的屬性時,我發現在使用Job方法時,在我的示例中拋出異常的屬性不可用。所以我想try/catch是要走的路。謝謝:) – LinusK
是的,try/catch是我在自定義主機中處理未知對象時所做的事情(讀取屬性獲取器可能拋出的對象)。 –