2010-12-01 18 views
2

Je parcourt des fichiers .exe dans un répertoire et j'extrait les fichiers .msp.
Idéalement, cela se ferait en silence.Exécuter le fichier à partir de Powershell sans obtenir "Voulez-vous exécuter ce fichier?"


Cette commande de fichier de commandes fonctionne parfaitement.

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


Ce script Powershell obtient presque fait.

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


Cependant, Windows 7 lance la "Voulez-vous exécuter ce fichier?" dialogue.
Comment rendre la PowerShell vraiment silencieuse?

Répondre

0

Je ne sais pas si cela est votre problème, mais vous appelez Start-Process sur la variable exeFiles $ plutôt que

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

Vous aussi passer les args comme une chaîne, donc je pense qu'ils ne sont pas passer à travers l'exe. Si vous passez des arguments à start-process, ils doivent être sous la forme d'un tableau, une chaîne par élément dans le tableau. Non seulement cela, mais powershell utilise $ args et il semble être immuable, si vous avez besoin d'un autre nom de variable:

donc votre code devrait ressembler à ceci:

$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

Salut calavera. Merci pour la réponse. Les noms de variables étaient des fautes de frappe en essayant de simplifier le code pour la question. Ils ont été corrigés. Merci. En ce qui concerne le passage des arguments sous forme de chaîne, cela fonctionne parfaitement. Je pense que le problème que j'ai est un problème de sécurité en essayant d'extraire un fichier sur un lecteur réseau. En regardant plus loin maintenant. – GollyJer

0

Le problème que vous rencontrez est relation de confiance entre la machine et la ressource d'obtenir le fichier. Si les deux machines appartiennent au même domaine, vous ne devriez pas avoir cette boîte de dialogue. si elles ne sont pas dans un domaine (intrernet ou extranet) aller à: Panneau de configuration-> Options Internet -> Sécurité -> Intranet local -> Sites cliquez sur "ajouter", tapez dans la ressource que vous voulez faire confiance

file: //servername.domainname

Cliquez sur OK, puis réessayez. Personnellement, j'essaie de le faire via WMI, quelqu'un sait comment?