如何使用Visual Studio外部工具中的长参数调用powershell.exe?

时间:2014-07-16 12:44:06

标签: visual-studio powershell

从Visual STudio外部工具,我想调用这样的powershell脚本:

  

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "{ Add-PSSnapin Microsoft.SharePOint.POwerShell -EA 0; & ""C:\a very long path to my script with spaces\my-script.ps1"" -ProjectFile ""c:\another very long path\to my visual studio project file\of a \customerprojet.csproj"" -WebPartDefinition ""c:\another very long path\to my visual studio project file\of a\file-in-my-customerproject.xml"" }"

实际上,我定义了我的外部工具来使用一些令牌:

  

-command { Add-PSSnapin Microsoft.SharePOint.POwerShell -EA 0; & ""C:\a very long path to my script with spaces\my-script.ps1"" -ProjectFile ""$(ProjectFileName)"" -WebPartDefinition ""$(ItemPath)"" }

但是,此命令行超出了Windows允许的260个字符限制,并且不起作用。似乎命令行被截断(在命令末尾缺少}

我该如何解决这个问题?

[编辑] 实际上,项目文件存在问题。令牌$(ProjectFileName)不包含项目目录,因此我必须改为:

  

-command { Add-PSSnapin Microsoft.SharePOint.POwerShell -EA 0; & """C:\a very long path to my script with spaces\my-script.ps1""" -ProjectFile ""$(ProjectFileName)\$(ProjectFileName)"" -WebPartDefinition ""$(ItemPath)"" }

我也必须"三倍" ps1路径周围的引号(不理解为什么)

这不起作用。这个论点太长了,视觉工作室禁止我把这个值。

[Edit2] 为确保语法,以下是我从命令行成功调用脚本的方法:

  

powershell -command "& { Add-PSSnapin Microsoft.SharePOint.POwerShell -EA 0; & """C:\path-to\myscript.ps1""" -ProjectFile """C:\Projects\someproject\someproject.csproj""" -WebPartDefinition """C:\Projects\someproject\somefolder\somefile.xml""" -Verbose }"

可以将其标记为:

  

powershell -command "& { Add-PSSnapin Microsoft.SharePOint.POwerShell -EA 0; & """C:\path-to\myscript.ps1""" -ProjectFile """$(ProjectFileName)\$(ProjectFileName)""" -WebPartDefinition """$(ItemPath)""" -Verbose }"

但命令行对于真实路径仍然太长:(

1 个答案:

答案 0 :(得分:0)

我使用记忆博士遇到了类似的问题。

外部工具的Arguments字段只允许250个字符(我需要321个字符)。

我能够通过创建批处理文件来解决此问题。也许您可以将令牌作为参数传递给批处理文件,然后在批处理中构建完整命令并从那里调用?