关于在应用程序中构建自动化的想法

时间:2009-08-18 14:33:47

标签: .net powershell automation

我目前正在研究.NET内部测试工具。该工具目前基于GUI。我希望该工具能够做的一件事是在命令行模式下运行。通过这种方式,我们可以以自动方式运行它,并且每天都会对某些数据进行处理。

我们开始在其中设置命令行模式,但我对它不满意。它感觉很笨拙,只是坚持下去。我正在寻找一种更优雅的解决方案,可以相对轻松地扩展,因为我们为应用程序提供了更多功能。

我的一个想法是在PowerShell和Exchange Server之后建模。 Exchange服务器显然构建了大约800个cmdlet,然后使用它们来构建它们的UI。这样他们的UI可以做的一切,你可以通过使用这些cmdlet的脚本来完成。说实话,我真的很喜欢。它优雅,随着它们添加更多功能而自然扩展。

你们对这样的事情有什么想法?有人在那里试过我提到的PowerShell路线吗?分享你的意见。

由于

4 个答案:

答案 0 :(得分:3)

基于通用API构建是一个好主意。然后,API方法成为第一类公民,从UI层或控制台同样有效。

但是,您需要权衡使用它的程度以及您想要使用它的程度。如果你有大量的观众或大量的使用,写一个powershell提供商是很好的,但对于较小的受众来说可能是过度的。

一个简单的解决方案是为控制台应用程序和UI都可以引用的所有业务逻辑创建一个共享类。不要在UI项目或控制台项目中放置任何实际逻辑,那么您只需要编写一次。这是一种简单的扩展方式,而不是让它感觉笨拙。

答案 1 :(得分:3)

PowerShell提供了一个非常强大的框架,可以与GUI一起使用CLI界面。最棒的是,这两个非常不同的接口可以共享相同的代码!

我以前做过这件事,我可以告诉你,这是一次愉快的经历。我不能说Cmdlet框架有足够的积极意义。整个系统的架构非常精致和有目的。

由于它与您的问题有关,我认为它总是归结为为正确的工作选择合适的工具。这是不容忽视的,因为我认为我们作为软件工程师总是希望尝试最新和最好的解决当前的问题。这是让我们的工作变得有趣的部分原因!鉴于我对您的项目的洞察力有限,看起来PowerShell似乎可以从设计选择中获得收益。但是,我确信您已经知道,重写GUI以使用PowerShell管道很可能会改变现有应用程序的大部分内容(如果预算允许,这可能是一件好事)。

总的来说,如果你想在你的应用程序中加入一个可编程脚本的界面以及一个GUI前端,以及真正的代码共享的额外好处...... PowerShell是一个不错的选择。此外,如果您最终走这条路线,您甚至可以查看psake以帮助您实现自动化。

答案 2 :(得分:0)

关于unix / linux shell的一个优雅的事情是能够将小applet链接在一起构建功能。也许您可以将核心功能构建为守护程序/服务,并使用命令行或GUI与其进行聊天(如未知建议)。

答案 3 :(得分:0)

Powershell脚本允许您利用.NET库和编写几乎与.NET代码本身一样强大的脚本。您可以执行许多强大的操作,如调用外部DLL,使用.NET名称空间,如System.IO,System.Net,运行进程和拦截输出,调用Web服务等。可能性是无穷无尽的。在这里,我将向您展示一个Powershell脚本,它可以帮助您日常部署网站。每天,我们都会对Web项目进行更改,这些项目需要部署到开发服务器,有时是beta服务器,最后是生产服务器。使用此脚本,您可以在每次将网站上载到某个服务器时自动执行在部署包上反复执行的所有手动工作。我们在本地开发服务器上载,测试版和最终生产服务器版本中每天都在Pageflakes中使用此脚本。我们所做的只是运行脚本,转到服务器,并在Web文件夹中提取zip文件,这就是全部。新版本在两分钟内完成部署,无需任何手动工作,并且在部署期间完全消除了任何人为错误的可能性。 自动部署

我写了一篇Powershell脚本为您做了以下事情:

* Maintains different configuration information for different deployments. For example, different connection strings for development servers and production servers (one or more production servers).
* Creates a deployment folder using the deployment date, time, and version so that you have a separate folder for each deployment and can keep track of things deployed on a day, e.g., 20061214-1.
* Copies only the change files and some predefined files to the deployment folder. So, you don't deploy the whole website every day.
* Copies the web.config and customizes the <appSettings>, <connectionString>, <assemblies> etc., as per the deployment configuration. For example, you can have different connection strings for different servers.
* Updates all JavaScript files with a version number so that in every deployment, a new file gets downloaded by client browsers.
* Updates default.aspx automatically with the modified script file name.
* Compresses all JavaScript files that gets deployed.
* Compresses all static HTML files using an Absolute HTML Optimizer.
* Creates a zip file which contains the deployment package.
* FTP the zip file to a target server.

部署脚本运行后,您需要做的就是在服务器上提取zip文件,这就是全部!

通过更改脚本末尾的FTP部分,您可以轻松FTP修改已修改的文件,而不是仅复制zip文件。