使用Powershell 2.0调用mage并调用运算符(即&)

Ada*_*ynn 6 powershell clickonce mage

我想使用Powershell 2.0来编写使用Microsoft的Manifest Generation and Editing工具(mage)创建应用程序清单的脚本.具体来说,我希望能够将动态指定的参数值传递给mage命令(例如,从xml或其他来源读取).

虽然我可以使用invoke-expression完成此操作,但我宁愿避免将其视为不太安全的选项(即易受"powershell注入攻击"攻击).

这就是我所知道的.

这成功显示消息"application.exe.manifest已成功创建":

& "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\mage.exe" -New Application
Run Code Online (Sandbox Code Playgroud)

这不会成功,消息"第一个参数必须是以下之一:-New,-Update,-Sign"(这是一个mage,而不是powershell,错误消息):

$params = "-New Application"

& "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\mage.exe" $params
Run Code Online (Sandbox Code Playgroud)

如何将$ params值传递给mage命令,以便mage成功解释?

Rom*_*min 6

$params定义为数组很容易,每个数组项有一个参数:

# define $params as an array
$params = "-New", "Application"

# and pass this array in, just as you tried before
& "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\mage.exe" $params
Run Code Online (Sandbox Code Playgroud)

同上$params动态构建几步:

$params = @()
...
$params += '-New'
...
$params += 'Application'
...
& "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\mage.exe" $params
Run Code Online (Sandbox Code Playgroud)

这种方式经常被忽略,但它非常方便,它允许为本机应用程序轻松动态组合复杂的命令行.

PS我们不必关心参数值中的空格,我们使用参数数组中的值,不需要额外的".