2017-04-15 7 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.dllで 'System.Management.Automation.ParameterBindingException'型の未処理の例外が発生しました –

+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.ParameterBindingException '型の未処理例外がSystem.Management.Automation.dllで発生しました。何が間違っているのか分かりますか? –

+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 LookupとDisable NetBios over TCP/IPを無効にします。管理者権限で実行することを忘れないでください。

関連する問題