代码之家  ›  专栏  ›  技术社区  ›  Rich

在Visual Studio中将PowerShell脚本作为生成事件运行的最简单/最短命令

  •  6
  • Rich  · 技术社区  · 16 年前

    刚刚开始使用PowerShell。我在vs的后期生成事件中运行dos.bat文件,并希望能够升级到PowerShell。BAT文件很简单… CALL something.bat . 我尝试用PowerShellPS1文件来实现这一点,我的尝试和错误使我达到了以下目的(第一件有效的事情……显然首先尝试了所有简单的事情):

    powershell -command "& {(powershell '$(ProjectDir)test.ps1')}"
    

    这个有速记版本吗?我认为唯一真正困扰我的是对PowerShell可执行文件的冗余调用,但这可能只是必需的,因为默认情况下,在我的计算机上.ps1文件在记事本中打开(我应该保留在其他系统上部署的冗余,这样我就不依赖文件类型的默认程序)。不管怎样,如果这里有不必要的冗余,我很想知道。

    我对PowerShell非常陌生,因此任何相关的见解都会受到赞赏。

    4 回复  |  直到 8 年前
        1
  •  3
  •   Bobby    16 年前

    根据 MSN ,这应该很有效:

    powershell.exe "$(ProjectDir)test.ps1"
    

    编辑: 发现 this

    powershell.exe "& ""$(ProjectDir)test.ps1"""
    
        2
  •  4
  •   Community Mohan Dere    8 年前

    过去我曾将PowerShell用作后期生成事件;现在我倾向于使用 psake (超级简单的构建系统)或只是运行一个原始的PowerShell脚本。构建后的事件变得混乱、不灵活,并且与在构建脚本中执行相同的操作相比没有什么优势。

    编辑:如果您仍然对使用后期生成脚本感兴趣,我以前就回答过这个问题 here

        3
  •  1
  •   greenoldman    15 年前

    我没有检查任何msdn,它只是工作:

    powershell $(ProjectDir)test.ps1
    

    顺便说一句,不要忘记为两个版本的PowerShell设置运行权限——32位和64位。

        4
  •  0
  •   Matt Jacobsen    8 年前

    我对优雅的 powershell $(ProjectDir) 解决方案在这里详细介绍,但我在通过WebAdministration的Start WebAppPool和Stop WebAppPool启动/停止IIS应用程序池时遇到问题。

    我在以下方面取得了更好的成功:

    %WINDIR%\SysNative\WindowsPowerShell\v1.0\powershell.exe 
    

    %WINDIR%\SysNative\WindowsPowerShell\v1.0\powershell.exe -Command "$(ProjectDir)Powershell\Stop-AppPool.ps1"
    

    事实证明,原因是混合了架构,如详细说明所示。 here (在“使用Windows PowerShell脚本在Visual Studio中自动执行任务”部分中):

    使用虚拟路径%windir%\sysnative和 不是c:\windows\system32的实际路径。原因是 Visual Studio 2010是一个32位应用程序,需要调用 64位版本的PowerShell.exe以成功加载 Microsoft.SharePoint.PowerShell管理单元。

    推荐文章