2017-04-15 120 views
0

我有以下PowerShell脚本,我想从我的C#应用​​程序中运行。如何从C#运行PowerShell代码?

$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)}"); 
+0

是的,请参阅下面的例外。 –

+0

“System.Management.Automation.ParameterBindingException”类型的未处理异常可能发生在System.Management.Automation.dll –

+0

“Write-Host”中,并且ps.Invoke – Mardoxx

回答

1

它看起来像你缺少一个ps.Invoke();在你的代码的末尾。或者你是否只是将其从你的列表中删除?

您可以找到不同的方式在这个博客帖子执行PowerShell代码的详细信息:https://blogs.msdn.microsoft.com/kebab/2014/04/28/executing-powershell-scripts-from-c/(节“脚本/命令的执行”。下同)

+0

嘿,本杰明,该脚本似乎现在正在运行,但我收到以下异常“在System.Management.Automation.dll中发生类型'System.Management.Automation.ParameterBindingException'的未处理的异常。”你知道有什么问题吗? –

+0

您是否尝试将整个脚本放入“AddScript”调用中?我不认为你应该像你这样使用'AddParameter'。如果您想将动态生成的参数输入到脚本中,则只需要这样做。相反,你可以通过一次调用AddScript来准备整个事件并调用它。 –

+0

是的,我试过了,但得到相同的异常。 –

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查找和禁用NetBios over TCP/IP;记得用管理权限运行它。