PowerShell是批处理文件的良好升级吗?

PowerShell是批处理文件的良好升级吗?,powershell,batch-file,Powershell,Batch File,我使用批处理文件(Windows)将服务器版本打包成zip文件,运行WinZip的命令行版本。以前我们是“手工”做这类事情的,但我开发了一个用批处理文件实现自动化的过程 批处理文件变得相当复杂,因为我们的产品很复杂(例如,我们这次发布的是哪些部分?我们是否也发布了配置文件?),我开始在批处理文件方面遇到一些令人沮丧的限制 将PowerShell作为批处理文件的“升级”进行调查是否是一件好事?或者,考虑到它将要做的大部分工作都是启动DOS命令,这完全是一种过激行为吗 奖励:PowerShell可以

我使用批处理文件(Windows)将服务器版本打包成zip文件,运行WinZip的命令行版本。以前我们是“手工”做这类事情的,但我开发了一个用批处理文件实现自动化的过程

批处理文件变得相当复杂,因为我们的产品很复杂(例如,我们这次发布的是哪些部分?我们是否也发布了配置文件?),我开始在批处理文件方面遇到一些令人沮丧的限制

将PowerShell作为批处理文件的“升级”进行调查是否是一件好事?或者,考虑到它将要做的大部分工作都是启动DOS命令,这完全是一种过激行为吗


奖励:PowerShell可以使用.NET程序集吗?如中所示,我可以开始使用SharpZip进行压缩吗?

我不确定powershell,但我是否可以推荐使用IronPython(如果您想访问.NET库)或普通python?您可以获得一种功能完善的编程语言,但限制非常少。

如果您有一个可行的解决方案,那么您就不需要使用powershell。话虽如此,如果您计划对流程进行更改或改进,那么我强烈建议您使用powershell。Powershell可以访问.Net程序集…大多数情况下。某些程序集的结构方式比其他程序集更为困难


如果您决定查看powershell,可以查看一些资源。

答案是肯定的-powershell可以使用.NET程序集。如果您需要连接代理,v1中会涉及到一些有趣的业务,v2会使其更加干净

只需调用LoadFile/LoadAssembly在内存中获取适当的库,然后就可以了

[Reflection.Assembly]::LoadFile('/path/to/sharpzip.dll') $zip = new-object ICSharpCode.SharpZipLib.Zip.FastZip $zip.CreateZip('C:\Sample.zip', 'C:\BuildFiles\', 'true', '^au') # note - I didn't actually test this code # I don't have SharpZip downloaded - just read their reference. [反射.Assembly]::加载文件('/path/to/sharpzip.dll') $zip=新对象ICSharpCode.SharpZipLib.zip.FastZip $zip.CreateZip('C:\Sample.zip','C:\BuildFiles','true','^au') #注意-我实际上没有测试这段代码 #我没有下载SharpZip,请阅读他们的参考资料。
还请注意,它支持各种压缩方法,如write-zip。

请看一看PowerShell社区扩展(PSCX),它是免费的,并且有zip cmdlet:

写拉链

写-BZip2

写GZip


我试图用powershell替换我使用的一个冗长的构建批处理文件。我觉得这很痛苦:至少在那个时候,文档集中在有趣的措辞上,以及你可以用它做什么很酷的事情,但在“完成简单的事情”类别中缺乏。我让它工作,但错误处理是不稳定的

YMMV,试试powershell,你可能会喜欢的。但是,请在更新生成批处理之前进行尝试


我的解决方案是:使用C#控制台应用程序。我有认真的日志记录,异常处理,可以使用我的实用程序功能,如果有什么不工作,我有一个真正的调试器。这是我想修改的第一个解决方案。

一方面,如果它有效,就不使用它。但听起来,随着时间的推移,这是您将要添加的内容,当然,需要编辑批处理文件的最终继任者/同事也需要理解它。如果您有编程背景,那么您可能会发现Powershell的强大功能使您的脚本变得更短,更易于阅读/维护(例如,即使只有完整的If语句和for/while循环)。另一方面,如果您对编程不太熟悉,很多人乍一看会觉得Powershell有点令人望而生畏

关于.NET部分,Powershell构建在.NET之上,因此您可以访问.NET程序集(但您应该始终先查看是否有可用的cmdlet)


我想推荐一本由李·霍姆斯(Lee Holmes)写的、由奥莱利(O’Reilly)出版的书,名为《Powershell烹饪书》(The Powershell Cookbook)。它提供了可用于一般任务的“食谱”;这可能会加快您实现脚本的时间,并会教您如何使用Powershell。

起初,我对Powershell非常兴奋。最后,在Windows上实现了一个强大的本机shell。然而,我很快意识到,与您最喜欢的unix shell相比,PowerShell实在是太冗长了。与使用bash和GNUToolsforWin32相比,即使是简单的操作也需要太多的输入

我喜欢shell知道不同类型的想法,但是如果我需要做那么多额外的工作,我更喜欢通过各种unix流编辑器获取必要的数据

编辑:我刚刚又看了一眼PowerShell,我不得不承认,它确实有一些非常有用的功能,这些功能是传统unix风格工具所无法提供的

首先,PowerShell拥有所有命令,这意味着它可以提供一组更加连贯的功能。参数是统一处理的,您可以使用通配符搜索命令、参数等,这非常有用


第二大特性是PowerShell允许您枚举流编辑器(如Windows注册表、证书存储等)通常不可用的源。当然,您可以使用工具为您完成这一任务并将其显示为文本,但PowerShell方法在我看来非常优雅。

您应该关注这一点,PowerShell创建者和架构师。如果你对技术细节不感到惊讶(有很多“哇”的瞬间),你会对杰弗里的热情感到惊讶:)。一旦掌握了基本知识,使用PowerShell就很容易变得非常高效。

我同意。如果要增强脚本,powershell是一个非常好的方法。您可能还想知道,通过powershell社区扩展,您可以获得处理zip文件输出的cmdlet(因此您不必担心SharpZip)。我同意您对powershell的保留意见。我玩过它。它的大部分功能似乎来自于能够与.NETAPI进行互操作,但它没有太多用于构造复杂脚本的工具。Python还是R