我目前正在尝试使用C#调用可以在Powershell中使用的Get-SMBShare ...但是,它抛出此错误:
异常(exception):捕获:“术语'Get-SMBShare'不被识别为cmdlet,函数,脚本文件或可运行程序的名称。请检查名称的拼写,或者是否包含路径,请验证路径是否为更正并重试。” (System.Management.Automation.CommandNotFoundException)
捕获了System.Management.Automation.CommandNotFoundException:“术语'Get-SMBShare'未识别为cmdlet,函数,脚本文件或可运行程序的名称。请检查名称的拼写,或者是否检查了路径(请确认路径正确无误,然后重试。”
时间:25/10/2015 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();
}
}
}
最佳答案
您需要先导入模块。在尝试执行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;
关于c# - 在C#中调用Get-Smbshare,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33334076/