2017-01-18 1 views
0

J'écris un script Powershell DSC afin que je puisse facilement configurer les environnements de développement. J'essaie d'installer Visual Studio 2012 Addons sans ouvrir l'interface graphique.Visual Studio 12 VSIXInstaller signale une exception FileNotFoundException lors de l'exécution dans le script DSC

J'ai téléchargé le fichier Specflow .vsix. Lorsque je cours

& "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\VSIXInstaller.exe" /q C:\Users\Public\Downloads\TechTalk.SpecFlow.Vs2010Integration.vsix 

à l'invite de commande Powershell, cela fonctionne sans accroc. Mais si j'essaie de faire la même chose dans une ressource de script DSC, je rencontre des problèmes. Si vous copiez et collez la commande ci-dessus dans SetScript, VSInstaller.exe entraîne la fin de la commande.

J'ai donc essayé ce qui suit, en fonction de la cmdlet Choco Install-VSIX:

Script installSpecflowVS { 
     SetScript = {   
      $specUrl = 'https://visualstudiogallery.msdn.microsoft.com/9915524d-7fb0-43c3-bb3c-a8a14fbd40ee/file/79327/7/TechTalk.SpecFlow.Vs2010Integration.vsix' 
      $outfile = 'C:\Users\Public\DownloadsTechTalk.SpecFlow.Vs2010Integration.vsix' 
      wget $specUrl -outfile $outfile 
      $psi = New-Object System.Diagnostics.ProcessStartInfo 
      $psi.FileName='C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\VSIXInstaller.exe' 
      $psi.Arguments="/q $outfile" 
      $s = [System.Diagnostics.Process]::Start($psi) 
      $s.WaitForExit() 
      return $s.ExitCode 
     } 
     TestScript = { return $False } 
     GetScript = { return $True } 
} 

Dans ce cas, la commande est terminée, mais VSIXInstall.exe génère une erreur FileNotFound que je peux voir à partir du journal créé en C: \ Windows \ Temp \

1/18/2017 10:51:51 AM - Searching for applicable products... 
1/18/2017 10:51:51 AM - Found installed product - Microsoft Visual Studio Professional 2012 
1/18/2017 10:51:51 AM - System.IO.FileNotFoundException: The system cannot find the file specified. (Exception from HRESULT: 0x80070002) 
    at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo) 
    at System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(Int32 errorCode) 
    at Microsoft.VisualStudio.Settings.ExternalSettingsManager.GetScopePaths(String applicationPath, String suffixOrName, String vsVersion, Boolean isLogged, Boolean isForIsolatedApplication) 
    at Microsoft.VisualStudio.Settings.ExternalSettingsManager.CreateForApplication(String applicationPath) 
at VSIXInstaller.App.GetExtensionManager(SupportedVSSKU sku) 
at VSIXInstaller.App.GetExtensionManagerForApplicableSKU(SupportedVSSKU supportedSKU, IInstallableExtension installableExtension, List`1 applicableSKUs) 
at VSIXInstaller.App.InitializeInstall() 
at VSIXInstaller.App.OnStartup(StartupEventArgs e) 

Le fichier est définitivement là; si je l'offre VSInstaller avec quelque chose qui n'existe pas donne l'erreur suivante au lieu

1/18/2017 10:21:45 AM - VSIXInstaller.InvalidCommandLineException: Path to vsix file 'outfile' is invalid or you don't have required access permissions. Please check the path is valid and you have required access permissions. 

Le script est en cours d'exécution au niveau local sur une machine virtuelle Windows 7 SP1 avec Powershell 5. Je l'exécuter en utilisant Powershell ISE avec l'administrateur privilèges

Il y a évidemment quelque chose de différent à propos des scripts s'exécutant via DSC Set-Script. Des idées comment réparer pour le réparer? Ou une autre façon de le faire?

Répondre

0

VSIX est par utilisateur que vous devez indiquer à DSC quel utilisateur installer comme utilisant PSDscRunAsCredential (ajouté dans PowerShell 5.0).

Exemple où $credential est les informations d'identification de l'utilisateur pour lequel vous voulez installer le VSIX.

Script installSpecflowVS { 
     SetScript = {   
      $specUrl = 'https://visualstudiogallery.msdn.microsoft.com/9915524d-7fb0-43c3-bb3c-a8a14fbd40ee/file/79327/7/TechTalk.SpecFlow.Vs2010Integration.vsix' 
      $outfile = 'C:\Users\Public\DownloadsTechTalk.SpecFlow.Vs2010Integration.vsix' 
      wget $specUrl -outfile $outfile 
      $psi = New-Object System.Diagnostics.ProcessStartInfo 
      $psi.FileName='C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\VSIXInstaller.exe' 
      $psi.Arguments="/q $outfile" 
      $s = [System.Diagnostics.Process]::Start($psi) 
      $s.WaitForExit() 
      return $s.ExitCode 
     } 
     TestScript = { return $False } 
     GetScript = { return $True } 
     PSDscRunAsCredential = $credential 
} 

S'il vous plaît voir aussi Securing the MOF File sur la façon de chiffrer correctement le fichier MOF de sorte que vous ne fuit pas vos informations d'identification.