什么';在NAnt生成系统中使用PowerShell Cmdlet的好方法是什么?
我们在构建系统中广泛使用。最近,我写了几篇文章来执行一些与数据库相关的事情。起初,这些cmdlet的目的是而不是在我们的构建过程中运行。然而,这最近已经成为一种需要,我们希望从基于NAnt的构建过程中运行其中一些cmdlet 这些cmdlet是用C#编写的,我们为它们提供了一个管理单元(如果这很重要的话) 一些想法:什么';在NAnt生成系统中使用PowerShell Cmdlet的好方法是什么?,powershell,build-automation,nant,Powershell,Build Automation,Nant,我们在构建系统中广泛使用。最近,我写了几篇文章来执行一些与数据库相关的事情。起初,这些cmdlet的目的是而不是在我们的构建过程中运行。然而,这最近已经成为一种需要,我们希望从基于NAnt的构建过程中运行其中一些cmdlet 这些cmdlet是用C#编写的,我们为它们提供了一个管理单元(如果这很重要的话) 一些想法: 是否使用该任务调用PowerShell?(但不确定这将如何工作) 是否编写引用并使用Cmdlet的自定义NAnt任务 做这件事的好方法是什么 您当然可以使用exec任务,将程序
- 是否使用该任务调用PowerShell?(但不确定这将如何工作)
- 是否编写引用并使用Cmdlet的自定义NAnt任务
做这件事的好方法是什么 您当然可以使用exec任务,将程序属性设置为powershell.exe,并在命令行中传递类似“-command{}”的内容
或者,您可以创建一个自定义NAnt任务,该任务在内部使用powershell宿主API来执行cmdlet或脚本。有一个简单的例子(使用PS v1 API)。您可以在nant脚本中使用下面的exec任务来调用PS cmdlet
<exec program="powershell" workingdir="${BuildManagementDir}" verbose="true">
<arg value="-noprofile"/>
<arg value="-nologo"/>
<arg value="-noninteractive"/>
<arg value="-command"/>
<arg value=".\xyz.ps1"/>
</exec>
根据JiBe的回答,情况正好相反,下面是可行的解决方案。运行接受参数的powershell时,需要运行powershell脚本,然后运行参数
PS yourscript.ps1 -arg1 value1 -arg2 value2
在南特:
<exec program="powershell" workingdir="${powershell_dir}" verbose="true">
<arg value=".\yourscript.ps1"/>
<arg value="-arg1 ${value1}"/>
<arg value="-arg2 ${value2}"/>
</exec>
因此,在命令行中,您将使用:
PS yourscript.ps1 some_value1 some_value2
然后用NAnt翻译如下:
<property name="Value1" value="some_Value1" />
<property name="Value2" value="some_Value2" />
<exec program="powershell" workingdir="${powershell_dir}" verbose="true">
<arg value=".\yourscript.ps1"/>
<arg value="${value1}"/>
<arg value="${value2}"/>
</exec>
最好的方法是使用与任务调度器中类似的方法。这意味着使用
-command
参数运行powershell
,并以&
开始命令
例如:
<exec program="powershell" workingdir="${ifscriptrequires}" verbose="true">
<arg line="-Command" />
<arg line="$amp; C:\scripts\somescript.ps1 -SwitchParam -someargument 'somevalue' 'somepositionalparameter'" />
</exec>
请您澄清您使用的符号是什么?在没有任何解释的情况下,您的答案看起来几乎与powershell中的呼叫接线员相同。以下内容来自“特殊运算符”下的“获取有关_运算符的帮助”命令输出:&Call运算符运行命令、脚本或脚本块。调用运算符(也称为“调用运算符”)允许您运行存储在变量中并由字符串表示的命令。因为调用运算符不解析命令,所以它无法解释命令参数。“根据我的经验,进一步澄清一下,不包含它可能会导致参数由powershell.exe而不是脚本处理,或者通常会丢失。
<exec program="powershell" workingdir="${ifscriptrequires}" verbose="true">
<arg line="-Command" />
<arg line="$amp; C:\scripts\somescript.ps1 -SwitchParam -someargument 'somevalue' 'somepositionalparameter'" />
</exec>