我知道的明显区别是能够与某些 MS 产品(例如 Exchange)交互。但对于不需要管理此类产品的人来说,Powershell 有什么优势?学习 Powershell 的理由是什么(假设我精通 bash 和 cygwin)?
答案1
Jeffrey Snover(PowerShell 设计者)在 StackOverflow 上给出了一个很好的答案:
答案2
最明显的优势:只要管道中不涉及文本输出(或旧命令),您就不会通过管道移动文本,而是移动 .NET 框架对象的实例及其所有属性和方法。
这允许更具表现力和更少歧义的管道处理,并且完全不受区域设置和语言设置的影响(例如,考虑日期或数字格式以及如何将它们通常视为字符串)。
这也意味着您可以在脚本环境中访问大量 .NET 框架功能。
答案3
无需对范式进行价值判断,PowerShell 的主要优势在于 .Net 集成和在职 - 从 Windows 2008 服务器开始,它默认捆绑在一起,并在 2003 和 2003 R2 的服务包中加载。
公平地说,还有其他几种脚本选择 - 例如 Perl 和 Python。如果您想要本机 .Net 集成,Python 还为您提供了使用 IronPython 的选项。事实上,只需将 IronPython 放入目录中即可顺利安装。您可以轻松地将其捆绑到应用程序中,而无需单独的安装步骤。
Powershell 的关键优势有点像一把双刃剑。虽然流式 .net 对象非常有用且具有其优势,但它对组件与框架良好配合的能力提出了更多假设。要真正发挥作用,您需要使用 cmdlet 包装内容。虽然文本输出在某种程度上更底层且需要解析,但它对组件与框架良好配合的负担较小。
随着时间的推移,我期望看到更多的 Windows 生态系统(包括 MS 和第三方组件)配备 cmdlet 包装器,以便它们与 Powershell 配合使用。随着这种情况的发生,Powershell 的用例将变得更加强大。
从历史上看,Windows 从管理角度来看的一个主要传统弱点是其对脚本的支持不佳。微软在几年前就意识到了这一点,经过几次不成功的尝试(例如 WSH),Powershell 是微软迄今为止最可靠的解决方案。
答案4
优点:-
任务自动化:将用户添加到 1000 台机器等任务手动执行起来非常繁琐。但借助 powershell,您只需编写一个简单的脚本,运行该脚本,它就会自动配置所有客户端。因此,通过自动重复这些步骤可以节省时间。可以开发和安排 Windows PowerShell 备份\恢复脚本(使用 Windows 任务计划程序),而中央管理用于一次性备份和恢复。Windows PowerShell 的优势在于可以针对 SQL 快照而不是生产数据库运行。Windows PowerShell 命令的参数之一将导致生成 SQL 快照,然后 Windows PowerShell 将针对快照而不是生产数据库运行操作。这将减少备份操作对生产环境的资源影响。使用 Windows PowerShell,SharePoint 管理员可以更精细地控制备份或恢复选项。
远程处理功能的改进:- 意义重大,首先,Windows 7 桌面可以使用 PowerShell 命令与服务器通信。因此,使用 Windows 7 笔记本电脑的技术人员可以通过运行 PowerShell 脚本远程配置其服务器。其次,驻留在服务器上的用 PowerShell 编写的客户端登录脚本可以更轻松地在 Windows 7 上运行。此外,使用 powershell,我们可以轻松控制远程计算机,可以在其上执行重要任务,并可以轻松地大规模应用这些更改。远程处理使用网络资源。因此,当我们使用 powershell 时,我们不使用 GUI,因此,某项任务所需的带宽减少了,网络过载问题也得到了解决。
一致性:- 如果您有一套完成任务的程序,使用 Windows Powershell 将确保您不会错过任何步骤,尽可能地实现自动化,并让 Powershell 提示您完成无法自动化的内容。
.NET 支持:- Powershell 支持 .NET 框架。因此,所有系统功能都可以轻松添加到 powershell 脚本中,从而帮助程序员开发脚本。因此,VDI 任务的自动化变得更加容易、简单和高效。
减少手动工作:- 管理员现在只需编写脚本即可远程创建、删除或修改虚拟机的设置。他无需前往个人电脑完成工作。此外,编写的脚本在所有计算机上都可接受。因此,管理员无需一次又一次地重写它们。
可重用性:- 编写用于执行特定任务的脚本可以存储起来以供以后使用,也可以与其他脚本组合以执行不同的任务。因此,只需运行脚本即可以更简单的方式执行重复任务。这节省了管理员配置机器的时间和金钱。
管道支持:- powershell 最大的优势在于你可以将任何内容通过管道传输到任何内容,而无需解析文本。你可以将一个命令的输出作为新命令集的输入,从而解决复杂的任务。