在C#中调用Get-Smbshare

时间:2015-10-25 19:28:14

标签: c# powershell

我目前正在尝试使用c#调用可以在Powershell中使用的Get-SMBShare ...但是,它会抛出此错误:

例外:被抓:"术语' Get-SMBShare'不被识别为cmdlet,函数,脚本文件或可操作程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。" (System.Management.Automation.CommandNotFoundException) 捕获到System.Management.Automation.CommandNotFoundException:"术语' Get-SMBShare'不被识别为cmdlet,函数,脚本文件或可操作程序的名称。检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。" 时间:2015年10月25日19:17:59 线程:管道执行线程[6028]

我的第一语言是PowerShell,所以我试图将一个GUI工具从PowerShell转换为C#,该工具使用了数百个PS命令 - 我应该调用一些东西吗?我在这里用控制台测试东西。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        private static void GetShareNames()
        {
            // Call the PowerShell.Create() method to create an 
            // empty pipeline.
            PowerShell ps = PowerShell.Create();

            ps.AddCommand("Get-SmbShare");

            Console.WriteLine("Name                 Path");
            Console.WriteLine("----------------------------");

            // Call the PowerShell.Invoke() method to run the 
            // commands of the pipeline.
            foreach (PSObject result in ps.Invoke())
            {
                Console.WriteLine(
                        "{0,-24}{1}",
                        result.Members["Name"].Value,
                        result.Members["Path"].Value);
            } // End foreach.
            Console.ReadLine();
        } // End Main.
        static void Main(string[] args)
        {
            GetShareNames();
        }
    }
}

1 个答案:

答案 0 :(得分:3)

您需要先导入模块。在尝试执行Get-SmbShare命令之前,请坚持使用此行:

ps.AddCommand("Import-Module").AddArgument("SmbShare");
ps.Invoke();
ps.Commands.Clear();

ps.AddCommand("Get-SmbShare");

另一种方法是使用预先加载的SmbShare模块初始化运行空间,例如:

InitialSessionState initial = InitialSessionState.CreateDefault();
initial.ImportPSModule(new[] {"SmbShare"} );
Runspace runspace = RunspaceFactory.CreateRunspace(initial);
runspace.Open();     
PowerShell ps = PowerShell.Create();
ps.Runspace = runspace;