枫叶交流论坛



 
标题: 使用WindowsPowershell来过滤输出项
admin





UID 1
精华 0
积分 4707
帖子 3656
阅读权限
注册 2006-12-23
状态 离线
发表于 2007-5-21 18:36  资料 短消息 
使用WindowsPowershell来过滤输出项

作者: Christa Anderson,  出处:TechTarget, 责任编辑: 袁绍龙, 
2007-05-16 09:10
  用户使用cmdlet命令同时结合变量来过滤输出项……

  上个月,我们使用Windows管理规范(Windows Management instrumentation,简称WMI)向大家展示了Windows powershell如何和外部设备一起工作。那次专栏,我们先做了下磁盘目录清点,然后进行过滤,再把最后的结果排列出来。这样大家就只能看见在大量数据中的一部分有效的数据结果了。

  在刚开始那个练习的时候,你也许注意到了存在大量的数据结果。但你们还记得么?当时我就能很轻松的开始因为我当时知道我所需要的那个帮助课程的确切的名称。正象我当时所说,这有成百上千的帮助(如果你一使用get-wmi命令的话,你就将看到),我不可能记得JOY TO THE WORLD里的每个字,很显然,我也不可能记得Windows管理规范里的每一个帮助课程的名称。但为了做成那个演示,我不得不玩点小把戏,所以在开始前我选择使用了一个我知道的课程帮助。

  那就让我们不使用小骗局来过滤内容就能使浏览和查看windows管理规范变成容易。其实这很简单,我们使用一种新的叫cmdlet(command-let)的小命令结合变量一起使用。

  基本文本过滤

  用VBScript过滤文本输出在规则表述上浪费了很多时间。然而,powershell虽然也支持规则表述,但它并不是必须的。你可以用select-string这个小命令来代替。它之所以简洁,是因为它这样就可以工作了:用小命令行填入你所要搜索的信息,它就给出你要查找的文本。

  "PowerShell", "Seashell", "Monad" | select-string-pattern "PowerShell"

  在这个命令行中,你建立了三个字符串,并且用管线连接SELECT-STRING命令,告诉他们你所要找的字符串读取值为POWERSHELL。这正是此命令行的作用。使用此命令行的时候,要严格按照上面所给出的格式进行书写,哪怕是多了一个空格,系统也会报告错误。但是查找完整的字符串并没有那么大的作用。那要是你想再从刚才的结果里找到带有“SHELL”字样的字符串,你该怎么做呢?你只需要对命令行做一点点修改,把pattern后面引号里的powershell改成shell就可以了。

  "PowerShell", "Seashell", "Monad" | select-string -pattern "shell"

  这个命令行将返回“PowerShell”和“Seashell”两个值。因为Select-String默认是大小写不敏感的,但是也不是非得这样,您可以对这个例子做一个简单的修改。

  "Powershell", "Seashell", "Monad" | select-string -pattern "shell" –casesensitive

  尽管“shell”字样同时出现在PowerShell和Seashell里,但这次返回的结果将只是“Seashell”一个了。

  查找文件

  滤出你输入的正文并不象你想象得那样。当你要查找匹配的条目,而一堆的数据在放在那,你又不知道你里都放了些什么的时候,它就显得非常的有用了。当这个时候,你可以使用google桌面在你的电脑中进行查找,现在你也可以使用Select-String了,它与google桌面有异曲同工之妙。

  举个例子,比如说我正致力写一个脚本,其间需要一些Select Case的代码实例。我知道有一个装着各种各样脚本样本的大库,但是我并不想一个个的去看每一个例子,因为我也不知道那里是否就真的就有我所需要的东西。因此,我使用select-string来搜索库里的目录,下面将会演示。(如果只是想在当前的文件夹进行搜索,则不需要提供路径。)输出的结果就是每个脚本的相关行,如下所示:

  Select-string -path "c:scripts*.vbs" "Select Case"

  C:scriptsconcatenate.vbs:2:Select Case Wscript.Arguments(0

  C:scriptsenhanced.vbs:7:Select Case sInput

  C:scriptssmartmapinventory.vbs:4:Select Case

  colNamedArgs.Exists("name")

  好了,现在我就可以打开脚本文件来看一下Select Case是怎么使用的了。

共2页。 1 2 :


点击看源文
顶部
[广告] 全新不用K线图的傻瓜股票分析软件财富股市侦探准确性高www.cf008.com
admin





UID 1
精华 0
积分 4707
帖子 3656
阅读权限
注册 2006-12-23
状态 离线
发表于 2007-5-21 18:36  资料 短消息 


作者: Christa Anderson,  出处:TechTarget, 责任编辑: 袁绍龙, 
2007-05-16 09:10
  用户使用cmdlet命令同时结合变量来过滤输出项……

  过滤带有变量的内容

  既然已经知道大概如何使用了,那么下面就再两塞选一个命令的结果。正如我们开始的时候讲的那样,我们想要一个get-wmi-list。当输入这个字样的时候,就出现了许许多多的结果,多得让你难以应付。如果想便于处理,我们将WMI作为搜索对象,然后把它保存成一个变量。

  Powershell里的变量都是以dollar($)符号开头的。把一个变量赋值给另外一个变量(我们从简单的赋值开始做起)的做法,就是让其中一个等于另外一个就可以了,如下:

  $myvariable = 123 或者

  $myvariable = "Now is the time for all good men" 或者

  $myvariable = get-date (是使变量myvariable是值是当前的日期),欲查看变量的内容,只要在命令提示行输入它的名字就可以了。

  可能你就会想到,我们可以把get-wmi-list所得到的那个恼人的大结果赋值给一个变量。象这样:

  $wmi = Get-Wmiobject –list

  那好,现在我们已经把长列表放入一个变量里去了,那么再用select-string进行删节。象这样:

  $wmi | select-string -pattern "Win32_"

  这行命令就将返回所有在WMI帮助课程里的带“Win32_”字样的字符串。这将会在windows里缩减许多课程帮助的范围。但是,剩下的还是一个很长的列。怎么能让这个列再缩减一些呢?也许我们想得到的结果是还带有“network”字样的。和刚才所做的一样,再把结果赋值给一个变量。这次,我们的新变量$w32wmi所包含的内容就是我们所要的真正的结果了。既然我们已经得到所需的结果了,那么在这个基础上再做一个新研究:

  $w32wmi | select-string -pattern "Network"

  敲入这行命令后,我们就得到了一些很易于管理的结果了,如下:

  VISIONTHINGROOTcimv2:Win32_TSNetworkAdapterSettingError

  VISIONTHINGROOTcimv2:Win32_NetworkClient

  VISIONTHINGROOTcimv2:Win32_NetworkProtocol

  VISIONTHINGROOTcimv2:Win32_NetworkAdapter

  VISIONTHINGROOTcimv2:Win32_NetworkConnection

  VISIONTHINGROOTcimv2:Win32_PerfRawData_Tcpip_NetworkInterface

  VISIONTHINGROOTcimv2:Win32_PerfFormattedData_Tcpip_NetworkInterface

  VISIONTHINGROOTcimv2:Win32_SystemNetworkConnections

  VISIONTHINGROOTcimv2:Win32_TSNetworkAdapterSetting

  VISIONTHINGROOTcimv2:Win32_TSNetworkAdapterListSetting

  VISIONTHINGROOTcimv2:Win32_NetworkLoginProfile

  VISIONTHINGROOTcimv2:Win32_NetworkAdapterConfiguration

  VISIONTHINGROOTcimv2:Win32_NetworkAdapterSetting

  做完了这个,我能轻松的找出我所要的那个帮助教程来完成我的工作了。(如果不那么确定的话,我还是得一个一个仔细的看,但如果我从拼写形式就能看出哪个是我想要的,那么可以说这个做法起到了最大的作用了。)如果还想扩大我的搜索,在Select-String后再加一个参数,如下:

  $w32wmi | select-string -pattern "Network", "Disk"

  添加的第二个参数,它与第一个参数之间的关系其实是布尔变量中的“OR”的关系,而不是“AND”的关系。这样添加完以后,所返回的结果要么是带“Network”字样的,要么就是带“Disk”字样的,而不是两者都包括的结果才返回。

  总而言之,这篇短文介绍了powershell使用的另外一个重要的功能----在大量结果中找到你所需要的最精确的信息。用Select-String过滤信息其实很简单。把繁杂的数据抛给过滤器,不管它是一个字符串,还是一个文档或者是一个命令输出,然后用管道线连接。使用WMI时,如果你不知道所需要的那个确切的帮助课程名称,用这个方法就可以使你的使用非常简便,也能使您能轻松的找到所要的带有详细信息的文档或者文件。

      TechTarget独家授权!严禁转载!!!

     原文链接:http://searchwincomputing.techtarget.com/generic/0,295582,sid68_gci1254209,00.html

 

共2页。 9 1 2
顶部
[广告] 全新不用K线图的傻瓜股票分析软件财富股市侦探准确性高www.cf008.com
晨雾飞翔





UID 503
精华 0
积分 0
帖子 612
阅读权限
注册 2008-8-12
状态 离线
发表于 2008-10-11 07:25  资料 主页 短消息 
快国庆了大家怎么安排

说说看都打算怎么过,我要和三鹿牛奶,喝一箱的说。






如何优雅的解决你面临的网站推广问题?网站推广网络推广群发软件论坛群发竞价排名又将何去何从?
顶部
[广告] 全新不用K线图的傻瓜股票分析软件财富股市侦探准确性高www.cf008.com
 


当前时区 GMT+8, 现在时间是 2008-11-23 01:52

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.0.0  © 2001-2006 Comsenz Inc.
Processed in 0.643218 second(s), 6 queries

清除 Cookies - 联系我们 - 枫叶技术支持. - Archiver - WAP