由于PowerShell基于.Net框架,并结合了各种其他技术,如WMI和CIM,因此实现同一目标的方法总是不止一种。快来加入我们,学习如何选择最佳的方法来完成我们的任务。
请务必阅读本系列之前的文章:
整个星期请继续关注本系列的其余部分。
在本系列的前面,当我们向您介绍管道时,我们向您展示了如何获取一个cmdlet输出的对象,并使用如下方式将它们作为输入传递给另一个cmdlet:
Get-Process -Name notepad | Stop-Process
这将杀死任何名为“记事本”的进程。但您可能想知道PowerShell是如何用一个命令杀死所有notepad实例的。答案就在Stop-processcmdlet的帮助下。
help Stop-Process –Full
如果查看syntax部分中的最后一行代码,您可以看到InputObject参数接受Process[]类型的对象,并且每当您看到一个类型后跟两个方括号时,这意味着该参数接受前面的一个或多个类型。在这种情况下,它接受一个或多个进程对象。从技术上讲,我们可以说InputObject cmdlet接受进程数组。每当您有一个cmdlet以这种方式支持批处理操作时,请使用它。这是第一选择。
虽然WMI不是从Microsoft HQ发布的最好技术,但它确实在如何处理对象集合的列表中名列第二。我们可以很容易地从Win32\u进程类中获取运行的进程列表,如:
Get-WmiObject –Class Win32_Process
由于WMI查询返回它自己类型的对象,因此您需要寻找一个可以停止该进程的方法,因此让我们通过管道来获取成员。
Get-WmiObject –Class Win32_Process | Get-Member
看起来最需要停止的是terminate方法,所以这一定是一个。要调用WMI对象上的方法,只需通过管道将其调用WmiMethod并指定方法的名称。
Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate
太好了,成功了。每当您在WMI中获得ReturnValue为0时,请记住命令已成功执行。
如果其他两种方法失败,那么如果必须对一组对象执行某些操作,则可以枚举整个对象并对每个对象执行操作。首先,您必须找到停止单个进程的方法。
Get-Process | Get-Member -MemberType Method
很好,看起来我们可以使用Kill方法,然后通过管道将ForEach对象全部杀死。
Get-Process -Name notepad | ForEach-Object -Process {$_.Kill()}
在这里,我们获取所有返回process的process对象,并将它们传递给ForEach Object cmdlet。很像Where Object cmdlet,我们用$表示管道中的每个对象,我们可以调用$上的Kill()方法。尽管如此,枚举集合的速度要比上述方法慢得多,只能作为最后一个结果使用。
选择一
Get-Process -Name notepad | Stop-Process
选择二
Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate
选择三
Get-Process -Name notepad | ForEach-Object -Process {$_.Kill()}
这一次就到此为止,各位,下周见,更多的PowerShell乐趣。
大多数用户从未听说过PowerShell,更不用说触摸它并试用了。这可能是因为这个名字,听起来像是只有铁杆IT极客才会使用的东西。或者是因为PowerShell的好处还不清楚。可能是因为最初的学习曲线。 ...
...收件箱分心,Windows桌面上都有一个很有用的工具。它叫PowerShell。 ...
微软于2020年3月4日宣布PowerShell 7.0。这是PowerShell、Microsoft跨平台命令行shell和脚本语言的最新主要更新。下面是什么新的,以及如何在Windows PC上安装它。 powershell 7有什么新功能? 最新版本PowerShell 7是在以前的PowerShell Core 6.1基...
使用Windows10的PowerShellcmdlet,您可以轻松地添加应用程序,以便在启动时自动触发VPN连接。自动化这个任务意味着当你使用某些应用程序时,你甚至不必考虑连接到VPN。 要利用PowerShell中的此功能,如果您还没有VPN服务,则必须...
Windows PowerShell具有内置的命令历史记录功能,可提供有关已运行命令的详细信息。与命令提示符一样,PowerShell只记住当前会话的命令历史记录。 如何使用命令行缓冲区 相关:极客学校:学习如何用PowerShell自动化Windows PowerShel...
...可以轻松地重命名一个或多个文件,但使用命令提示符或PowerShell,您还可以执行更多操作。再加上第三方重命名工具,可能性是无穷的。让我们看看每个选项及其工作原理。 在windows资源管理器中重命名多个文件 Windows资源管...
....1和7上执行此操作的几种不同方法。 简单的方法:使用powershell命令 相关:极客学校:学习如何用PowerShell自动化Windows PowerShell是Windows中最强大的工具之一,所以它当然可以做一些简单的事情,比如列出你安装的程序。事实上...
...尝试运行它。这不需要太多时间,可能会有帮助。 向powershell重新注册windows应用商店 如果所有这些都失败了,您可以尝试重新注册Windows应用商店,这是您可以重新安装它。为此,您需要使用PowerShell,这是一种内置于Windows中...
Windows10包括一个内置在PowerShell中的包管理工具。在最终版本中,它被命名为“PackageManagement”,但它仍然基于一个名为OneGet的开源项目。 PackageManagement(aka OneGet)在技术上不是包管理器。它是一个包管理器—一个框架和一组Powe...
由于几个主要与安全相关的原因,PowerShell脚本不像批处理脚本那样易于移植和使用。但是,我们可以将批处理脚本与PowerShell脚本捆绑在一起,以解决这些问题。在这里,我们将向您展示一些问题领域,以及如何构建批处理脚本...