工作之余经过一年零2个月的编写,这本书终于与大家见面了,这本书是我们写作周期最长的一本书,在内容和质量上也花费了很多心血,全书650多页可算是厚厚的一大本,也是目前为止国内仅有的一本国人自己编写的关于微软PowerShell2.0最新编程开发技术的新书,并且得到了微软相关部门的大力支持。
本书已被台湾出版社审核选中,同时会在今年2个月后在台湾等地出版。
特别感谢微软MVP中国区最有价值专家主管——林思绮 为本书作序,还有 MVP好友徐磊、李战和于渊为本书做的精彩书评。
预计另一本新书《构筑敏捷的开发团队——微软Visual Studio 2010实战兵法》将在2010.4月底出版。
——————————————————————————————————————————————————
Windows PowerShell是微软为Windows系统开发的Shell及脚本语言技术,它是一种新的命令行外壳和脚本语言,用于实现系统自动化管理。它的出现弥补了与Linux/Unix系统相比Windows在Shell方面的不足,同时也为程序开发人员提供了一种更高效的编写脚本的工具。Windows PowerShell建立在.NET Framework 2.0/3.x的基础上,IT专业人员可通过命令或脚本来管理计算机,从而管理与维护系统,并通过系统自动化来提高工作效率。在Windows 7和Windows Server 2008 R2中已经整合了PowerShell 2.0,并且支持图形界面操作。
本书的作者由微软MVP专家组成,从程序开发人员和系统管理员的角度全面介绍了Windows PowerShell的编程技术。书中不仅讲解了其核心模块和基本概念,还提供了大量利用Windows PowerShell的强大功能构建的大量开发实例,从而让读者深入此语言的精髓。本书特色为内容由浅入深,分为语法、基础应用和高级应用3个部分,是学习Windows PowerShell编程的最佳参考书。
本书适合.NET开发爱好者,初、中级开发人员和系统管理员,特别有助于系统管理员提高系统自动化管理的效率。本书也可作为相关培训机构的参考教材,以及高等院校相关专业师生的参考书。
前言
Windows系统的缺憾之一在于未提供诸如Linux/Unix Shell那样的强大脚本支持,而使得系统管理员的工作效率不高。PowerShell通过对象适配机制使得这些对象具有.NET对象那样的外观和工作方式,它允许使用多种应用程序的自动适配对象,如活动目录(AD)、WMI、COM、ADO.NET对象和XML属性等。如今微软Windows 7和Windows Server 2008 R2已经完美包含了PowerShell 2.0,这种技术也已经逐渐被系统管理员所接受,但是很多.NET开发人员却了解甚少。作为IT职业经理人和软件开发人员,笔者在大量研究和实践的基础上,费时一年写成本书。
本书的主要目的是帮助Windows系统管理人员和开发人员迅速深入理解PowerShell语言与应用,并可开发出各种所需的系统脚本程序。本书分析了日常脚本编程中遇到的重点和难点。对于一名Windows系统管理员和.NET开发人员通过阅读本书,可以少走弯路,更快地掌握PowerShell主要功能应用及编程技巧。
本书的主要内容
本书共包括26章,各章的主要内容如下:
第1章“PowerShell简介”介绍了PowerShell的概念及微软开发该语言原因,说明了其框架机理,以及主要功能的应用范围。
第2章“安装与配置开发环境”介绍了如何搭建本书相关实例所使用的主要开发环境,说明了.NET框架是微软.NET平台上开发的基础和支持的核心技术。
第3章“对象和对象类型”介绍了语言的数据结构和常用的算法,以及对象和对象类型。
第4章“执行控制流”介绍了如何控制程序中语句的执行顺序,其中包括了条件分支,如if-else及循环等。
第5章“管道对象”介绍了管道对象的作用和使用方法。
第6章“运行脚本块”介绍了PowerShell中的脚本块(Script block),说明其如何操作对象序列。
第7章“运行函数”介绍了为什么函数是PowerShell中抽象提取和重用代码块的主要机制。
第8章“命令别名”介绍了别名的用途,可以用其提供用户熟悉的操作系统环境,更便于程序的移植。
第9章“提供程序”介绍了Shell扩展机制之一的项的概念,以及Shell如何与一些内置的提供程序一起发布给用户。
第10章“脚本文件”介绍了PowerShell的脚本文件用来保存已有并可多次重用的代码,使用户更多地关注脚本的实现原理,而不是记忆基本参数。
第11章“错误处理和调试”通过实例说明了如何在错误地输入数据及隐含错误的情况下捕获并处理异常。
第12章“脚本签名”介绍了脚本签名如何用来保护用户代码在发布之后和用户使用之前不会被篡改。
第13章“Shell环境及其配置”描述了如何获取Shell环境的设置,并且配置Shell的常用选项。
第14章“扩展类型系统”介绍了PowerShell的类型系统,内置的类型适配器和类型扩展如何协同工作,以实现所有代码中存在的类型。
第15章“获取帮助”阐述了如何在PowerShell中获取任何命令的参数和使用方法,以及如何使用内置的帮助获取参数更多详细的信息,并且使用网络搜寻的信息创建自己的帮助。
例3-1 使用.NET对象支持的Type()方法来获取对象的类型 22
例3-2 查找一个字符串中是否包含另外一个字符串 23
例3-3 不传递参数调用方法时不能省略后面的圆括号 23
例3-4 使用PSBase属性获取原始的未经适配器处理的对象 24
例3-5 读取XML文件中的内容 25
例3-6 说明Internet Explorer COM对象在PowerShell中如何工作 25
例3-7 获取System.Diagnostics.Process类型的扩展属性 27
例3-8 获取Process类型的所有扩展成员 28
例3-9 用一对单引号或者双引号括起字符序列创建字符串 29
例3-10 使用转义字符反引号“`”处理引号转义 29
例3-11 包含`a字符的字符串 29
例3-12 字符串的插入功能 31
例3-13 完全摆脱$process变量 31
例3-14 检测字符串是否以任意字母开头并以“s”或“n”结束 32
例3-15 如何来匹配类似域名的字符串 32
例3-16 获取运行中程序的内存使用情况 34
例3-17 罗列其所有的元素并用逗号分隔创建数组 35
例3-18 创建空数组的方法 36
例3-19 通过起始和结束数字的数值区间序列来建立数组 36
例3-20 识别嵌套的数组语法并且将其转换为一个对象 37
例3-21 使用方括号[]来访问数组元素 37
例3-22 获取数组的第1个和最后一个元素 37
例3-23 用加运算符串联数组对象 38
例3-24 从对象集中搜索元素 39
例3-25 创建个人记录字典 40
例3-26 通过字面类型访问类型 42
例3-27 将字符串转换为整型 44
例3-28 从OrderedDictionary对象转换到哈希表 45
例3-29 使用PSBase替代适配器视图获取真实的对象类型 46
例3-30 获取一个静态属性值 47
例4-1 比较一个变量值是否小于7 49
例4-2 比较字符串 51
例4-3 用大小写比较两个字符串 51
例4-4 比较字符串和数字类型 52
例4-5 检测一个文件是否具有.txt后缀并且大小超过10 KB 52
例4-6 检验文件是否为今天创建或者修改的 53
例4-7 检查一个文件是否具有.txt后缀,或者只读的 53
例4-8 检查一个文件是否为只读 53
例4-9 使用-band按位与数字3和1 54
例4-10 非零值转换为$true 56
例4-11 非零长度的字符串被转换为$true 56
例4-12 至少有一项的集合会返回$true 56
例4-13 将Word对象转换为布尔类型的值 57
例4-14 获取文件属性,System.IO.FileAttributes枚举对象可以很容易地转换为字符串 57
例4-15 过滤集合 58
例4-16 获取字符串“LiMing” 58
例4-17 隐式类型转换的作用 58
例4-18 用多层复杂分支判断文件大小 59
例4-19 switch语句执行所有匹配的块 60
例4-20 使用正则表达式来执行操作 61
例4-21 为switch传递一个数字集合并判断数字类型 61
例4-22 等待notepad.exe进程退出 62
例4-23 do-while语句确定条件使循环重复执行 63
例4-24 使用for循环重写前一节的while循环 64
例4-25 使用for循环来达到遍历集合 64
例4-26 获取第1个有.log后缀的文件 65
例4-27 使用continue语句在遍历集合的过程中跳过偶数输出所有
的奇数 66
例4-28 针对两个嵌套的foreach循环 66
例4-29 在外部循环中增加break语句 66
例5-1 将集合中所有元素与2相乘并返回一个新的集合 69
例5-2 获取所有以“Error”开头的字符串 70
例5-3 按照法语的习惯比较字符串 70
例5-4 将原始未排序的集合在排序之前保存在$unsort变量中 70
例5-5 将一些文件按照后缀分类: 70
例5-6 快速统计数组值 71
例5-7 脚本块在所有的对象上执行 72
例5-8 提取当前文件夹中文件的文件名和最后访问时间 73
例5-9 为文件列表增加LastAccessWeekDay属性 73
例5-10 传递first和last参数 73
例5-11 按照占用的内存大小排序进程列表 74
例5-12 使用Get-Process和Stop-Process来获取和终止进程 75
例5-13 根据系统服务的状态将集合分类 76
例5-14 收集与所有文件大小相关的信息 76
例5-15 检测当前的文件夹和昨天备份之间的不同 77
例5-16 传递-confirm参数给copy命令 77
例6-1 将脚本块赋值给一个变量 80
例6-2 获取脚本块的属性和方法 80
例6-3 多次执行脚本块,并通过不同的变量来访问它 81
例6-4 返回数字的脚本块 82
例6-5 使用return语句终止Write-Host命令的输出 82
例6-6 单个脚本块返回多个数字组成的数组 83
例6-7 演示$args的使用方法 83
例6-8 两个数相加时使用参数类型定义转换值类型 85
例6-9 调用者没有提供给$lastName参数值时使用“Unknown”默认值 85
例6-10 为$greeter脚本块的$lastName赋予默认值 86
例6-11 在$greeter中将$firstName参数设置为强制参数 86
例6-12 演示传递脚本块给ForEach-Object并获取为所有文本文件最后的写入时间 86
例6-13 使用process段过滤数字集合并返回比5大的数字 87
例6-14 演示如何创建用于对管道中传入的所有数字求和脚本块 87
例6-15 累加管道中的所有元素 87
例6-16 计算特定日期和当前目录下文本文件最后修改时间之间的天数 88
例6-17 在$personAction脚本块中为$name变量赋值 89
例6-18 使用其获取$name变量的信息 90
例6-19 以$personAction脚本块为例把$name变量定义为全局变量 91
例6-20 演示如何在脚本块中隐藏变量 91
例6-21 在没有指定前缀的情况下为同名变量赋新值 92
例6-22 在脚本块中声明变量 92
例6-23 在同一个管道中的脚本块共享相同的作用域 93
例6-24 如何使用Invoke-Expression 94
例6-25 如何使用cmdlet创建允许用户输入表达式的计算程序 94
例6-26 如何声明脚本块并转换为委托 95
例7-1 使用函数输出字符 98
例7-2 获取之前定义的函数 99
例7-3 获取当前函数的信息 99
例7-4 如何使用Definition属性 99
例7-5 接收两个参数并将其和输出到控制台 100
例7-6 在函数中强制类型转换为整形参数 100
例7-7 格式化日期并输出到控制台 101
例7-8 强制通过抛出异常的形式使用默认值 101
例7-9 Format-Date函数在脚本块中声明变量 101
例7-10 创建函数交换两个变量值 102
例7-11 使用引用方式重写SwapValue函数 102
例7-12 在循环中输出多个对象的函数 103
例7-13 在集合中搜索对象的函数 103
例7-14 把对象写到控制台 104
例7-15 嵌套函数 104
例7-16 在当前作用域中覆盖父作用域中的同名函数 105
例7-17 在global和local作用域中声明同名函数 106
例7-18 定义接收文件的管道 107
例7-19 使用过滤器定义接受文件的管道 108
例7-20 定义一个ignore函数 111
例7-21 添加调试信息 112
例7-22 追踪零操作并忽略所有错误 113
例8-1 检索在系统中注册的cmdlet的数目 117
例8-2 调用New-Alias实现输出 117
例8-3 返回所有以l开头的别名 118
例8-4 获取以l开头的别名 118
例8-5 获取所有以l开头的别名 119
例8-6 Test-Path cmdlet判断某个文件或目录是否存在 119
例8-7 更新log别名使用Write-Verbose替换Write-Host 119
例8-8 将log别名的指向改回Write-Host 120
例8-9 通过使用Set-Item cmdlet设置相应的记录 120
例8-10 通过设置别名记录的内容来使别名重新指向 120
例8-11 移除log别名的方法 120
例8-12 导出的别名文件为文本格式 121
例8-13 强制覆盖已经存在的别名 122
例8-14 通过指定过滤器的方式只导出部分别名 122
例8-15 分多次将别名导出 123
例8-16 将别名导出为脚本形式 123
例8-17 将别名导出为用逗号分隔的文件 123
例8-18 创建名为“Get-Command”的别名 124
例8-19 将别名dirr指向dir-recurse函数的方法 127
例8-20 创建一个完全错误的别名 127
例8-21 128
例8-22 通过ForEach-Object将对应的别名删除 128
例8-23 在cmd.exe下设置变量并获取其中的内容 130
例8-24 在PowerShell中执行相同操作的方法 130
例9-1 键入Get-PSProvider命令列出所有提供程序的清单 136
例9-2 获取所有提供程序管理单元的名称和.NET类型 136
例9-3 使用Get-PSDrive命令获取当前在系统中注册的驱动器 137
例9-4 创建docs:驱动器 138
例9-5 将网络共享\\FileServer\Public映射为本地的net:驱动器 139
例9-6 使用Remove-PSDrive移除映射的驱动器 139
例9-7 在驱动器被占用情况下强制删除的实例代码 139
例9-8 函数映射驱动器并返回项的根目录 140
例9-9 PowerShell中的目录切换 141
例9-10 获取驱动器 141
例10-1 使用Set-Content这个cmdlet来创建脚本文件 146
例10-2 在指定目录中查找文件名符合指定通配符的文件 148
例10-3 用命名参数方式重写脚本文件 148
例10-4 获取文件序列并过滤掉所有大于指定大小的文件 148
例10-5 使用脚本文件查找小于13个字节的文件 149
例10-6 创建一个访问父作用域的脚本文件 149
例10-7 在脚本文件内使用$global关键字修改父作用域变量 150
例10-8 生成对象并输出 151
例10-9 return语句返回现有对象 152
例10-10 在脚本文件中的函数中退出整个脚本文件的执行 152
例10-11 调用PowerShell.exe并把脚本块名作为参数 153
例10-12 脚本库Library1.ps1的代码 154
例10-13 更换当前目录的位置 154
例11-1 包含终止错误的Raise-TeminatingError函数的脚本文件 158
例11-2 创建脚本文件操作错误变量测试错误条件 160
例11-3 使用陷阱写一个脚本文件“Date-Traps.ps1” 161
例11-4 处理不同数据格式的转换错误 163
例11-5 将continue语句替换为break语句 166
例11-6 创建名为“Log-AllErrors.ps1”的脚本用于尝试删除某个文件 167
例11-7 生成的错误日志文件error-dump.xml的格式 167
例11-8 创建脚本DivideByZero.ps1 169
例11-9 创建一个名为“Log-NonTerminatingErrors.ps1”的脚本 172
例11-10 演示如何抛出终止错误 173
例11-11 创建名为“Function-ParametersWithExceObj.ps1”的脚本文件 174
例11-12 创建名为“Function-ParametersNonTerminating.ps1”的脚本文件 176
例11-13 创建名为“Prite-Debug.ps1”的脚本文件计算 178
例11-14 180
例11-15 创建名为“Print-DebugWithInstrument.ps1”脚本 181
例11-16 创建名为“Print-DebugOutput.ps1”脚本 182
例11-17 186
例11-18 创建新的脚本,并命名为“Count-CharactersDebug.ps1” 187
例11-19 创建名为“Trace-Command.ps1”的脚本文件 189
例12-1 列举用户管理证书 196
例13-1 获取宿主对象及其提供的内容 212
例13-2 使用PSHostUserInrerface方法 213
例13-3 PSHostUserInterface对象提供Shell属性 213
例13-4 为特定用户的Shell添加配置 215
例13-5 添加PSEventing管理单元 216
例13-6 将判断过程封装为函数Is-Administrator 218
例14-1 创建名为“Person-Define.ps1”的范例脚本 223
例14-2 在新的脚本文件Person-All.ps1中测试新创建的方法和属性 224
例14-3 列出所有后缀为“ps1”的文件 227
例14-4 使用Update-FormatData cmdlet创建自定义制表符视图 231
例15-1 显示所有以“about_”开头的cmdlet的帮助 234
例15-2 集合用管道传递给select获取唯一的分类值 235
例15-3 获取特定语言的主题或者HelpFile分类 236
例15-4 获取Get-ChildItem的-filter参数的信息 236
例15-5 获取Get-Help的parameter参数的信息 237
例15-6 演示包含处理文件和项目的Microsoft.PowerShell.Management管理单元的帮助文件 238
例15-7 使用Get-Help获取帮助主题 239
例15-8 获取Add-Content帮助主题的detail和description属性 239
例15-9 查看保存在AML文件中的例子 241
例15-10 将通过索引值访问参数的方法用于访问帮助信息中 241
例15-11 使用foreach来遍历一系列的文件 242
例15-12 242
例15-13 使用notice.txt脚本块作为查询条件来找到目标实例 243
例15-14 244
例15-15 获取动词部分的cmdlet返回所有涉及stop的cmdlet 244
例15-16 获取所有与证书处理相关的命令 245
例15-17 在控制台提示符下输入Get-Command help命令 245
例15-18 使用Get-Member cmdlet获取文件属性 246
例15-19 获取DateTime类型的静态属性 247
例15-20 验证[datetime]::Parse静态方法接收字符串参数并返回DateTime对象 247
例15-21 使用Windows脚本宿主对象的Open()方法打开URL 248
例15-22 创建一个带有单个参数的Search-Msdn函数 249
例15-23 导入System.Web并调用类 249
例15-24 使用Show-MsdnHelp函数获取对象并打开MSDN的帮助页面 250
例15-25 创建使用基于Google或者live.com搜索的函数 251
例16-1 获取所有与Process相关的cmdlet的方法 254
例16-2 按照特定属性值排序所有进程并返回顶端的5个 254
例16-3 按照WS(Working Set)属性检查工作区 254
例16-4 执行Get-Process命令 255
例16-5 尝试关闭Notepad窗口 256
例16-6 获取到所有Google搜索的浏览器窗口 257
例16-7 获取PowerShell的存放位置 257
例16-8 获取计算器依赖的库清单 258
例16-9 获取使用动态库的进程清单 258
例16-10 获取当前计算机中部分运行程序的发布信息清单 258
例16-11 降低安装程序msiexec.exe的优先级 259
例16-12 获取当前运行的所有服务 260
例16-13 通过服务名类似DNS*的通配符查询DNS client服务 260
例16-14 通过获取所有匹配*net*通配符获取Windows下与网络相关的服务 260
例17-1 创建一个通用脚本Get-ContentAsString.ps1 265
例17-2 创建一个名为“Format-AsHex.ps1”的脚本 269
例17-3 编写一个名为“Detect-Encoding.ps1”的脚本 272
例17-4 创建一个名为“Extract-Numbers.ps1”的脚本 273
例18-1 脚本GetEventLogs.ps1的代码 277
例18-2 GetApplicationEventLog.ps1脚本的代码 278
例18-3 创建名为“WriteAppLogToText.ps1”的脚本 278
例18-4 创建名为“WriteAppLogToXml.ps1”的脚本 280
例18-5 创建一个名为“WriteToAppLog.ps1”的脚本 281
例18-6 创建名为“WriteProcessToAppLog.ps1”的脚本 282
例18-7 创建一个名为“SearchByEventID.ps1”的脚本 283
例18-8 创建一个名为“FindMsiEvent.ps1”脚本 284
例18-9 创建一个GetSystemLogError.ps1脚本 284
例18-10 GetMessage.ps1脚本的代码 285
例18-11 创建名为“GetLogSources.ps1”的脚本 286
例18-12 创建用于查询系统日志存档策略的脚本文件GetEventLogRetentionPolicy.ps1 287
例18-13 创建脚本SetEventLogRetentionPolicy.ps1修改日志的存档策略 287
例18-14 CreateEventLog.ps1脚本创建事件日志 290
例18-15 292
例18-16 针对意外终止的应用程序创建一个监视脚本Monitor-Crashes.ps1 293
例18-17 创建名为“ReportDiskDriveConfiguration.ps1”的脚本 294
例18-18 创建名为“ReportDiskPartition.ps1”的脚本获取系统中存在的分区属性 296
例18-19 创建名为“ReportSpecificDiskPartition.ps1”的脚本来获取硬盘特定分区的配置信息 297
例18-20 创建名为“ReportLogicalDiskConfiguration.ps1”的脚本查询系统中存在的逻辑磁盘 298
例18-21 创建名为“RenameComputer.ps1”的脚本用于更改计算机名 299
例18-22 将EnablePrivileges的属性设置为$true 301
例18-23 创建名为“QueryOldFiles.ps1”的脚本 303
例18-24 创建名为“CreateLocalUser.ps1”的脚本 305
例18-25 创建名为“CreateLocalGroup.ps1”的脚本 307
例18-26 创建名为“EnableDisableUser.ps1”的脚本禁用或启用特定账户的权限 308
例18-27 创建名为“AuditScreenSaver.ps1”的脚本 311
例18-28 创建一个screensaver表 314
例18-29 创建名为“ReportPowerConfig.ps1”的脚本 316
例18-30 创建名为“SetPowerConfig.ps1”的脚本用于设置电源计划 319
例18-31 创建名为“GetNetAdapterStatus.ps1”的脚本用于检测网络适配器的状态 322
例18-32 创建名为“GetNetAdapterConfig.ps1”的脚本收集特定网络适配器的用于排错的详细信息 325
例18-33 创建名为“NetworkAdapterConfigFiltered.ps1”的脚本过滤无用属性 327
例18-34 创建一个名为“GetNetID.ps1”的脚本 329
例18-35 创建名为“WriteNetworkAdapterInfoToExcel.ps1”的脚本 330
例18-36 创建名为“FindConfigurationOfConnectedAdapters.ps1”的脚本 332
例18-37 创建名为“SetStaticIP.ps1”的脚本 333
例18-38 创建名为“WorkWithDHCP.ps1”的脚本 336
例18-39 创建名为“ParseFWConfig.ps1”脚本可以检测到这些端口 339
例18-40 创建名为“EnableRemoteAdmin.ps1”的脚本 340
例18-41 创建名为“EnableShareFolders.ps1”的脚本 340
例18-42 创建名为“DisplayBootConfig.ps1”脚本读取引导配置 341
例18-43 创建名为“DetectStartupPrograms.ps1”的脚本 342
例18-44 创建名为“ServiceDependencies.ps1”的脚本 344
例18-45 创建用于检查硬件驱动的脚本CheckDeviceDrivers.ps1 346
例18-46 创建名为“AutoServiceNotRunning.ps1”的脚本 349
例18-47 创建名为“CheckSignedDeviceDrivers.ps1”的脚本 350
例18-48 创建名为“GetActiveNicAndConfig.ps1”的脚本 352
例18-49 创建名为“FindCertificates.ps1”脚本 356
例18-50 创建名为“ListCertificates.ps1”脚本 357
例18-51 创建名为“FindExpiredCertificates.ps1”脚本 360
例18-52 为此创建名为“FindCertificatesAboutToExpire.ps1”的脚本 362
例18-53 创建名为“InspectCertificate.ps1”的脚本 364
例18-54 创建名为“ImportCertificate.ps1”的脚本 366
例18-55 创建名为“DeleteCertificate.ps1”的脚本 368
例19-1 改写脚本Get-Url.ps1创建为脚本GetFile-Url.ps1 376
例19-2 重建一个WebProxy对象 378
例19-3 创建一个HEAD请求 380
例19-4 创建一个用于检测网页链接的脚本Get-Links.ps1 381
例19-5 创建新的脚本GetBase-Links.ps1 382
例19-6 创建名为“Get-AtomFeed.ps1”的脚本 383
例19-7 Get-RssFeed.ps1脚本 385
例19-8 获取RDF格式的Get-RDFeed.ps1脚本 386
例19-9 Get-Rss.ps1脚本的代码 386
例19-10 创建名为“Call-WebServiceGet.ps1”的代码 388
例19-11 创建名为“Call-WebServicePost.ps1”的脚本 389
例19-12 SOAP协议传输消息的一般格式 391
例19-13 创建名为“Call-WebServiceSoap.ps1”的脚本 391
例19-14 创建名为“Get-Ftpfile.ps1”脚本文件 393
例19-15 创建名为“Put-Ftpfile.ps1”的脚本 394
例20-1 创建一个名为“Find-IIS 7.0WMIClass.ps1”脚本 400
例20-2 创建名为“Get-Sites.ps1”脚本 400
例20-3 创建名为“Get-IISPath.ps1”的脚本 401
例20-4 创建名为“Get-AppPool.ps1”的脚本 403
例20-5 创建名为“Get-IIS 7.0AppPoolDefaultSettings.ps1”的脚本 405
例20-6 创建名为“Get-SiteLimits.ps1”的脚本 407
例20-7 创建名为“List-VirtualDirectory.ps1”的脚本 408
例20-8 创建名为“Creat-site.ps1”的脚本 410
例20-9 创建名为“Create-ApplicationPool.ps1”的脚本 412
例20-10 创建名为“Start-AllWebSites.ps1”的脚本 414
例20-11 创建名为“Stop-AllWebSites.ps1”的脚本 415
例20-12 创建名为“StartStop-Site.ps1”的脚本 416
例20-13 创建名为“Get-DNSServerConfig.ps1”的脚本 419
例20-14 创建名“Display-RootHints.ps1”的脚本 422
例20-15 创建名为“Query-DNSArecords.ps1”的脚本 423
例20-16 创建名为“Set-DNSServerConfig.ps1”的脚本 426
例20-17 创建名为“Report-DNSZoneConfig.ps1”的脚本 429
例20-18 创建名为“Create-DNSZone.ps1”的脚本 431
例20-19 创建名为“Manage-WinsDHCP.ps1”的脚本 434
例20-20 创建名为“Report-ClientSettings.ps1”的脚本的名称 436
例20-21 创建名为“Disable-Logons.ps1”的脚本 438
例20-22 创建名为“Configure-ClientProperties.ps1”的脚本 440
例20-23 创建名为“Report-ClientSetting.ps1”的脚本 443
例20-24 创建名为“Grant-UserTSpermission.ps1”的脚本 444
例20-25 创建名为“Configure-ClientColor.ps1”的脚本 445
例20-26 创建名为“Configure-ClientEnvironment.ps1”的脚本 448
例20-27 创建名为“Disable-ActiveDesktop.ps1”的脚本 450
例20-28 创建名为“List-ClusterWMIClasses.ps1”的脚本 452
例20-29 创建名为“Check-ClusterConfig.ps1”的脚本 455
例20-30 创建名为“AddEvict-Node.ps1”的脚本 457
例20-31 创建名为“Remove-Cluster.ps1”的脚本 460
例20-32 创建名为“Create-OU.ps1”的脚本 463
例20-33 创建名为“Create-User.ps1”的脚本 464
例20-34 调用SetInfo()方法将修改保存到Active Directory中 466
例20-35 CreateAndEnable-User.ps1脚本的代码 468
例20-36 创建名为Create-Group.ps1的脚本 469
例20-37 创建名为“AddUserToGroup.ps1”的脚本 470
例21-1 创建Get-DocumentText.ps1脚本 490
例21-2 创建名为“Get-DocumentParagraph.ps1”的脚本 492
例21-3 创建名为“Get-DocumentSentences.ps1”的脚本 492
例21-4 创建一个名为“Get-DocumentWords.ps1”的脚本 493
例21-5 创建一个名为“New-Document.ps1”的脚本 494
例21-6 创建一个名为“Insert-RedText.ps1”的脚本 495
例21-7 创建一个名为“SpellCheck-Text.ps1”的脚本 497
例21-8 从工作表中读取单元格值 499
例21-9 创建名为“Get-CellInRange.ps1”的脚本 501
例21-10 创建一个名为“Export-ProcessToExcel.ps1”脚本 502
例21-11 创建一个名为“Search-GoogleCom.ps1”的脚本 504
例21-12 创建一个名为“Get-WebSearchResults.ps1”的脚本 505
例21-13 Jscript脚本的源代码 506
例21-14 VBScript脚本的代码 507
例21-15 创建一个名为“JScriptEval.ps1”的脚本 507
例21-16 创建一个名为“VBScriptEval.ps1”的脚本 508
例21-17 创建一个新的脚本文件“JScriptCodeObject.ps1” 509
例24-1 编写名为“WatchDeletedFiles.ps1”的脚本 560
例24-2 WatchEventLog.ps1脚本的代码 562
例24-3 使用WMI事件来获取Windows时间服务(W32Time)的停止时间 563
例24-4 脚本Watch_W32Time.ps1的代码 564
例24-5 编写文件夹监视脚本“WatchDeletedFilesCtrlC.ps1” 565
例24-6 扩展文件系统监视程序的脚本并命名为“WatchDeletedCreatedFiles.ps1” 567
例26-1 创建名为Start-LocalUserManager的函数 595
例26-2 Where-Object cmdlet脚本 597
例26-3 598
——————————————————————————————————————————————————————————————————————
PowerShell犹如待字闺中的大家闺秀,恬静、优雅、低调:但是一旦掌握其脾性,会使Windows系统管理人员和开发人员享受到无穷的便利、快乐和悠闲。本书罗列了关于PowerShell这一语言的各个方面,并分析了日常脚本编程中遇到的重点和难点,特别值得一提的是,书中所带有的各种所需的系统脚本程序更能让大家信手拈来,运用到实际工作当中,使大家获得更多时间未提升自我。借着Windows7发布的热潮,PowerShell作为微软下一代命令、脚本工具已集成到Windows7中。相对而言还是比较容易上手的,在功能上要比CMD强大很多。
——林思绮 技术社区支援服务中国区最有价值专家主管
——————————————————————————————————————————————————————————————————————
当年使用微软的操作系统是从DOS开始的,第一次见到Windows 3.1的时候,才发现图形界面是多么的棒,从此再也没有想到过命令行会有一天改头换面回到我们的视线中。这些年搞技术越末越觉得,用户的需求永远是我们程序员的核心,用户需要什么,我们就应该提供什么。PowerShell就是在这种环境中诞生的,虽然微软最终放弃了对DOS应用的支持,但是全新的Powershell却绐我们提供了更加丰富而强大的操作环境,掌掘Powershell你将可以通过键盘实现对电脑的完全控制,这是任何一个技术狂人的梦想。
——徐磊 微软最有价值专家(2006-2009),VSTS(Team System)项目管理专家,Tech-ED 2008/2009讲师。2005年创立了SSW沁WW.SSW.conl.aLi)北京研发中心,同时担任中心的负责人和资深软件架构师: “微软(北京).NET俱乐部”核心管理团队成员和特约讲师。
——————————————————————————————————————————————————————————————————————
熟悉并热爱Linux/Unix下的脚本工作方式而又需要工作在Windows环境下的程序员们有福了:不喜欢鼠标只热爱在键盘上运指如飞的geek们有福了:希望通过学习这一强大工具而走向高手之路的读者们有福了。
——于渊 畅销书《自己动手写操作系统分》《Orange’s:一个操作系统的实现》作者
——————————————————————————————————————————————————————————————————————
对于想学习WindowsPowerShell编程的朋友来说,这是一本非常值得推荐的好书。本书由浅入深地讲解了Windows Powershell的产生背景、运行环境、语法特点、使用技巧以及许多实用的编程经验。书中不但列举了大量的可操作实例,还给出了许多宝贵的最佳实践。本书适合大多数Windows环境下的程序员和系统管理员,既可以作为PowerShell的技术书来读,也可以作为学习PowerShell的教学资料,甚至用作即用即查的PowerShell手册。感谢本书作者的辛勤付出,为广大技术人员奉献了这样一本实用的好书。
——李战资深架构师,《悟透JavaScript》作者,目前在阿里巴巴从事云计算方面的研发工作。
———————————————————————————————————————————————————————————————————————
《Windows PowerShell 2.0应用编程最佳实践》
中国互动出版网:http://www.china-pub.com/196373
当当网:http://product.dangdang.com/product.aspx?product_id=20798549
卓越网:http://www.amazon.cn/mn/detailApp?source=82697180&prodid=zjbka03bfv
华储网:http://www.huachu.com.cn/itbook/bookinfo.asp?lbbh=10112061
目录与前言下载: