PowerShell 2.0管理事件日志(三)管理和创建事件日志
事件日志是操作系统用来保存本身及其他程序信息的工具,本文将会介绍如何通过PowerShell脚本阅读事件日志并创建新的日志条目。Windows系统中包含多种事件日志,在Windows XP系统中包括4种主要的事件日志。即应用程序、系统、安全性及Internet Explorer日志,如图1所示。这样用户可以方便地从系统中提取和查看日志,从而了解系统的当前运行情况。本文将会介绍如何通过PowerShell管理和创建Windows事件日志的方法。 1 管理事件日志 在使用事件日志时需要管理多个组件,其中最重要的是事件日志文件的大小。为了能够包括所需时间内的所有特定系统事件,通常情况下日志文件需要足够大,但是读取过大的文件将会耗费大量的时间。 (1)选择来源 使用事件日志时必须能够知道作为记录使用的日志,为此需要查看事件日志的源是否已经注册,实现这个目的的简单方法是使用WMI类Win32
http://cyqdata.cn/cnblogs/article-detail-2629
PowerShell 2.0管理事件日志(三)管理和创建事件日志
事件日志是操作系统用来保存本身及其他程序信息的工具,本文将会介绍如何通过PowerShell脚本阅读事件日志并创建新的日志条目。Windows系统中包含多种事件日志,在Windows XP系统中包括4种主要的事件日志。即应用程序、系统、安全性及Internet Explorer日志,如图1所示。这样用户可以方便地从系统中提取和查看日志,从而了解系统的当前运行情况。本文将会介绍如何通过PowerShell管理和创建Windows事件日志的方法。 1 管理事件日志 在使用事件日志时需要管理多个组件,其中最重要的是事件日志文件的大小。为了能够包括所需时间内的所有特定系统事件,通常情况下日志文件需要足够大,但是读取过大的文件将会耗费大量的时间。 (1)选择来源 使用事件日志时必须能够知道作为记录使用的日志,为此需要查看事件日志的源是否已经注册,实现这个目的的简单方法是使用WMI类Win32
http://cyqdata.cn/cnblogs/article-detail-2619
PowerShell 2.0管理事件日志(一)查看和读取事件日志
事件日志是操作系统用来保存本身及其他程序信息的工具,本文将会介绍如何通过PowerShell脚本阅读事件日志并创建新的日志条目。Windows系统中包含多种事件日志,在Windows XP系统中包括4种主要的事件日志。即应用程序、系统、安全性及Internet Explorer日志,如图1所示。这样用户可以方便地从系统中提取和查看日志,从而了解系统的当前运行情况。本文将会介绍如何通过PowerShell管理Windows事件日志的方法。 图1 WindowsXP系统的事件日志 1 查看事件日志 在Windows Vista和Windows Server 2008版本中,事件日志的功能能够得到了大量改进和增强。通过使用Get-EventLog cmdlet可以查看事件日志内容,下面是脚本GetEventLogs.ps1的代码: Get-EventLog –List 该脚本可获
http://cyqdata.cn/cnblogs/article-detail-2293
PowerShell 2.0之使用WMI管理Windows(三)获取软硬件信息
管理大型的异构网络非常繁琐,而在本地计算机上用不同的自动化接口,如PowerShell、COM对象,甚至基于.NET的程序管理单独的程序和服务则容易得多。关键是存在于混合网络中的分布式系统,即如何操作防火墙后面的设备。如果它只是一种硬件设备,如路由器,则使用WMI(Windows Management Instrumentation)即可。WMI是协同工作的一系列技术,可以提供网络对象的统一访问形式。并且用其查询服务信息,尤其是各种形式的数据、触发命令,以及改变配置选项 1 查询硬件设备 与Windows内核紧密结合允许于WMI操作多种设备,获取不同计算接和硬件配置的信息,例如,可以通过查询Win32_DiskDirver对象获取系统中当前安装的硬盘,如图1所示。 图1 获取当前系统中安装的硬盘 其中列出了所有驱动器,包括此时所使用的U盘。上面的清单中只包含物理硬盘,如果要获
http://cyqdata.cn/cnblogs/article-detail-2256
PowerShell 2.0之使用WMI管理Windows(三)对WMI对象的语言支持
管理大型的异构网络非常繁琐,而在本地计算机上用不同的自动化接口,如PowerShell、COM对象,甚至基于.NET的程序管理单独的程序和服务则容易得多。关键是存在于混合网络中的分布式系统,即如何操作防火墙后面的设备。如果它只是一种硬件设备,如路由器,则使用WMI(Windows Management Instrumentation)即可。WMI是协同工作的一系列技术,可以提供网络对象的统一访问形式。并且用其查询服务信息,尤其是各种形式的数据、触发命令,以及改变配置选项。
在第2个PowerShell版本中针对WMI对象增加了很多语言增强功能,允许用户使用类似URL的字符串作为WMI对象的别名。
首先介绍将包含WQL查询字符串转换为WMI查询对象,这个类型是[wmisearcher],由此可以引申出ManagementObjectSearcher对象。搜索对象只有一个Get()方法,用于执
http://cyqdata.cn/cnblogs/article-detail-2237
PowerShell 2.0之使用WMI管理Windows(二)PowerShell操作WMI
在PowerShell发布之前,标准的操作方法是使用编程脚本API调用一系列COM对象。调用COM客户端代码可以在各种语言中都能使用,只是典型的WMI客户端脚本代码使用VBScript编写,因为这样简单易行。代码会获取CIM对象的实例,并通过WQL查询和获取信息。结果是用标准的foreach循环获得的集合。下例为使用VBS获取winword.exe进程id的winword_pid.vbs脚本,代码如下: strComputer = "." classNamespace = "winmgmts:\\" & strComputer & "\root\cimv2" Set objWMIService = GetObject(classNamespace) query = "SELECT * from W
http://cyqdata.cn/cnblogs/article-detail-2180
PowerShell2.0之与COM对象交互(五)与脚本宿主代码协同工作
网络中存在大量由VBScript和Jscript或者其他Windows脚本宿主相关的语言编写的代码,其中相当一部分用对应语言实现很简短,而且有部分代码甚至不能转换为PowerShell代码。丢弃所有这些代码并且完全使用PowerShell重写很不明智,因此需要在PowerShell中有一种重用Jscript和VBScript脚本的代码方法。 MSScriptControl这个COM对象可以作为脚本环境的宿主,其ProgID是MSScriptControl.ScriptControl。用户可以用其注册并执行代码,使用这个对象作为从PowerShell中调用现有VBScript和Jscript脚本的方法。一旦导入脚本,即可调用其中的函数,传递参数并返回值。 为了示范脚本如何控制对象的操作,下面演示计算文件大小的两个实例,分别是Jscript编写的FileSize.js和VBScirpt编写
http://cyqdata.cn/cnblogs/article-detail-2140
PowerShell2.0之与COM对象交互(四)IE自动化
上一篇文章主要介绍了powershell中通过COM操作Excel,本篇文章中将会着重介绍powershell中通过COM操作IE达到自动化管理的目的。 Internet Explorer浏览器提供基于COM的富对象模型,可以用来编写网站的自动化测试脚本模仿用户操作,如输入文字和单击按钮等并用浏览器创建提交信息的脚本。 能够编程控制Internet Explorer的仍然是application对象,其ProgID是InternetExplorer.Application。完成自动化范例脚本需要的操作步骤如下。 (1)创建Internet Explorer Application对象。 (2)浏览一个URL。 (3)等待浏览器载入文档内容。 (4)操作文档。 (5)通过调用Quit()方法退出Application。 如果Internet Explorer在后台浏览并下载网
http://cyqdata.cn/cnblogs/article-detail-1649
通过PowerShell操作事件日志
管理员能够获取信息的主要来源是事件日志,PowerShell中有专门的Get-EventLog cmdlet处理事件日志。为了获取已存在的事件日志,需要使用-list参数以返回System.Diagnostics.EventLog类型的对象集合。获取这些对象后即可实现任何与系统日志相关联的操作,如下所示: 从下例的输出能够看到当前系统中存在的日志条数: PS C:\PowerShell\AppendixB> get-eventlog -list Max(K) Retain OverflowAction Entries Name ------ ------ -------------- ------- ---- 512 7 OverwriteOlder 486 Application 512 7 OverwriteOlder 0 Internet Explorer
http://cyqdata.cn/cnblogs/article-detail-385
PowerShell 2.0解析、格式化及显示远程输出
由于PowerShell 2.0远程管理的传输是在网络上进行,而对象是不能通过网络进行传递的,为了能够继续将PowerShell所具有的面向对象的优点进行继续保持,PowerShell2.0远程管理传输的过程中是将对象序列化为XML后进行传输,在达到目标主机后在进行反序列化解包,在客户端实现远程到本地端对端的对象传递,然而对象传递的过程中很有可能远程对象的格式化配置文件在本地并不存在,这就可能使传输到本地的输出杂乱无章,并不能体现面向对象的优点,也不方便用户的识别和阅读,最好的解决方法可能就是将远程主机的格式化文件传输到本地,在本地对接收到的对象进行格式化输出。在本文中将会介绍PowerShell远程管理的输出,包括输出是如何从远程主机传输到本地,如何显示以及如何根据自己的需要格式化输出。 1 远程输出问题的引入 首先,看看从远程线程接收的输出有何不同,如果用Invoke-Comm
http://cyqdata.cn/cnblogs/article-detail-326
PowerShell 2.0在远程主机上运行命令和脚本
在前面的文章里关于持久远程线程的讨论中,曾经介绍了如何在本地主机上进入远程线程并执行命令。如果没有显式的终止线程的情况下,用户能在本地计算机上执行远程主机的命令,而PowerShell的提示符能够直接反映当前所使用线程的状况。在本章将会介绍PowerShell的内置特性,这些特性能够使用户在远程主机上运行命令和脚本。 通过使用交互式远程管理可以克服使用Invoke-Command的一些缺点,然而这种方法也是有其局限性的。在交互式远程管理中,用户需要显式的进入或退出远程线程,这就意味着,同时只能连接到一个远程主机上,而且只能访问对应远程主机上的cmdlet和模块。如果需要让不同的cmdlet在不同的主机上都可以执行,这就做不到了。 比如,有两台主机分别各自安装了Exchange 2010和SharePoint 2010,如果用户需要访问两台主机上各自可用的cmdlet,两台主机和本机
http://cyqdata.cn/cnblogs/article-detail-279
PowerShell 2.0 远程管理之启用和执行命令
PowerShell 2.0的远程管理功能很强大,为了方便读者学习这里首先介绍学习环境的设置,便于读者在理解原理的同时有相对形象的体验。在本文中,将会分别介绍了如何启用和禁用powershell的远程管理,以及如何在工作组和混合域环境下配置计算机。以及如何使用Invoke-Command cmdlet用于在远程主机上执行命令,创建持久线程,在多个命令间同一线程传递的变量和参数。用户还可以在执行较费时的命令时以后台任务的形式实现,并在执行完毕后使用命令回调执行结果。 1 启用和禁用远程管理 PowerShell 2.0中能通过在PowerShell提示符下执行下列的cmdlet启用远程管理 PS C:\> Enable-PSRemoting 该cmdlet会向用户询问几个问题如下图1所示 当执行该cmdlet时执行了以下操作,其中包括: 1. 启动或重新启动
http://cyqdata.cn/cnblogs/article-detail-260
PowerShell 使用PowerTab加强Tab键自动补全
Windows 2000及其以后版本为cmd命令增加了基本的Tab自动补全功能的支持,PowerShell是微软第1个实现为文件、函数、变量和命令提供了该支持的产品,并且还可以根据需要定制化。在PowerShell中支持通过Tab自动补全功能,以及使自定义函数提供Tab键自动补全名称支持。PowerTab也采用这种方式,并且增加了很多高级特性。 PowerTab是由微软公司名为“Marc van Orsouw”的MVP创建的一个免费工具,它也被称为“/\/\o\/\/”或“PowerShell Guy”。这一工具由一系列脚本组成,将这些脚本嵌入到PowerShell机制中可以提供用户扩展的Tab实现。它通过搜索对象来提供更好的实现建议,包括默认的shell甚至未触及对象,如.NET类型的WMI类名,以及其他对象。该工具还通过提供包含各种建议的下拉框来改善用户体验,默认的Tab扩展允许通
http://cyqdata.cn/cnblogs/article-detail-205
PowerShell操作文件的机制探讨
由程序生成的数据通常会比生成它的程序有更长的存活期,文本文件能够很容易地从一个系统传输到另一个系统。本文将探讨PowerShell操作文件的机制、如何读取不同的数据格式并生成自己的数据,以及如何使用正则表达式从文本块中获取数据。 1 读取内容 在PowerShell中,Get-Content和Set-Content这两个cmdlet分别用于获取和设置原始二进制文件。默认情况下,这两个命令用于操作文本文件。图1所示为使用Get-Content获取文件内容。 Get-Content以行为单位返回一个字符串数组,每个数组元素中包含一行内容。图2所示为返回5个元素的字符串数组的文件内容。 从图中可以看到,返回值为数组形式。如果操作的文件内容为每行一个条目存在,则使得记录操作非常方便。 如果需要获取整个文件内容并转换为一个独立的字符串形式,则使用[string]::Join()静态
http://cyqdata.cn/cnblogs/article-detail-189
Windows PowerShell 2.0语言之扩展类型系统
参与博客评选,欢迎大家为我投上宝贵的一票,谢谢!http://2010blog.51cto.com/274616
本文将简要介绍PowerShell的类型系统,以及内置的类型适配器和类型扩展如何协同工作,以实现所有代码中存在的类型。这里的扩展类型系统不仅仅是对于标准的.NET、COM和WMI对象类型的扩展,也对所有未知扩展公开。可以为活动对象添加属性和成员或者修改类型定义,这样所有该类型的对象都会自动添加新的成员,从而通过为目标对象添加自定义属性和方法来个性化定义运行环境。在学习如何修改对象和类型之前,通常会创建一些操作对象的常用函数,所以必须为函数名添加前缀或后缀以便于辨别函数操作的对象。如果将这些函数改成方法作为扩展类型,即可得到更短的类型名,从而不必记忆过多的函数名。
PowerShell可以灵活地将二进制对象转换为适当格式的文本,这样允许用户将一系列对象转换后填充到表格
http://cyqdata.cn/cnblogs/article-detail-155
Windows PowerShell 2.0语言开发之脚本签名
脚本签名用来保护代码在发布之后,用户使用之前不被篡改。数据源发送方使用自己的私钥加密数据校验和其他与数据内容有关的变量,完成对数据的合法“签名”;数据接收方则利用对方的公钥来解密收到的“数字签名”。并将结果用于数据完整性检验,以确认签名的合法性。 1 代码签名如何工作 签名代码确保程序对目标用户无害,其背后存在复杂而严密的操作来保证签名的有效性。当处理可执行代码签名时存在代码的完整性和来源的有效性问题,为此需要确保代码没有被篡改。如需要确认没有人中途截取并替换发送端的代码,并确认文件的来源是其标识的来源人。 1.1 保证脚本的完整性 为了验证将要执行的代码确系出自原作者手中并没有任何增删,在发送代码给其他人之前可以用算法获取代码的消息摘要,计算机科学中已经提供了相应的函数用于计算数据流的校验和。一些流行的能获取消息摘要的算法包括MD5和SHA-1,这些函数有时称为“哈希函数”,它们
http://cyqdata.cn/cnblogs/article-detail-140
Windows PowerShell 2.0 代码调试并排除bug
没有任何脚本或程序能够保证在任何情况下毫无错误地执行,在外界条件变化的情况下,需要预防可能出错之处。本文将着重讲解如何调试PowerShell代码,即查找并排除bug,这是每个开发人员都应该熟练掌握的技术。在本文将介绍PowerShell提供的解决方法,以及诊断和预防错误的方法,以使程序更加健壮和稳定。 大多数编程语言和环境提供了完整调试特性的系统,可以逐步跟踪程序的执行,保证所有的执行过程符合预定的算法。然而PowerShell并没有提供脚本调试程序,这样开发人员必须采取其他手段来调试错误。可以通过一些巧妙的手段贴近于对程序的逐步调试,临时挂起执行流并检查程序状态。 对于一些复杂的任务,通常情况下会将程序细化分解为多个相对独立的子模块来检查各自的功能。分解后的模块之间要尽可能不包含过多耦合,这样才不会在调试时造成太多的麻烦。 1 打印调试 通过打印来调试程序是最原始且很有
http://cyqdata.cn/cnblogs/article-detail-108
Windows PowerShell 2.0创建调用脚本文件
在PowerShell中不存在文件和目录的概念,涉及文件和目录的操作总是转换为项(item)处理,即Get-Item、Get-ChildItem和Get-ItemProperty。在PowerShell中的dir命令以Get-ChildItem的别名出现,通过项操作对象的原因是PowerShell作用的任何类型的对象均以项的形式存在。而不像类Unix系统中将所有的对象都抽象成文件,即使这个对象很明显不是文件的情况。 项是包含内容的属性对象,这些对象又可以包含其他项。这个定义可以很容易扩展到文件和目录,即它们是具有各自内容和属性的项。项的概念可以应用于多个系统对象,提供程序(provider)用来创建、找回、修改和移除项。它是官方提供的重要的Shell扩展机制之一,Shell与一些内置的提供程序一起发布给用户,其中提供了提供程序的接口。 1 创建脚本 典型的PowerShell脚
http://cyqdata.cn/cnblogs/article-detail-76