2012-03-08 17 views
1

私は自動的にpowershellを起動し、別のpowershellからいくつかのコマンドを実行したいと思います(私は、機能の利点のために別のpowershellから起動します)。
私はC#でコード化された* .dllをpowershellでテストしていますので、powershellでdllをアンロードすることはできないため、ライブラリを再ロードすることはできないため、powershellを起動して終了する必要がありますそのクラスと一緒に。powershellを使って新しいPowerShellウィンドウをスクリプト化しますか?

オフィスでのCOMオブジェクトの自動化と同じように、powershellを自動化する方法はありますか?

+0

http://stackoverflow.com/questions/18143501/run-powershell-in-new-ウィンドウ – Swonkie

答えて

3

スクリプトブロックまたはスクリプトブロックを使用することはどうですか?

powershell { 
    Add-Type foo.dll 
    [Foo]::DoSomething(); 
} 

が有効です。

あなたが対話を必要と意志で複数のコマンドを試してみる必要がある場合、あなたはあなたがにいるかどうかを知っているので、それは、少なくともプロンプトの色を変更するために役立つことができ、その場合には

powershell -noexit { Add-Type foo.dll } 

を使用することができますテストサブシェルや親の中で1:

function Test-DLL { 
    powershell -noexit { 
    function prompt { 
     Write-Host -n -fore yellow "Test $PWD>" 
     ' ' 
    } 

    Add-Type foo.dll 
    } 
} 

私も次のように小さな関数を定義する傾向がある:

"function $([char]4) { exit }" | Invoke-Expression 
私は はCtrl + DでPowerShellを閉じることができます

(Unixシェルの半分アナログ)を入力します。

+0

私はadd-typeを使っています。しかし、2つの問題があります:powershellはライブラリをロックし、[Reflection.Assembly]でリロードすることはできません(DLLがロックされているときにDLLを再コンパイルできないため、これがadd-typeで動作するかどうかわかりません)。 – wullxz

+0

すみません。私はあなたがpowershellという名前の関数の代わりにpowershellを実行しているということはありません;) これは動作します。 PowershellISEからでも、私は自分のコマンドを簡単に変更できます。ありがとう:) – wullxz

+1

ポイントは、あなたがテストを終えた後、ライブラリを読み込んで閉じた別のシェルを起動することです。私の試みは、(ライブラリをロードすることで)サブシェルの起動を行い、必要に応じていくつかのテストステップを可能な限り無駄にすることでした。 – Joey

1
おそらく

ない最もエレガントな解決策が、(私はPSのプロではないよ)それを行う必要があります。

cmd /c start powershell 
+0

私はこの方法を知っていますが、これで新しいPowerShellインスタンスにコマンドを渡すことはできません。 – wullxz

+0

+1コマンドの受け渡しは次のようになります:cmd/c start powershell.exe -nologo -noexit -command "cd c:\ mydir"(上記で更新しました) – 79E09796