第1章 PowerShell简介 1
1.1 Windows PowerShell设计原则 1
保留用户已有的投资 2
提供一个功能强大、面向对象的外壳程序 2
扩展性是第一位的 2
剔除开发过程中的障碍 3
1.2 Windows PowerShell快速入门 3
1.3 Windows PowerShell的高层体系结构 10
宿主程序 11
Windows PowerShell引擎 11
Windows PowerShell snap-in 11
1.4小结 12
第2章 扩展Windows PowerShell 13
2.1 PowerShell snap-in分类 13
2.2编写标准的PowerShell 14
snap-in 14
编写PowerShell snap-in 14
注册PowerShell snap-in 17
查看可用的PowerShell snap-in列表 19
将PowerShell snap-in动态装载到外壳程序中 19
从外壳程序中动态删除snap-in 20
取消注册snap-in 21
注册没有实现类的PSSnapin snap-in 22
保存snap-in配置文件 22
用保存的snap-in配置文件启动PowerShell 23
使用配置文件(profile)保存snap-in配置 24
2.3创建自定义的PowerShell snap-in 24
编写自定义的snap-in 24
使用自定义的snap-in 27
2.4小结 28
第3章 理解PowerShell扩展类型系统 29
3.1 PSObject 29
3.2构造PSObject对象 30
PSObject(object) 31
PSObject() 31
PSObject.AsPSObject(someobject) 32
3.3 ImmediateBaseObject属性和BaseObject属性 33
3.4成员 35
PSMemberInfoCollection 36
ReadOnlyPSMemberInfo-Collection 37
基类成员、适配器成员和扩展型成员 38
3.5成员分类 39
属性 40
方法 48
集合 53
3.6 TypeNames 56
3.7查找算法 57
3.8距离算法 57
3.9 PSObject的固有成员和MemberSets 58
3.10错误和异常 58
运行时错误 59
初始化错误 59
3.11类型转换 60
PowerShell语言中的标准 60
类型转换 60
自定义型转换 61
3.12 ToString方法 63
3.13类型配置(TypeData) 63
常用成员 65
脚本访问 66
3.14小结 66
第4章 开发cmdlet 67
4.1基本概念 67
命令行解析 69
命令发现 69
参数绑定 70
命令调用 70
4.2使用参数 71
强制参数 71
位置参数 72
参数集合 75
参数值验证 82
参数转换 85
4.3处理管道输入 90
4.4生成管道输出 98
4.5错误报告 100
ErrorRecord类 100
ErrorDetails类 103
非终结型错误和致命错误 105
4.6支持ShouldProcess 106
影响确认等级 108
ShouldContinue() 110
4.7使用PowerShell系统路径 110
4.8编写cmdlet帮助文档 115
4.9 cmdlet开发最佳实践 125
命名约定 126
与宿主交互 127
4.10小结 128
第5章 提供程序 129
5.1实现提供程序类的原因 130
5.2基本概念 131
路径 131
驱动器 133
错误处理 134
功能 134
5.3 Hello World提供程序 135
5.4内置提供程序 137
别名提供程序 138
环境提供程序 138
文件系统提供程序 138
函数提供程序 139
注册表提供程序 140
变量提供程序 141
证书提供程序 141
5.5提供程序基类 141
CmdletProvier类 141
DriveCmdletProvider类 142
ItemCmdletProvider类 142
ContainerCmdletProvider类 143
NavigationCmdletProvider类 145
5.6可选的提供程序接口 145
IContentCmdletProvider接口 145
IPropertyCmdletProvider接口 146
IDynamicPropertyCmdletProvider接口 147
ISecurityDescriptorCmdletProvider接口 147
5.7 CmdletProvider基类 147
CmdletProvider的方法和属性 149
DriveCmdletProvider 152
ItemCmdletProvider 155
ContainerCmdletProvider 162
NavigationCmdletProvider 168
5.8设计准则与提示 179
5.9小结 179
第6章 在应用程序中集成PowerShell引擎 181
6.1运行空间和管道 181
6.2入门 182
6.3执行命令行 192
使用RunspaceInvoke 182
使用Runspace和Pipeline 184
6.4使用管道的输出 186
Invoke()返回值 186
使用管道返回的PSObject对象 187
处理终结型错误 187
6.5同步管道中的输入、输出和错误 189
将输入对象传递给管道 189
同步执行时的输出管道 190
从错误管道获取非终结型错误 190
ErrorRecord类型 191
6.6操作管道的其他技巧 192
嵌套式管道 192
管道重用 192
在运行空间之间复制管道 193
6.7配置运行空间 193
创建自定义配置的运行空间 194
添加和删除snap-in 194
通过控制台文件创建RunspaceConfiguration 195
通过程序集创建RunspaceConfiguration对象 195
使用SessionStateProxy设置和获取变量 196
6.8异步执行管道 199
调用InvokeAsyc() 199
关闭输入管道 200
从异步管道读取输出和错误 200
监视管道的StateChanged事件 204
由PipelineStateInfo.Reason读取终结型错误 205
停止正在执行的管道 206
6.9异步运行空间操作 206
OpenAsync()方法 206
处理运行空间的StateChanged事件 206
6.10编程创建管道对象 207
创建空管道对象 208
创建命令对象 208
合并命令结果 209
添加命令参数 210
向管道添加命令 211
6.11使用cmdlet作为GUI程序的API层 212
高层架构 212
cmdlet与GUI成功集成的关键技术 213
提供自定义的宿主 214
6.12小结 214
第7章 宿主 215
7.1宿主与Windows PowerShell引擎之间的交互 215
7.2 cmdlet和宿主的交互 223
7.3 PSHost类 227
InstanceId 228
Name 229
Version 230
CurrentCulture 230
CurrentUICulture 230
PrivateData 231
EnterNestedPrompt 231
ExitNestedPrompt 233
应用程序通知方法 234
SetShouldExit 235
7.4 PSHostUserInterface类 243
WriteDebugLine 245
WriteVerboseLine 245
WriteWarningLine 245
WriteProgress 246
WriteErrorLine 246
Write方法 246
Prompt方法 247
PromptForCredential 249
Read方法 250
7.5 PSHostRawUserInterface类 250
7.6小结 254
第8章 格式与输出 255
8.1四种视图类型 255
Table视图:format-table 256
List视图:format-list 256
Custom视图:format-custom 257
Wide视图:format-wide 258
8.2不使用*.format.ps1xml配置文件进行格式化 258
8.3格式配置文件示例 260
8.4加载格式文件 261
update-formatdata 262
snap-in 263
RunspaceConfiguration类的API接口 263
8.5格式配置文件详解 263
View 264
Name 264
ViewSelectedBy 264
GroupBy 265
8.6 TableControl 267
TableHeader 267
TableRowEntries 267
8.7 ListControl 268
8.8 WideControl 269
8.9 CustomControl 271
8.10 其他配置条目 272
Wrap 273
AutoSize 273
8.11 使用场合 273
格式化字符串 274
反序列化对象的格式问题 274
类继承问题 275
选择集 278
颜色 279
8.12小结 281
附录A cmdlet动词命名准则 283
附录B cmdlet参数命名准则 289
附录C 元数据 297
附录D 提供程序基类与重载/接口 309
附录E 用于提供程序交互的核心cmdlet 331