系统之家 - 系统光盘下载网站!

当前位置:系统之家 > 系统教程 > 详解WindowsPowerShell脚本的使用

详解WindowsPowerShell脚本的使用

时间:2012-10-14 09:59:21 作者:木木 来源:系统之家 1. 扫描二维码随时看资讯 2. 请使用手机浏览器访问: https://m.xitongzhijia.net/xtjc/20121011/17302.html 手机查看 评论

  Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework 的强大功能。它引入了许多非常有用的新概念,从而进一步扩展了您在 Windows 命令提示符和 Windows Script Host 环境中获得的知识和创建的脚本。本教程就为大家讲解WMI中的WindowsPowerShell脚本使用.

  WMI由三种基础元素组成:

  1.Provider -- 批准访问管理对象并提供有效的WMI API

  2.Classes -- 对象有属性和方法的WMI陈述

  3.Namespace -- 类的逻辑分组

  那么PowerShell是如何做到让WMI的访问更加容易的呢?

  首先,让我们来了解一下PowerShell为WMI提供的工具。总体来说有5个PowerShell 命令集,这让WMI的使用简单容易。这里我将把它们都列出来,但是我接下来只会着重讲其中一个(Get-WMIObject):

  1.Get-WmiObject—— 基于命名空间和提供的类别返回对象

  2.Invoke-WmiMethod——调用WMI程序(通常用于执行静态程序)

  3.Register-WmiEvent——用于订阅WMI事件

  4.Remove-WmiObject -- 删除一个现有的WMI类的实例(要清楚,它实际并没有删除类本身,而是在内存中这个类的实例)

  5.Set-WmiInstance -- 创建或更新一个现有WMI类的实例(要谨慎地使用它,因为它实际上会写入WMI库)

  现在让我们来解决WMI中最大的难题,搞清楚它究竟是什么,并且能提供什么数据。

  你可以依靠下面的代码来写程序:

  $Root = "\\.\ROOT:__namespace"

  $WMIProv = New-Object System.Management.ManagementClass

  ($Root)

  $WMIProv.GetInstances() | Select Name(但是,这比其它任务更复杂些。幸运的是,你不用经常这么做。)

  下面是你通过特定命名空间列出提供类的方法(默认是Root\CIM2,它包括所有的Microsoft Win32类):

  # On local machine

  Get-WmiObject –Namespace Root\SecurityCenter –List

  # On Remote machine

  Get-WmiObject –Namespace Root\SecurityCenter –List

  –Computer core

  # To filter you can use wildcards

  Get-WmiObject –Namespace Root\SecurityCenter –List

  *firewall*

  # To list the classes for HyperV on remote server

  Get-WmiObject –Namespace Root\Virtualization –List

  –Computer core(这很艰难,但是你可以通过WMI浏览器或微软的PowerShell Scriptomatic等免费工具来作弊。)

  现在是时候坐下来了解一下Get-WMIObject的不寻常之处了,它是五个命令集中最有用的一个。工具箱里有了它,你几乎与所有你能想到的任一块数据(微软相关的系统)都只有一线之隔。有超过600个Win32类,用来显示CPU、内存、磁盘、进程、网络、BIOS和USB等信息。激动吗?等一下你就会知道它有多简单。

  获取操作系统的信息:

  Get-WmiObject –class win32_OperatingSystem获取计算机系统的信息

  Get-WmiObject –class win32_ComputerSystem获取磁盘信息:

  Get-WmiObject –class Win32_LogicalDisk获取网络信息:

  Get-WmiObject –class Win32_NetworkAdapterConfiguration只要尝试一下 - 就是那么简单。

  让我们看一个使用WMI获取IP信息的例子。下面有效的脚本代替了ipconfig和它通常的awful输出。

  function Get-IP

  {

  [Cmdletbinding()]

  Param(

  [alias('dnsHostName')]

  [Parameter(ValueFromPipelineByPropertyName=$true,ValueFromPipeline=

  $true) [string]$ComputerName = $Env:COMPUTERNAME

  )

  process

  {

  $NICs = Get-WmiObject

  Win32_NetworkAdapterConfiguration -Filter

  "IPEnabled='$True'" -ComputerName $ComputerName

  foreach ($Nic in $NICs)

  {

  $myobj = @{

  Name = $Nic.Description

  MacAddress = $Nic.MACAddress

  IP4 = $Nic.IPAddress | where{$_

  -match

  "\d+\.\d+\.\d+\.\d+"}

  IP6 = $Nic.IPAddress | where{$_

  -match "\:\:"}

  IP4Subnet = $Nic.IPSubnet | where{$_

  -match

  "\d+\.\d+\.\d+\.\d+"}

  DefaultGWY = $Nic.DefaultIPGateway |

  Select -First 1

  DNSServer = $Nic.DNSServerSearchOrder

  WINSPrimary = $Nic.WINSPrimaryServer

  WINSSecondary = $Nic.WINSSecondaryServer

  }

  $obj = New-Object PSObject -Property $myobj

  $obj.PSTypeNames.Clear()

  $obj.PSTypeNames.Add('BSonPosh.IPInfo')

  $obj

  }

  }

  }你可以在微软的网站上找到更多的关于WMI的信息,还能看到WMI术语和Win32类的列表。

  看了这么多,也许你还不了解什么是WMI,小编顺便帮你讲解下, Windows Management Instrumentation(WMI)是能够改变你日常生活的工具之一。维基百科解释说WMI旨在“规定一个独立环境标准的非专有设置,它让管理应用程序之间能共享管理信息。”

发表评论

0

没有更多评论了

评论就这些咯,让大家也知道你的独特见解

立即评论

以上留言仅代表用户个人观点,不代表系统之家立场

其他版本软件

人气教程排行

XP系统推荐

扫码关注
扫码关注

扫码关注 官方交流群 软件收录