How can I use PowerShell with the Visual Studio Command Prompt?

前端 未结 9 1722
一向
一向 2020-12-02 03:44

I\'ve been using Beta 2 for a while now and it\'s been driving me nuts that I have to punt to cmd.exe when running the VS2010 Command Prompt. I used to have a nice vsvars200

9条回答
  •  广开言路
    2020-12-02 04:37

    The simplest option is to run the VS 2010 command prompt and then start PowerShell.exe. If you really want to do this from your "home" PowerShell prompt, the approach you show is the way to go. I use a script that Lee Holmes wrote a while back:

    <#
    .SYNOPSIS
       Invokes the specified batch file and retains any environment variable changes
       it makes.
    .DESCRIPTION
       Invoke the specified batch file (and parameters), but also propagate any  
       environment variable changes back to the PowerShell environment that  
       called it.
    .PARAMETER Path
       Path to a .bat or .cmd file.
    .PARAMETER Parameters
       Parameters to pass to the batch file.
    .EXAMPLE
       C:\PS> Invoke-BatchFile "$env:VS90COMNTOOLS\..\..\vc\vcvarsall.bat"       
       Invokes the vcvarsall.bat file to set up a 32-bit dev environment.  All 
       environment variable changes it makes will be propagated to the current 
       PowerShell session.
    .EXAMPLE
       C:\PS> Invoke-BatchFile "$env:VS90COMNTOOLS\..\..\vc\vcvarsall.bat" amd64      
       Invokes the vcvarsall.bat file to set up a 64-bit dev environment.  All 
       environment variable changes it makes will be propagated to the current 
       PowerShell session.
    .NOTES
       Author: Lee Holmes    
    #>
    function Invoke-BatchFile
    {
       param([string]$Path, [string]$Parameters)  
    
       $tempFile = [IO.Path]::GetTempFileName()  
    
       ## Store the output of cmd.exe.  We also ask cmd.exe to output   
       ## the environment table after the batch file completes  
       cmd.exe /c " `"$Path`" $Parameters && set > `"$tempFile`" " 
    
       ## Go through the environment variables in the temp file.  
       ## For each of them, set the variable in our local environment.  
       Get-Content $tempFile | Foreach-Object {   
           if ($_ -match "^(.*?)=(.*)$")  
           { 
               Set-Content "env:\$($matches[1])" $matches[2]  
           } 
       }  
    
       Remove-Item $tempFile
    }
    

    Note: this function will be available in the PowerShell Community Extensions 2.0 module-based release coming soon.

提交回复
热议问题