我正在争论我是否应该学习PowerShell,还是坚持使用Cygwin/Perl脚本/Unix shell脚本等等。
PowerShell的好处是,没有Cygwin的队友可以更容易地使用脚本;然而,我不知道我是否真的会写那么多通用脚本,或者人们是否会使用它们。
Unix脚本功能如此强大,PowerShell是否足以让我们切换到它呢?
以下是我在PowerShell中寻找的一些具体内容(或等效内容):
grep
排序
uniq
Perl (PowerShell与Perl的能力有多接近?)
AWK
sed
File(提供文件信息的命令)
等。
握
Select-String cmdlet和-match操作符使用正则表达式。此外,您还可以直接使用. net的正则表达式支持来实现更高级的功能。
排序
sort - object更强大(比我记得*nix的sort更强大)。允许对任意表达式进行多级排序。在这里,PowerShell对底层类型的维护有所帮助;例如,DateTime属性将被排序为DateTime,而不必确保格式化为可排序的格式。
uniq
Select-Object独特
Perl (PowerShell的功能有多接近Perl ?)
就Perl领域特定支持库的广度而言:还远远不及(目前)。
对于通用编程来说,PowerShell当然更具有内聚性和一致性,也更容易扩展。文本修改的一个缺口相当于Perl的。操作符。
哗啦��
自从使用AWK以来已经足够长了(肯定是>18年了,因为后来我只使用Perl),所以不能真正评论。
赛德
(见上图)
File(提供文件信息的命令)
PowerShell的优势并不在于它可以对文件系统对象做什么(它在这里获得了全部信息,dir返回FileInfo或FolderInfo对象),而是它是整个提供者模型。
您可以将注册表、证书存储、SQL Server、Internet Explorer的RSS缓存等视为对象空间,可以通过与文件系统相同的cmdlet进行导航。
PowerShell绝对是Windows的发展方向。微软已经将其列为未来非家用产品的要求之一。因此在Exchange中有丰富的支持,在SQL Server中有支持。这个只会膨胀。
最近的一个例子是TFS PowerToys。许多TFS客户端操作都不需要每次启动tf.exe(这需要一个新的TFS服务器连接等),并且更容易进一步处理数据。以及允许广泛访问整个TFS客户端API,以比在TF.exe的任何团队资源管理器中公开的更详细的信息。
我发现PowerShell编程不值得付出努力。
我有几年在Unix下编写shell脚本的经验,但是我发现用PowerShell做任何事情都非常困难。
似乎许多函数都需要您查询Windows管理界面并发出类似sql的命令来获得所需的信息。
例如,我想编写一个脚本来从目录树中删除具有特定后缀的所有文件。在Unix下,这将是一个简单的…
find . -name \*.xyz -exec rm {} \;
在几个小时的脚本之后。FileSystemObject和WScript。Shell并发出“SELECT * FROM Win32_ShortcutFile WHERE Drive = '”& Drive & " and Path = '" & searchFolder & "'”,我最终放弃了,并解决了Windows资源管理器的搜索命令,只是手动执行。可能有一些方法可以做到我想要的,但我没有看到任何明显的东西,MSDN网站上的所有示例都是如此微不足道,以至于毫无价值。
EDIT嘿,当然,当我写这篇文章的时候,我又戳了一下,发现了我遗漏的东西:remove-item命令的-递归选项是错误的(如果你使用get-help remove-item -detailed就会显示出来)。
我一直在尝试“remove-item -filter '* .xyz' -recurse”,但它不起作用,所以我放弃了它。
事实证明你需要使用get-childitem -filter '*。Xyz ' -递归| remove-item