PowerShell操作WMI概览

已有人阅读此文 - -

PowerShell操作WMI概览知识,PowerShell操作WMI概览图片 PowerShell操作WMI概览内容,PowerShell操作WMI概览介绍,PowerShell操作WMI概览,PowerShell,操作,WMI,概览,WMI,可以,从,的正文:

PowerShell操作WMI概览包含:(奥斯特霍特) 可以申请发布内容 当你完成了JavaSE和JavaEE的学习后, 集成了各种键盘命令和功能。 用代码行来评估软件开发的进度就像用权重来评估飞机建造的进度一样。 软件通常在beta测试完成后不久发布。 在编程时要牢记这一想法:就像将来要维护你的代码的人是一个知道你住在哪里的残忍的疯子。 (Gerald Weinberg) PoT是一个熟悉的概念,所以很容易理解。 如果一切都好,你就失业了。 有三种:懒惰、易怒和傲慢。 你写的任何超过六个月没读过的代码,就像你再看别人的代码一样。 这些允许更快和更清晰的编码。 绝对有必要做正确的事情。 bootstrap是一个前端框架 将这些库集成到ruby on rails框架中,以扩展代码的功能。 移动到C++或许多其他编程语言中的一种。 (马丁·戈尔丁) 你越早落后,你就必须赶上更多的时间。 红色括号给出了一个基本示例,表示另一个括号必须在附近。 PowerShell操作WMI概览介绍的方法与命令流程等可以帮助到读者。

PowerShell操作WMI概览例图

WMI可以从计算机中收集大量系统信息。但有时候这些信息不易看懂,另外文档也不够友好。WMI是一个外部技术,PowerShell仅仅与其接口进行交互而已。

WMI是Windows 2K/XP管理系统的核心,对于其他的Win32操作系统,WMI是一个有用的插件。

WMI的作用是:

①通过它可以访问、配置、管理和监视几乎所有的Windows资源,比如用户可以在远程计算机器上启动一个进程。

②设定一个在特定日期和时间运行的进程。

③远程启动计算机。

④获得本地或远程计算机的已安装程序列表。

⑤查询本地或远程计算机的Windows事件日志等等。

在最顶层,WMI被组织成命名空间(namespaces)。可以把命名空间想象为关联到特定产品或技术的一个文件夹。比如,“root\CIMv2”,该命名空间包含了所有Windows操作系统和计算机硬件信息。而“root\MicrosoftDNS”命名空间包含了所有关于DNS服务器(假设你已经在计算机中安装了该角色)的信息。

在命名空间中,WMI被分成一系列的类,每个类都是可用于WMI查询的管理单元。比如,在“root\SecurityCenter”中的“Antivirus-Product”类被设计用于保存反间谍软件的信息;在“root\CIMv2”中的“Win32_LogicalDisk”类被设计用于保存逻辑磁盘的信息。但是即使一个计算机上存在某个类,也不代表计算机实际上安装了对应组件。比如无论是否安装了磁带驱动程序。“Win32_TapeDrive”类在所有的Windows版本上都存在。不是所有的计算机都包含相同的WMI命名空间或类。

WMI的未来

在WMI大部分生命周期中,微软都没有把过多的精力放在对其内部控制上(最近有所好转)。微软为WMI制定了一系列的编程标准,但是产品组或多或少把精力放在如何实现类和是否对其文档化。结果就是使得WMI变得混乱。

所谓的“WMI Cmdlets”,例如“Get-WmiObject”与“Invoke-WmiMethod”——这些都是遗留命令,意味着它们依旧能工作,但是微软不会对它们进行后续开发投入。它们与远程过程调用(RPC)交互,也就是说,只有在防火墙支持状态审查时才能通过防火墙(实际上很难)。

新版的“CIM Cmdlets”,例如“Get-CimInstance”与“Invoke-CimMethod”——它们或多或少等价于旧版本的“WMI Cmdlets”,但是它们通过WS-MAN(由Windows远程管理服务实现)交互,替代原有的RPCs。

在Windows Server 2012 R2以及更新版本中,旧版的WMI默认为禁用状态,因此尽可能使用CIM。除此之外,CIM cmdlet可以使用旧版的RPC(或DCOM)协议通讯,因此与老机器进行通讯时,你也可以仅使用CIM cmdlet。

在执行WMI筛选的时候,筛选语法是传递到WMI,而不是由PowerShell处理,所以你必须使用WMI规定的语法去替代内置的PowerShell操作符。

Get-WmiObject win32_process -filter {name=‘notepad.exe‘} |Invoke-WmiMethod -Name Terminate

WMI的(微弱)优势

虽然WMI所需的RPC网络通信难以穿透防火墙,但WMI能够适用的计算机数量最多(当前来说);CIM只需要更新更简单的WS-MAN通信,但在老版本的Windows默认情况下,并没有安装WS-MAN。

WMI串行与并行执行

Get-WMIObject命令会与一台或多台远程计算机进行连接,但是通过串行方式实现,效率比较低。

备注:gwmi是Get-WMIObject的缩写

gwmi -class win32_bios -computer server-r2,localhost | format-table @{label=‘ComputerName‘;expression={$_.__SERVER}},

@{label=‘BIOSSerial‘;expression={$_.SerialNumber}},

@{label=‘OSBuild‘;expression= {gwmi -class \win32_operatingsystem -computer $_.__SERVER | select-object -expand BuildNumber}} -autosize

在-ScriptBlock参数(或者是该参数的别名,-Command)中指定的任意命令都会并行发送到指定的每台计算机。可以同时访问多达32台计算机(除非你修改了-ThrottleLimit参数允许同时访问更多或者更少的计算机),所以当你指定了超过32个计算机名称,仅有前32台计算机会开始执行该命令。当在前32台计算机即将结束时,剩余的计算机才可以开始执行这些命令。另外,当在所有计算机上都执行结束后,上层的父作业会返回一个完整的状态。

备注:Get-CimInstance是Get-WMIObject的新式写法

invoke-command -ScriptBlock { Get-CimInstance -ClassName win32_process } -ComputerName WIN8 -Credential DOMAIN\Administrator

备注:本文部分内容参考图书《powershell实战指南第三版》

为什么要用脚本?

回顾九十年代,Windows NT之所以获得成功,原因之一就在于相对而言这个操作系统比较容易使用,任何能够使用Windows 3.1的用户差不多就可以管理一个简单的NT网络(这在今天听起来有点不可思议,但事实是,NT 3.1比Windows 2K/XP功能少得多,因而简单得多)。只要看看NT的控制面板,这个操作系统可以做些什么就大致有个印象了。

  随着操作系统的发展,原来友好的界面变得更加友好。在Windows 2K/XP中,几乎每一个操作过程都有向导,每一个操作系统级的对象都有图形化的属性页;不同的操作选择引导你到达最终完成任务的对话框,MMC允许你把常用的工具(甚至是第三方的工具)插入到定制的工具集。

  然而,高级用户感到友好的GUI实在太繁琐了。另外,尽管在命令行上也可以执行某些任务,但命令行没有图形工具那样完备的功能。为了让Windows 2K/XP下的操作任务自动化,一种较好的途径是通过脚本程序直接访问图形化工具访问的管理接口。WMI允许用户通过一个统一的接口,用脚本语言访问操作系统的几乎任意一个部分。当然,用脚本对WMI编程也有一些限制,例如不能直接访问Win32 API。

 WMI SDK要求操作系统必须是Windows 2K/XP或者NT 4.0 SP4或更高版本;尽管Win9x系统上可以安装WMI支持软件,但SDK不能在Win9x上运行。另外,为支持SDK的ActiveX控件,SDK还要求有IE 5.0或更高版本。SDK对机器性能的最低要求是:Pentium处理器,32 Mb的RAM,40 Mb的磁盘空间,以及至少要有800 x 600、256色的显示设备。对于运行Windows 2K/XP的机器来说,这些要求应该不会成为问题。CIMOM默认以服务的形式运行,但如果机器没有网卡,CIMOM不能作为服务运行,不过此时可以作为一个应用运行,只需执行winmgmt.exe即可。winmgmt.exe在%systemroot%/system32/wbem的WMI主目录下。

  SDK必须由管理员组的成员安装。安装过程很简单,执行WMISdk.exe启动向导,指定安装的目标目录(默认是/program files/wmi)。选择要安装的可选组件(默认安装除了SNMP支持以外的所有组件),最后点击Finish。安装SDK不需要重新启动。安装完成后,“开始/程序”菜单上会增加一个WMI SDK组。

  点击WMI SDK程序组的WMI CIM Studio。CIM Studio提示连接名称空间,并显示默认连接的名称空间是root/cimv2,确认即可。如果你用Administrator身分登录Windows,再次点击确定以当前身份登录;如果你用其他的身份登录Windows,请改用Administrator登录。

  现在,假设我们要在当前的机器上查找一个对象:C:驱动器。我们不知道C:驱动器在CIM或WMI中的具体名称,浏览CIM Studio列出的数百个类又太麻烦,怎么办呢?可以使用Find按钮(左边上方的望远镜,参见图三)。图二显示了点击Find按钮后显示的Search for Class对话框,在这里输入我们猜想C:驱动器的类名称中应当包含的单词,然后点击Go!按钮。由于我们正在寻找一个命名的磁盘分区,而且我们知道Windows把这种分区叫做logical disk或logical drive,因此这里的搜索关键词可以是logical。当然,搜索关键词也可以是disk,但这时会有大量的搜索结果出现。

自从PowerShell的出现,WMI功能已经被完全整合到了PowerShell里面。在PowerShell中, WMI拥有多个类型的种类,每个种类都代表一个内部组件:Win32_proces代表当前系统所运行程序。 Win32_Service代表当前系统所运行服务等等。每个种类都有它自己的属性,我们可以使用WQL语言来进行查询。它的语法与SQL语言非常接近。那么要在Windows环境中列出所有种类, 我们可以使用PowerShell Get-WmiObject cmdlet来实现。

标签:                           

原文地址:https://blog.51cto.com/543925535/2438751

1PowerShell操作WMI概览系部分转载自网络,如有对程序员或作者侵犯,请联系我们立即删除,另:本文仅代表作者个人观点,与本网站无关。

2PowerShell操作WMI概览这篇文章的原创性以及文中对于编程运维专业度的陈述文字 和内容未经本站证实,对本文以及其中全部或者部分内容及图片的有效性、文字的真实性、完整性、及时性本站不作任何保证或承诺以及推荐,本站非盈利,有对图片文字不适的请程序员及读者仅作参考并自行核实相关内容

3这篇PowerShell操作WMI概览的文章,涉及的PowerShell,操作,WMI,概览,WMI,可以,从,命令,变量,函数,代码,类,库等皆是代称