2017-04-15 79 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;記得用管理權限運行它。