C# 使用参数执行PowerShell脚本

C# 使用参数执行PowerShell脚本,c#,powershell,datagridview,C#,Powershell,Datagridview,我正在适应Windows窗体解决方案。到目前为止,我能够毫无问题地执行getwulist命令。但它似乎与Hide-wUpdate不匹配。这就是我迄今为止所尝试的: 公共类PowerShellController:IPowerShell { //在全局范围内创建,因此任何人都可以获取它。 初始会话状态初始; RunspaceInvoke脚本调用程序; 运行空间; PowerShell ps; //控制视图 IView视图; //助手GridViewProcessor类 igridviewgp处理器

我正在适应Windows窗体解决方案。到目前为止,我能够毫无问题地执行
getwulist
命令。但它似乎与
Hide-wUpdate
不匹配。这就是我迄今为止所尝试的:

公共类PowerShellController:IPowerShell
{
//在全局范围内创建,因此任何人都可以获取它。
初始会话状态初始;
RunspaceInvoke脚本调用程序;
运行空间;
PowerShell ps;
//控制视图
IView视图;
//助手GridViewProcessor类
igridviewgp处理器;
//初始化控制器-加载模块。
公共PowerShellController()
{
initial=InitialSessionState.CreateDefault();
initial.ImportPSModule(新字符串[]{@“C:\Users\Jose\Documents\WindowsPowerShell\Modules\PSWindowsUpdate\PSWindowsUpdate.psd1”});
scriptInvoker=新建RunspaceInvoke();
调用(“设置ExecutionPolicy Unrestricted-Scope进程”);
runspace=RunspaceFactory.CreateRunspace(初始值);
Open();
使用(ps=PowerShell.Create())
{
ps.运行空间=运行空间;
}
//Console.WriteLine(“请稍候。这将需要一段时间才能加载。”);
}
公共无效设置视图(IView视图,iGridView处理器总成)
{
this.view=视图;
this.gp=gp;
}
public void GetAvailableUpdates()
{
Show(“好的,程序会挂起,这是正常的。”+
“这意味着它将开始查找更新”
);
IEnumerable WUList;//PS执行命令的占位符
使用(ps=PowerShell.Create())
{
//添加PowerShell命令
ps.Commands.AddCommand(“获取五值列表”);
//执行PowerShell命令
WUList=ps.Invoke();
}
//加载模型-稍后可以为Ninject支持重写。
列表模型=新列表();
int-id=1;
foreach(PSObject结果在WUList中)
{
WindowsUpdate项目=新建WindowsUpdate
{
Id=Id,
Name=result.Members[“Title”].Value.ToString(),
Size=result.Members[“Size”].Value.ToString(),
Type=UpdateType.Undefined,
};
模型。添加(项目);
id++;//Icnrease id计数
//WriteLine(“更新名称{0}---Size:{1}”、result.Members[“Title”].Value.ToString()、result.Members[“Size”].Value.ToString());
}
//将其添加到视图中:
view.AddUpdateToGrid(模型);
}
public void hideselectedUpdate(DataGridView网格)
{
//获取WindowsUpdate模型的选定更新
var selectedUpdate=gp.getselectedUpdate(网格);
使用(ps=PowerShell.Create())
{
foreach(选定更新中的var更新)
{
ps.Commands.Clear();
ps.Commands.AddCommand(“Hide wUpdate”).AddParameter(“Title”,update.Name”).AddParameter(“Confirm”,false);
//ps.Commands.AddCommand(“隐藏WUPDATE-Title\”“+update.Name+”\”);
var result=ps.Invoke();
}
}
显示(“更新已被隐藏”);
}
}
我似乎无法使用的方法是
HideSelectedUpdates(DataGridView-grid)

脚本得到执行,并且没有抛出异常,但它似乎根本没有反映任何更改


有什么建议吗?

您可以直接从控制台运行
Hide wUpdate
命令,查看它是否可以使用指定的参数吗?只是想看看问题是在你的程序中还是在你使用这个命令时。@KeithHill:是的。我可以在PowerShell中完美运行它。在PowerShell控制台上,它询问我是否要继续,这就是我添加confirm:false参数的原因。我也用这种方式在控制台中试用过,效果很好!我真的不知道问题出在哪里:(因为程序通过了OK。没有注册错误,但似乎没有生效。您是否检查了
ps.Streams.Error
以查看调用该命令后该集合中是否有任何内容?@KeithHill:我检查了。没有显示错误:(您是否可以直接从控制台运行
Hide wUpdate
命令,查看它是否与指定的参数一起工作?只是想看看问题是在您的程序中还是在您使用此命令时发生的。@KeithHill:是的。我可以从PowerShell完美地运行它。在PowerShell控制台上,它会询问我是否要继续,这就是为什么。)我已经添加了confirm:false参数。我也用这种方式在控制台中进行了尝试,结果成功了!我真的不知道问题出在哪里:(因为程序通过了OK。没有注册错误,但似乎没有生效。您是否检查了
ps.Streams.Error
,查看调用该命令后该集合中是否有任何内容?@KeithHill:我检查了。未显示错误:(