无法将数组从Powershell传递到C#Runspace结果

时间:2015-11-24 17:04:30

标签: c# powershell invoke

我正在尝试将数据库大小列表从Powershell转换为c#组合框,但是我没有得到任何结果。经过激烈的谷歌搜索后,我仍然不确定从哪里开始。如何将$ AllDB数组作为结果返回给c#?这是一个对象类型问题(我尝试了很多迭代)或者我缺少的概念吗?如果我只运行一个基本的cmdlet,一切正常,将填充组合框(例如Get-Process)

此外,代码将DB名称和大小输出到控制台就好了,Out-String和Out-Default也不起作用。

Powershell代码:

    foreach ($db in Get-MailboxDatabase -identity exchangeserver\nameprefix*) 
    {
    $mountedServer = $db.ServerName
    $edbFilePath = $db.edbFilePath.PathName
    $path = "`\`\" + $mountedServer + "`\" + $edbFilePath.Split(":")[0].ToString() + "$"+ $edbFilePath.Split(":")[1].ToString()
    $dbsize = Get-ChildItem $path
    $ReturnedObj = New-Object PSObject -Property @{
    DatabaseIdentity = $db.Name
    Size = [Math]::Round($dbsize.Length/1gb, 2)
}
    $AllDB +=$ReturnedObj

}
 $AllDB |Sort-Object Size|convertto-csv -NoTypeInformation | % { $_ -replace '"', ""}| % { $_ -replace ',', " "} 

C#代码:

        Runspace runspace = RunspaceFactory.CreateRunspace();
        runspace.Open();
        using (PowerShell ps = PowerShell.Create())
        {
            ps.Runspace = runspace;
            ps.AddCommand(script);
            var results = ps.Invoke();
            foreach (PSObject result in results)
            {
                comboboxID.Items.Add(result);
            }
        }
        runspace.Close();
    }

0 个答案:

没有答案