理解对象是“获取”PowerShell的基本概念之一。加入我们,探索对象以及它们如何使PowerShell比目前任何其他shell都更好。
请务必阅读本系列之前的文章:
整个星期请继续关注本系列的其余部分。
你有没有想过是什么让PowerShell与传统的Linux shell(比如Bash)甚至传统的命令提示符区别开来?答案很简单:传统的shell输出文本,这使得格式化和过滤等操作变得困难。当然,有一些工具可以帮助你完成这项工作(sed和grep在脑海中浮现),但归根结底,如果你想做任何繁重的文本解析,你需要知道正则表达式,比如你的手背。
PowerShell利用了底层的.Net框架,并采用了不同的方法,使用对象而不是文本。对象只是某个事物的表示。它们是使用它们的部件和动作的集合。让我们来看看自行车的零件以及如何使用它们。
Net中的对象基本相同,只是有两个小区别:“部分”称为属性,“指令”称为方法。如果我们想将Windows服务表示为一个对象,我们可以决定使用三个属性来描述它:服务名称、状态和描述。我们还需要与服务交互,因此我们可以给对象一个Start、Stop和Pause方法。
通过将对象传递给Get-Member cmdlet,可以查看对象的属性和方法。PowerShell cmdlet输出的对象基本上是.Net framework中的底层类型,但是如果需要使用C语言或PSObject类型,则可以创建自己的对象。
有很多带有管道的Linux shell,允许您将一个命令输出的文本作为输入发送到管道中的下一个命令。PowerShell通过允许您获取一个cmdlet输出的对象并将其作为输入传递给管道中的下一个cmdlet,将此功能提升到下一个级别。诀窍在于知道cmdlet返回什么类型的对象,这在使用Get-Member cmdlet时非常简单。
Get-Service | Get-Member
由于超出本文范围的原因,属性和方法被联合称为类成员,这就解释了为什么使用Get-Member cmdlet来获取对象具有的所有方法和属性的列表。但是,Get-Member cmdlet还返回另一条重要信息,即底层对象类型。在上面的屏幕截图中,我们可以看到Get Service返回以下类型的对象:
System.ServiceProcess.ServiceController
由于PowerShell处理的是对象而不是文本,因此并非所有cmdlet都可以使用管道[1]链接在一起。这意味着我们需要找到一个cmdlet来接受System.ServiceProcess.ServiceController服务控制器管道中的对象。
Get-Command -ParameterType System.ServiceProcess.ServiceController
请注意,有一个名为Stop-Service的cmdlet;让我们看看它的帮助。
Get-Help –Name Stop-Service
InputObject参数似乎将ServiceController对象数组作为输入。通常,如果您看到一个名为InputObject的参数,它将接受来自管道的输入,但为了确保这一点,让我们看看该参数的完整帮助。
Get-Help -Name Stop-Service –Full
我们的怀疑是对的。所以在这一点上我们知道:
利用这些信息,我们可以做到以下几点:
Get-Service -Name ‘Apple Mobile Device’ | Stop-Service
这一次就到此为止。下次我们来看看如何格式化、过滤和比较管道中的对象。
如果你有任何问题,你可以发推特给我@taybgibb,或者只留下评论。
Powershell是一个完美的方式,一个新的编码器开始在Windows上。Powershell是命令行工具和脚本语言的等价部分。它使您能够通过您用来管理计算机的相同命令使计算机自动化。如果您有一个现代的Windows系统,那么您已经有了Powershell...
大多数用户从未听说过PowerShell,更不用说触摸它并试用了。这可能是因为这个名字,听起来像是只有铁杆IT极客才会使用的东西。或者是因为PowerShell的好处还不清楚。可能是因为最初的学习曲线。 ...
...收件箱分心,Windows桌面上都有一个很有用的工具。它叫PowerShell。 ...
使用Windows10的PowerShellcmdlet,您可以轻松地添加应用程序,以便在启动时自动触发VPN连接。自动化这个任务意味着当你使用某些应用程序时,你甚至不必考虑连接到VPN。 要利用PowerShell中的此功能,如果您还没有VPN服务,则必须...
Windows PowerShell具有内置的命令历史记录功能,可提供有关已运行命令的详细信息。与命令提示符一样,PowerShell只记住当前会话的命令历史记录。 如何使用命令行缓冲区 相关:极客学校:学习如何用PowerShell自动化Windows PowerShel...
如果您喜欢使用Windows PowerShell而不是命令提示符,您可能会喜欢右键单击Windows中的文件夹时从上下文菜单访问它。下面是如何做到这一点。 当您按住Shift键并单击文件夹时,Windows已经包含“在此处打开命令窗口”选项。不过,...
...可以轻松地重命名一个或多个文件,但使用命令提示符或PowerShell,您还可以执行更多操作。再加上第三方重命名工具,可能性是无穷的。让我们看看每个选项及其工作原理。 在windows资源管理器中重命名多个文件 Windows资源管...
....1和7上执行此操作的几种不同方法。 简单的方法:使用powershell命令 相关:极客学校:学习如何用PowerShell自动化Windows PowerShell是Windows中最强大的工具之一,所以它当然可以做一些简单的事情,比如列出你安装的程序。事实上...
...尝试运行它。这不需要太多时间,可能会有帮助。 向powershell重新注册windows应用商店 如果所有这些都失败了,您可以尝试重新注册Windows应用商店,这是您可以重新安装它。为此,您需要使用PowerShell,这是一种内置于Windows中...
...况下,对环境变量的更改对当前会话具有全局影响。对于PowerShell,情况正好相反,因为作用域用于隔离脚本的修改。在这里,我们将探讨作用域如何影响PowerShell脚本,以及如何在它们内部和周围工作。 什么是范围(a scope)? 在...