我正在尝试向Exchange-Server执行一些远程PowerShell命令。 现在我在参数中执行ScriptBlocks时遇到问题。
我的C#代码如下:
List<object> parameters = new List<object>()
{
"DisplayName","Guid","ManagedBy",
new Hashtable()
{
{"Name","NameRename"},
{"Expression","Name"}
}
};
powershell.AddCommand("Get-DistributionGroup");
powershell.AddParameter("ResultSize", "unlimited");
powershell.AddCommand("Select-Object");
powershell.AddParameter("Property", parameters);
powershell.AddParameter("ExpandProperty", "ManagedBy");
parameters = new List<object>()
{
"DisplayName","Guid","NameRename",new Hashtable()
{
{"Name","ManagedByGuid"},
{"Expression",ScriptBlock.Create("($_.ManagedBy).ObjectGuid -join ','")}
}
};
powershell.AddCommand("Select-Object");
powershell.AddParameter("Property", parameters);
Collection<PSObject> result = powershell.Invoke();
我知道有一些东西缺失(runpace open f.e.)但是这段代码应该只是一个例子,因为我的实际代码动态工作,所以你看不到真正的命令。有什么......我的结果显示我为“ManagedByGuid”列的null。第一个参数中的重命名仅在表达式中根本没有脚本时才有效(一旦我将表达式设置为ScriptBlock.Create("$_.Name")
,它也会传递空值)。
所以似乎powershell没有执行scriptblock而只是在没有脚本编写的情况下仅仅在普通的情况下评估字符串...
当我而不是分离命令时,将一个完成的脚本作为字符串传递给powershell,它的工作正常....例如:
powershell.AddScript("Get-DistributionGroup -ResultSize unlimited | Select-Object -Property Alias,Guid,DisplayName,WhenChanged,WhenCreated,@{name=\"NameRename0\";expression={$_.Name}},ManagedBy -expand ManagedBy |Select-Object Alias,Guid,DisplayName,WhenCreated,WhenChanged,NameRename0,@{Name=\"ObjectGuid\";expression={ ($_.ManagedBy).ObjectGuid -join ',' }} -unique");
我也可以使用这种方法,但首先我不想重做我的所有代码,其次,scripblock也应该有用吗?
有没有人知道为什么这不起作用...... ??