PowerShell脚本问题

时间:2011-09-21 06:58:10

标签: c# powershell

以下是代码:

static String checkBackUp()
{
    Runspace runspace = RunspaceFactory.CreateRunspace();

    runspace.Open();

    Pipeline pipeline = runspace.CreatePipeline();                     
    pipeline.Commands.Add("Get-WBSummary");
    pipeline.Commands.Add("Out-String");

    Collection<PSObject> results = new Collection<PSObject>();
    try
    {
        results = pipeline.Invoke();
    }
    catch (Exception ex)
    {
        results.Add(new PSObject((object)ex.Message));
    }

    runspace.Close();

    StringBuilder stringBuilder = new StringBuilder();
    foreach (PSObject obj in results)
    {
        stringBuilder.AppendLine(obj.ToString());
    }

    return stringBuilder.ToString();
}

问题是这会运行每个cmdlet(例如Get-Process)但是当我尝试验证是否已进行备份(Get-WBSummary)时,它会发出以下错误:

  

术语“Get-WBSummary”未被识别为cmdlet,函数,脚本文件或可操作程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。

但是,当我将命令直接放入PowerShell时,它会执行命令。我已经尝试添加SnapIn,但这不起作用。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

Get-WBSummary不是常规的内置Powershell cmdlet。你需要做

Add-PSSnapin Windows.ServerBackup

在初始化运行空间后,代码中的某个位置。

答案 1 :(得分:0)

您必须创建初始会话状态并添加管理单元。这是怎么做的

initialSession = InitialSessionState.CreateDefault();
initialSession.ImportPSModule(new[] {"Path\to\module\here"});