Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

CoqBlog

.NET is good :-)
{ Blog de coq }

Actualités

PowerShell & Visual Studio Command Prompt : plusieurs solutions, dont une très simple (ok, pour paresseux)

Comme vous le savez, lancer depuis un prompt PowerShell le bat "vcvarsall.bat" correspondant aux raccourcis "Visual Studio 2005 Command Prompt" ou "Visual Studio 2008 Command Prompt" ne suffit pas à disposer de l'environnement souhaité dans ce prompt PS.
En effet, ce bat ne fait basiquement que lancer d'autres bat (vcvars32.bat, vcvarsamd64.bat, vcvarsia64.bat, vcvarsx86_amd64.bat ou vcvarsx86_ia64.bat suivant la config choisie), dont le but est simplement d'enrichir les variables d'environnement nécessaires (du moins c'est le cas pour vcvars32.bat).

Seulement, ces affectations ne survivent pas en dehors de l'execution du bat, elles n'impactent pas celles définies dans PowerShell.

Il y a donc plusieurs solutions au problème :

  1. La première est de redévelopper ces fameux bat en script PowerShell qui vont se charger d'enrichir directement les variables env:*, comme l'a fait Brad Wilson avec son script vsvars2008.ps1 qu'il a eu la gentillesse de partager avec nous.
  2. La seconde est tout simplement de continuer à utiliser les bat existants, qui doivent probablement être générés durant le setup de Visual Studio, et en recopiant les valeurs des variables d'environnement en fin d'execution dans notre session PowerShell :-)

 

Détaillons cette seconde solution, je sens qu'elle vous intéresse.

Le raccourci "Visual Studio 2005 Command Prompt" ne consiste qu'en ceci :
%comspec% /k ""C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat"" x86

Or, cmd.exe peut prendre plusieurs commandes, en les séparant par &&, ce qui vas nous permettre d'executer set afin d'obtenir la liste des variables d'environnement définies dans le contexte de l'exection de cmd.
Ensuite, il ne nous reste qu'à parser ces informations pour définir ces mêmes variables dans notre prompt PowerShell.
Pour Visual Studio 2005 en x86, ça donne ceci :

cmd.exe /c "`"C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat`" x86&&set" |
foreach {
    if($_ -match "^(.*?)=(.*)$")
    {
        Set-Content "env:\$($matches[1])" $matches[2]
    }
}

La seule chose changeant pour VS2008 étant le chemin d'accès au fichier vcvarsall.bat :

cmd.exe /c "`"C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat`" x86&&set" |
foreach {
    if($_ -match "^(.*?)=(.*)$")
    {
        Set-Content "env:\$($matches[1])" $matches[2]
    }
}

Maintenant, concernant le fait d'ajouter ça au profil du shell PowerShell, pourquoi pas, si vous êtes sûr de ne plus vouloir utiliser que la dernière version de outils.

Personnellement, j'ai préférer garder 2 fichiers séparés vcvarsall_vs2005.ps1 et vcvarsall_vs2008.ps1 que je fais executer par 2 raccourcis qui vont bien, clonés du raccourci PS par défaut :

Visual Studio 2005 PowerShell Prompt : %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -NoExit &(Join-Path (Split-Path $PROFILE) 'Dev\vcvarsall_vs2005.ps1')
Visual Studio 2008 PowerShell Prompt : %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -NoExit &(Join-Path (Split-Path $PROFILE) 'Dev\vcvarsall_vs2008.ps1')

Mes deux fichiers ps1 sont placés dans un répertoire Dev placé dans le répertoire de mon profil PS, d'où la forme Join-Path (Split-Path $PROFILE) 'Dev\fichier.ps1' du raccourci.
D'ailleurs si vous voulez éviter les fichiers ps1, vous pouvez très bien "one-liné" leur contenu et vous en servir avec le paramètre -Command, mais bon courage ;-)

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: samedi 15 décembre 2007 00:17 par coq
Classé sous :

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01