2010-12-01 10 views
2

私はディレクトリ内の.exeファイルをループして、.mspファイルを抽出しています。
それは静かに起こるのが理想です。「このファイルを実行しますか?」を取得せずにPowershellからファイルを実行します。ダイアログ


このバッチファイルコマンドは完全に機能します。

for %%g in ("C:\test\"*.exe) do %%g /quiet /extract:"C:\test" 


このPowerShellスクリプトは、ほとんどそれが行わ取得します。

$exeFiles = Get-ChildItem -path $directory -recurse -include *.exe 
foreach($file in $exeFiles) 
{ 
    $appArgs = '/quiet /extract:"' + $directory + '"' 
    Start-Process $exeFiles $appArgs -PassThru | Wait-Process 
} 


ただし、Windows 7は "このファイルを実行しますか?" までのスローダイアログ。
PowerShellを本当にサイレントにするにはどうすればよいですか?私は、彼らがいないなら疑うので、これはあなたの問題ですが、あなたは

for ($file in $exeFiles) 
{ 
    start-process $file (...etc) 
} 

ます。また、文字列として引数を渡しているのではなく、$ exeFiles変数にスタート・プロセスを呼び出している場合

答えて

0

わかりませんexeに行き着く。開始プロセスに引数を渡す場合は、配列の要素ごとに1つの文字列を配列の形式で指定する必要があります。それだけでなく、PowerShellは$引数を使用し、それが不変であるように思われる、あなたは別の変数名必要ですので:

をだからあなたのコードをより次のようになります。

$directory = "C:\test" 
$exeFiles = Get-ChildItem -path $directory -recurse -include *.exe 
foreach($file in $exefiles) 
{ 
    $myArgs = '/quiet', ('/extract:"' + $directory + '"') 
    Start-Process $file $myArgs -PassThru | Wait-Process 
} 
+0

こんにちはcalavera。応答していただきありがとうございます。変数名は、質問のコードを簡素化しようとしている間にタイプミスでした。彼らは修正されました。ありがとう。 引数を文字列として渡す限り、実際には完全に機能します。ネットワークドライブ上のファイルを解凍しようとするとセキュリティ問題が発生すると私は思っています。それをさらに見てください。 – GollyJer

0

あなたが持っている問題がありますマシンとリソースがファイルを取得する信頼関係。両方のマシンが同じドメインに属している場合は、このダイアログを表示しないでください。コントロールパネル - >インターネットオプション - >セキュリティ - >ローカルイントラネット - >サイト 「追加」をクリックして、信頼するリソースを入力してください。

ドメインに属していない場合は(つまりintrernetまたはエクストラネット)

file://servername.domainname

OKをクリックしてもう一度お試しください。 個人的に私はWMI経由でこれをやろうとしています。