当前位置:首页 > Windows程序 > 正文

Windows Powershell 3 极速入门

2021-03-27 Windows程序

Learn Windows PowerShell 3 in a Month of Lunches(2rd) 2013, DON JONES

  这本书基于 PowerShell 3.0,做初学者教材甚好,若有 Linux shell 基础则可一目十行。如下便是摘录式笔记,仅记录一些感兴趣的重点,涉及大部分章节。
  书中很少涉及语法,因为按作者的说法:操起命令直接上,这才是 PS 的主要使用模式(PowerShell-ish ways),而非一般的脚本编程,流控之类的语法都只是命令的粘合剂。
  读完一遍,对 PS 突出印象:

现代化的、风格一致的设计
应该借鉴了 Linux shell、python、C# 等;一致性降低了学习使用成本

面向对象、基于 .NET 框架
一切皆对象,,消除了无结构文本的弊端;可以直接使用 .NET 对象,功能真强

命令式
开发迭代模型:run—result—modify—retry

ch2. Meet PowerShell(初识 PS)

PowerShell 包含两个组件:

PS console
轻快,不支持双字节字符集,无补全

PS ISE (integrated scripting environment)
基于 WPF,支持中文,强大的帮助与补全

查看版本号: $PSVersionTable

ch3. Using the help system(帮助系统)

媲美 GUI 的 CLI 帮助系统:能迅速找到命令并了解其用法(支持通配符)

Get-Command 查找匹配的命令

Get-Help 查看命令用法

Get-Member 查看对象的类型和成员

Help 是 function,相当于 Get-Help | More
查看示例:Help Get-EventLog -example
详细信息:Help -full

Show-command 带 GUI 帮助的填写

4 种命令 Command:cmdlet(命名约定 verbs+nouns),function,workflow,externApp。例: Get-Service -name e,s*
帮助系统先升级:update-help(-Source 可指定本地更新源)
多个参数搭配路径

ch4. Running commands(命令)

cmdlet:原生命令,为 .Net 语言编写

可选 optional 参数整个在方括号里 [-ComputerName <string[]>],这里的数组用逗号分隔的列表表示;用参数缩写时能唯一标识即可,如 -comp

否则为强制 mandatory 参数,[-LogName] <string>

若参数名称也在方括号里,则为位置 positional 参数

externApp(外部命令,但应优先用 cmdlet)
$exe = “C:\mount.exe”
$host = “srv”
$user = “nick”
& $exe -h $host -u $user
新写法:-- C:\mount.exe -h srv -u nick,会直接传给 cmd,不解析

ch5. Working with providers

PSProvider 适配器,以类文件系统的方式,来导航与管理数据存储(动态结构),如注册表。查看可用:Get-PSProvider
相关 cmdlet 的 noun 常带 “Item”(指单独对象,如文件)
ItemProperty 表示 item 属性,如只读,一般都有 -Path 属性,支持通配符;ChildItem 指子对象

ch6. The pipeline: connecting commands(Pipeline) ch7. Adding commands(PS 扩展机制)

两种:module 和 snap-in(dll+xml)
get-pssnapin -registered 注册
add-pssnapin sqlservercmdletsnapin100,sqlserverprovidersnapin100
Get-Command -pssnapin sqlservercmdletsnapin100
module 不用注册,根据 $PSModulePath 自动发现,按需加载
get-command -Module DnsClient

有些特定的管理 shell 其实是带参数启动 powershell.exe -noexit -command import-module ActiveDirectory

ch8. Objects: data by another name(对象)

查看:get-process | get-member

a collection of objects as a big in-memory table of information, with propertiesas the columns and individual objects the rows.

PS 对象一般来自 .net 框架,但 ETS(Extensible Type System)会添加些额外属性(ScriptProperty,NoteProperty,AliasProperty)以利使用。
对象的 property 用的很多,但 action/method 很少用,因为通常由 cmdlet 实现
Get-Process | Sort-Object VM,ID -desc
Get-Process | Select-Object Name,ID,VM,PM
Select-Objectis 用来选择或新建 properties(会产生新对象), 以及特定行,-expandProperty 可以获取值列表. 而 Where-Object 根据指定条件删除或过滤 pipeline 里的 objects。
pipeline 的每一步都可能产生不同对象,所以要用 gm 来确定

ch9. The pipeline,deeper(深入 pipeline)

Pipeline parameter binding:
Try1. ByValue:把输入与参数类型进行匹配;参数需支持pipelineInputByValue(可通过 Help -full 查看);仅能匹配一个参数(能否手动指定?)
Try2. ByPropertyName:仅名字匹配;需支持pipInByPropertyName;多参数匹配
圆括号命令用法:
Get-WmiObject -class Win32_BIOS -ComputerName (Get-Content .\comput
ers.txt)

ch10. Formatting—and why it’s done on the right(格式化) ch11. Filtering and comparisons(过滤与比较)

Filter left (命令需支持 -filter 参数)

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/68462.html