我问,因为PowerShell让我很困惑.
我一直在尝试使用PowerShell编写一些部署脚本,但我对结果并不感兴趣.我有一个喜欢PowerShell的同事并且每时每刻都在捍卫它.这位同事声称PowerShell从未被写成强大的外壳,而是写给:
a)允许你在命令行上查看和查看.NET程序集(为什么这是PowerShell存在的原因?)
b)托管在.NET应用程序中进行自动化,类似于KDE中的DCOP以及Gnome如何使用CORBA.
c)被视为".NET脚本"而不是实际的shell(与b相关).
我一直觉得Windows错过了一个很好的方法来敲出自动化脚本.在很多情况下cmd太简单了,而且WSH太过钝(尽管组合可以成功使用,但我不是粉丝).当我第一次听说PowerShell时,我觉得Windows终于得到了一个能够帮助完成许多任务自动化的体面shell,但是最近的经历和我的同事告诉我.
为了清楚起见,我不会怀疑它是基于.NET建立的,还是它传递对象而不是文本(尽管我的Unix背景:]),而且我并不认为PowerShell没用,但是从我所看到的,它并没有解决我希望它能很好地解决的问题.一旦走出.NET/Powershell世界,事情就会让你感到舒适和温馨.
所以尽管如此,MS通过创建PowerShell解决了什么问题,还是我怀疑是一个政治上的混蛋孩子?我用谷歌搜索并没有找到任何能够为我提供足够回答的东西,但引用的次数越多越好.
Joe*_*oey 36
PowerShell实际上是由几个部分构建的:一个成熟且可扩展的自动化平台和一个现代管理shell.
前者主要用于最近的Exchange和其他服务器产品的管理GUI.GUI只是PowerShell的一个包装器,可以解决繁重的问题(有点像UNIX GUI程序,作为命令行程序的包装器).
Jeffrey Snover(PowerShell发明人)详细阐述了如何创建PowerShell以及它应该解决的目标和问题.
在我看来,作为shell的PowerShell显然是作为cmd(易于查看)和Windows脚本宿主的替代品(Windows Script Host近年来没有引起太多关注,尽管它与.NET有类似的概念)它的一天[一个平台,多种语言与ActiveScripting],但与.NET微软基本上把它放在休息和复活可能不是他们的选择).
它将Windows管理的大多数方面统一在您只需要学习一次的常见概念和方法中.此外,PowerShell对我的强大作用源于它绕过对象,这可能解释了当你走出.NET/PowerShell世界时你遇到问题的原因String[].但是对于许多你会在cmd中调用外部程序的东西,有一个cmdlet会为你做这个.
Jos*_*osh 10
作为一名开发人员,我可以告诉你,我不再需要在一个文件夹中放置一堆ConsoleApplication42项目.
作为一家小公司的开发人员,我几乎做所有事情(DBA,操纵路由器,从交换机拨打电话详细记录,为客户监控和绘制带宽等等).我可以告诉你,PowerShell非常疲惫不堪Windows中需要的差距以及它构建在.NET上的事实提供了一个无缝的升级路径,当PowerShell管道太慢而无法处理数百万次迭代或需要更永久,强类型的实现时.
无论如何,我想问题是,如果你没有迫切需要,为什么要切换到PowerShell?我的意思是现在学习它很好,因为它基本上是微软所有东西的新管理界面.但如果这不影响你,那么如果你认为自己没有获得任何东西,就不要打扰.
编辑(回应下面的评论)
听起来你正在尝试使用.NET Process类来启动exe并重定向它的stdout,以便调用者可以读取它.我同意这是一个令人痛苦的.NET,但幸运的是,PowerShell非常简单地为你做了这一切.至于捕获结果并仍然将其写入显示器,虽然命令不是一个非常着名的命令,但它通常不常用,这也很简单.这是一个例子:
# I always find it easier to use aliases for external commands
Set-Alias csc C:\Windows\Microsoft.NET\Framework64\v3.5\csc.exe
# Create some source file
Set-Content test.cs @"
class Program {
static void Main() {
System.Console.WriteLine("Hello World");
}
}
"@
# Call CSC.EXE
# the output of csc.exe is written to results.txt and piped
# to the host (or select-string if you prefer)
csc test.cs | Tee-Object -file results.txt
# Check for errors
if ($LASTEXITCODE) {
# this is where community extensions would come in
# handy. powershell 2.0 also has a command to send
# mail but in 1.0 you can grab one from poshcode.org
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16104 次 |
| 最近记录: |