如何从C#运行PowerShell代码?

时间:2017-04-15 00:20:59

标签: c# powershell

我有以下PowerShell脚本,我想在我的C#应用​​程序中运行。

$adapters=(gwmi win32_networkadapterconfiguration ) 
Foreach ($adapter in $adapters){
Write-Host $adapter
  $adapter.settcpipnetbios(2)
}
$nics=([wmiclass]'Win32_NetworkAdapterConfiguration')
Foreach($nic in $nics){
 Write-Host $adapter
$nic.enablewins($false,$false)
}

这是我到目前为止尝试使用“使用System.Management.Automation;”,但脚本无效。有人能指出我正确的方向吗?

PowerShell ps = PowerShell.Create();
ps.AddCommand("Get-Process");
ps.AddArgument("$adapters=(gwmi 
win32_networkadapterconfiguration )");
ps.AddArgument("Foreach($adapter in $adapters){");
ps.AddArgument(" Write - Host $adapter");
ps.AddArgument("$adapter $adapter.settcpipnetbios(2)}");
//WINS LMHOSTS lookup
ps.AddArgument("$nics = ([wmiclass]'Win32_NetworkAdapterConfiguration')");
ps.AddArgument("Foreach($nic in $nics){");
ps.AddArgument(" Write - Host $adapter");
ps.AddArgument("$nic.enablewins($false,$false)}");

2 个答案:

答案 0 :(得分:1)

您的代码末尾似乎缺少ps.Invoke();。或者你刚刚把它从你的列表中删除了?

您可以在此博客文章中找到有关执行PowerShell代码的不同方法的更多信息:https://blogs.msdn.microsoft.com/kebab/2014/04/28/executing-powershell-scripts-from-c/(部分"脚本/命令执行:"及以下。)

答案 1 :(得分:0)

感谢我找到解决方案的帮助。为了使脚本有效,我必须按如下方式构造代码。

 //Disable NetBIOS over TCP/IP - 2=disable, 1=enable, 0=DHCP default
 //And WINS LMHOSTS lookup
 string script = @"
 $adapters=(gwmi win32_networkadapterconfiguration )
 Foreach($adapter in $adapters)
 {
    Write-Host $adapter
    $adapter.settcpipnetbios(2)
  }
  $nics=([wmiclass]'Win32_NetworkAdapterConfiguration')
  Foreach($nic in $nics){
  Write-Host $adapter
  $nic.enablewins($false,$false)
  }
  ";

  PowerShell powerShell = PowerShell.Create();
  powerShell.AddScript(script);
  powerShell.Invoke();

对于那些不知道的人,此代码将禁用LMhosts查找和禁用TCP / IP上的NetBios;记得用管理权限运行它。