我正在尝试将数据库大小列表从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();
}