图书目录

目    录

第1章  PowerShell简介 1

1.1  Windows PowerShell设计原则 1

1.1.1  保留用户已有的投资 2

1.1.2  提供一个功能强大、面向

对象的外壳程序 2

1.1.3  扩展性是第一位的 2

1.1.4  剔除开发过程中的障碍 3

1.2  Windows PowerShell快速入门 3

1.3  Windows PowerShell的高层

体系结构 10

1.3.1  宿主程序 11

1.3.2  Windows PowerShell引擎 11

1.3.3  Windows PowerShell snap-in 11

1.4  小结 12

第2章  扩展Windows PowerShell 13

2.1  PowerShell snap-in分类 13

2.2  编写标准的PowerShell 

snap-in 14

2.2.1  编写PowerShell snap-in 14

2.2.2  注册PowerShell snap-in 17

2.2.3  查看可用的PowerShell 

snap-in列表 19

2.2.4  将PowerShell snap-in动态

装载到外壳程序中 19

2.2.5  从外壳程序中动态删除

snap-in 20

2.2.6  取消注册snap-in 21

2.2.7  注册没有实现类的

PSSnapin snap-in 22

2.2.8  保存snap-in配置文件 22

2.2.9  用保存的snap-in配置文件

启动PowerShell 23

2.2.10  使用配置文件(profile)

保存snap-in配置 24

2.3  创建自定义的PowerShell 

snap-in 24

2.3.1  编写自定义的snap-in 24

2.3.2  使用自定义的snap-in 27

2.4  小结 28

第3章  理解PowerShell扩展类型

系统 29

3.1  PSObject 29

3.2  构造PSObject对象 30

3.2.1  PSObject(object) 31

3.2.2  PSObject() 31

3.2.3  PSObject.AsPSObject

(someobject) 32

3.3  ImmediateBaseObject属性和

BaseObject属性 33

3.4  成员 35

3.4.1  PSMemberInfoCollection 36

3.4.2  ReadOnlyPSMemberInfo- 

Collection 37

3.4.3  基类成员、适配器成员和

扩展型成员 38

3.5  成员分类 39

3.5.1  属性 40

3.5.2  方法 48

3.5.3  集合 53

3.6  TypeNames 56

3.7  查找算法 57

3.8  距离算法 57

3.9  PSObject的固有成员和

MemberSets 58

3.10  错误和异常 58

 3.10.1  运行时错误 59

 3.10.2  初始化错误 59

3.11  类型转换 60

3.11.1  PowerShell语言中的标准

类型转换 60

 3.11.2  自定义型转换 61

3.12  ToString方法 63

3.13  类型配置(TypeData) 63

 3.13.1  常用成员 65

 3.13.2  脚本访问 66

3.14  小结 66

第4章  开发cmdlet 67

4.1  基本概念 67

4.1.1  命令行解析 69

4.1.2  命令发现 69

4.1.3  参数绑定 70

4.1.4  命令调用 70

4.2  使用参数 71

4.2.1  强制参数 71

4.2.2  位置参数 72

4.2.3  参数集合 75

4.2.4  参数值验证 82

4.2.5  参数转换 85

4.3  处理管道输入 90

4.4  生成管道输出 98

4.5  错误报告 100

4.5.1  ErrorRecord类 100

4.5.2  ErrorDetails类 103

4.5.3  非终结型错误和致命错误 105

4.6  支持ShouldProcess 106

4.6.1  影响确认等级 108

4.6.2  ShouldContinue() 110

4.7  使用PowerShell系统路径 110

4.8  编写cmdlet帮助文档 115

4.9  cmdlet开发最佳实践 125

4.9.1  命名约定 126

4.9.2  与宿主交互 127

4.10  小结 128

第5章  提供程序 129

5.1  实现提供程序类的原因 130

5.2  基本概念 131

5.2.1  路径 131

5.2.2  驱动器 133

5.2.3  错误处理 134

5.2.4  功能 134

5.3  Hello World提供程序 135

5.4  内置提供程序 137

5.4.1  别名提供程序 138

5.4.2  环境提供程序 138

5.4.3  文件系统提供程序 138

5.4.4  函数提供程序 139

5.4.5  注册表提供程序 140

5.4.6  变量提供程序 141

5.4.7  证书提供程序 141

5.5  提供程序基类 141

5.5.1  CmdletProvier类 141

5.5.2  DriveCmdletProvider类 142

5.5.3  ItemCmdletProvider类 142

5.5.4  ContainerCmdletProvider类 143

5.5.5  NavigationCmdletProvider类 145

5.6  可选的提供程序接口 145

5.6.1  IContentCmdletProvider

接口 145

5.6.2  IPropertyCmdletProvider

接口 146

5.6.3  IDynamicPropertyCmdletProvider

      接口 147

5.6.4  ISecurityDescriptorCmdletProvider

接口 147

5.7  CmdletProvider基类 147

5.7.1  CmdletProvider的方法和

属性 149

5.7.2  DriveCmdletProvider 152

5.7.3  ItemCmdletProvider 155

5.7.4  ContainerCmdletProvider 162

5.7.5  NavigationCmdletProvider 168

5.8  设计准则与提示 179

5.9  小结 179

第6章  在应用程序中集成PowerShell

引擎 181

6.1  运行空间和管道 181

6.2  入门 182

6.3  执行命令行 182

6.3.1  使用RunspaceInvoke 182

6.3.2  使用Runspace和Pipeline 184

6.4  使用管道的输出 186

6.4.1  Invoke()返回值 186

6.4.2  使用管道返回的PSObject

对象 187

6.4.3  处理终结型错误 187

6.5  同步管道中的输入、输出和

错误 189

6.5.1  将输入对象传递给管道 189

6.5.2  同步执行时的输出管道 190

6.5.3  从错误管道获取非终结型

错误 190

6.5.4  ErrorRecord类型 191

6.6  操作管道的其他技巧 192

6.6.1  嵌套式管道 192

6.6.2  管道重用 192

6.6.3  在运行空间之间复制管道 193

6.7  配置运行空间 193

6.7.1  创建自定义配置的运行

空间 194

6.7.2  添加和删除snap-in 194

6.7.3  通过控制台文件创建

RunspaceConfiguration 195

6.7.4  通过程序集创建

RunspaceConfiguration对象 195

6.7.5  使用SessionStateProxy

设置和获取变量 196

6.8  异步执行管道 199

6.8.1  调用InvokeAsyc() 199

6.8.2  关闭输入管道 200

6.8.3  从异步管道读取输出和

错误 200

6.8.4  监视管道的StateChanged

事件 204

6.8.5  由PipelineStateInfo.Reason

读取终结型错误 205

6.8.6  停止正在执行的管道 206

6.9  异步运行空间操作 206

6.9.1  OpenAsync()方法 206

6.9.2  处理运行空间的

StateChanged事件 206

6.10  编程创建管道对象 207

 6.10.1  创建空管道对象 208

 6.10.2  创建命令对象 208

 6.10.3  合并命令结果 209

 6.10.4  添加命令参数 210

 6.10.5  向管道添加命令 211

6.11  使用cmdlet作为GUI程序的

API层 212

 6.11.1  高层架构 212

6.11.2  cmdlet与GUI成功集成

的关键技术 213

 6.11.3  提供自定义的宿主 214

6.12  小结 214

第7章  宿主 215

7.1  宿主与Windows PowerShell

引擎之间的交互 215

7.2  cmdlet和宿主的交互 223

7.3  PSHost类 227

7.3.1  InstanceId 228

7.3.2  Name 229

7.3.3  Version 230

7.3.4  CurrentCulture 230

7.3.5  CurrentUICulture 230

7.3.6  PrivateData 231

7.3.7  EnterNestedPrompt 231

7.3.8  ExitNestedPrompt 233

7.3.9  应用程序通知方法 234

7.3.10  SetShouldExit 235

7.4  PSHostUserInterface类 243

7.4.1  WriteDebugLine 245

7.4.2  WriteVerboseLine 245

7.4.3  WriteWarningLine 245

7.4.4  WriteProgress 246

7.4.5  WriteErrorLine 246

7.4.6  Write方法 246

7.4.7  Prompt方法 247

7.4.8  PromptForCredential 249

7.4.9  Read方法 250

7.5  PSHostRawUserInterface类 250

7.6  小结 254

第8章  格式与输出 255

8.1  四种视图类型 255

8.1.1  Table视图:format-table 256

8.1.2  List视图:format-list 256

8.1.3  Custom视图:

format-custom 257

8.1.4  Wide视图:format-wide 258

8.2  不使用*.format.ps1xml配置

文件进行格式化 258

8.3  格式配置文件示例 260

8.4  加载格式文件 261

8.4.1  update-formatdata 262

8.4.2  snap-in 263

8.4.3  RunspaceConfiguration

类的API接口 263

8.5  格式配置文件详解 263

8.5.1  View 264

8.5.2  Name 264

8.5.3  ViewSelectedBy 264

8.5.4  GroupBy 265

8.6  TableControl 267

8.6.1  TableHeader 267

8.6.2  TableRowEntries 267

8.7  ListControl 268

8.8  WideControl 269

8.9  CustomControl 271

8.10  其他配置条目 272

 8.10.1  Wrap 273

 8.10.2  AutoSize 273

8.11  使用场合 273

 8.11.1  格式化字符串 274

8.11.2  反序列化对象的格式

问题 274

 8.11.3  类继承问题 275

 8.11.4  选择集 278

 8.11.5  颜色 279

8.12  小结 281

附录A  cmdlet动词命名准则 283

附录B  cmdlet参数命名准则 289

附录C  元数据 297

附录D  提供程序基类与重载/接口 309

附录E  用于提供程序交互的核心

cmdlet 331