在 NAnt 构建系统中使用 PowerShell Cmdlet 的好方法是什么?
我们在构建系统中广泛使用 NAnt。最近,我编写了几个 PowerShell Cmdlet 来执行一些与数据库相关的操作。起初,这些 Cmdlet 的目的是不一定在我们的构建过程中运行。然而,这最近已成为一种需求,我们希望从基于 NAnt 的构建过程中运行其中一些 Cmdlet。
这些 Cmdlet 是用 C# 编写的,我们为它们提供了一个管理单元(如果这很重要的话)。
一些想法:
- 使用 exec 任务调用 PowerShell? (虽然不确定这将如何工作)
- 编写一个引用并使用 Cmdlet 的自定义 NAnt 任务?
做到这一点的好方法是什么?
We use NAnt extensively for our build system. Recently, I've written a couple PowerShell Cmdlets to perform a few database related things. At first, the intent of these Cmdlets was not to necessarily run within our build process. However, this has recently become a need and we would like to run a few of these Cmdlets from our NAnt based build process.
These Cmdlets are written in C# and we have a SnapIn for them (if that matters at all).
A few ideas:
- Use the exec task to call PowerShell? (not sure how this would work though)
- Write a custom NAnt task that references and uses the Cmdlet?
What might be a good way to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以在 nant 脚本中使用以下 exec 任务来调用 ps cmdlet。
You can use the below exec task in your nant script to call your ps cmdlets.
您当然可以使用 exec 任务,将程序属性设置为 powershell.exe 并在命令行中传递类似“-Command { }”的内容。
或者,您可以创建一个自定义 NAnt 任务,该任务在内部使用 powershell 托管 API 来执行 cmdlet 或脚本。有一个简单的示例(使用 PS v1 API)此处。
You could certainly use the exec task, setting the program attribute to powershell.exe and passing in the command line something like "-Command { }".
Alternatively, you could create a custom NAnt task that internally uses the powershell hosting APIs to execute your cmdlets or scripts. There's a simple example of this (using the PS v1 APIs) here.
根据 JiBe 的回答,相反,这是可行的解决方案。运行带有参数的 powershell 时,您需要运行 powershell 脚本,然后运行参数。
在 NAnt 中:
我认为最好的方法是在 PS 中为 NAnt 定义参数,就像
这样在命令行中您将使用:
然后这在 NAnt 中翻译如下:
Based on JiBe's answer its the other way around, here is the working solution. When running powershell that takes arguments you need to run the powershell script then the arguments.
In NAnt:
The best way I think is to define the arguments in PS for NAnt is like
So in command line you will use:
Then this translates in NAnt like:
最好的方法是使用与任务调度程序中使用的类似的方法。这意味着使用
-command
参数运行powershell
并以&
开始命令。例如:
The best way is to use similar methods as one would use in task scheduler. That means run
powershell
with the-command
argument and begin the command with&
.For example: