现在的位置: 首页 > 综合 > 正文

◎Windows PowerShell学习笔记

2013年09月06日 ⁄ 综合 ⁄ 共 4983字 ⁄ 字号 评论关闭

一、命令帮助

PowerShell是专为系统管理员设计的全新的 Windows 命令行外壳程序。其构建在 .NET 公共语言运行时 (CLR) .NET Framework 的基础之上,为您提供了对计算机上文件系统、注册表和数字签名证书的访问。

PowerShell引入了cmdlet(读作“command-let”)的概念,每个cmdlet是内置的,可以分别使用,但是组合使用它们时更能发挥其作用。PowerShell 包括一百多个基本的核心 cmdlet,是用于操作对象的单功能命令。

cmdlet由短划线 (-) 分隔的动词和名词,如 Get-HelpGet-Process Start-Service。在PowerShell 中,大多数cmdlet 都非常简单,它们设计为与其他 cmdlet 组合使用。例如,“getcmdlet 仅检索数据,“setcmdlet

仅建立或更改数据,“formatcmdlet 仅设置数据格式,“outmdlet 仅将输出定向到指定的目标。每个 cmdlet 都具有一个帮助文件,可以通过键入以下内容访问它:

get-help <cmdlet 名称>

您最初可能没有意识到,在PowerShell 中工作时,所使用的是 .NET 对象。但是随着经验的增加,您会发现自己使用的是对象,甚至用对象进行思考。

从技术上讲,.NET 对象是 .NET 类的实例,包含数据以及与该数据关联的操作,可以将对象视为具有属性和方法的数据实体。 例如,在PowerShell 中获取服务时,实际上是获取表示该服务的对象。查看有关服务的信息时,所查看的是其服务对象的属性,启动服务时,所使用的是服务对象的方法。类型相同的所有对象都具有相同的属性和方法,但是对象的每个实例可能具有不同的属性值。例如,每个服务对象都具有

Name Status 属性。但是,每个服务都可以具有不同的名称和不同的状态。

使用对象的一个主要优点是,它使得用管道传输命令(即,将一个命令的输出作为输入传递到另一命令)容易得多。通信通常需要字符串操作,以便将输出从一种格式转换为另一种格式,并删除标题和列标题。

 PowerShell提供了一个基于对象而不是基于文本的新交互模型。接收对象的 cmdlet 可以直接作用于其属性和方法,而无需进行转换或操作。用户可以通过名称引用对象的属性和方法,而不是计算数据在输出中的位置。

在以下示例中,将 IpConfig 命令的结果传递到 Findstr 命令。管道运算符 (|) 将其左侧命令的结果发送到其右侧的命令。在PowerShell 中,无需操作字符串或计算数据偏移量。

PS> ipconfig | findstr "Address"

IP Address. . . . . . . . . . . . : 172.28.21.5

IP Address. . . . . . . . . . . . : 172.30.160.225

PowerShell 中,脚本文件的文件扩展名为

.ps1,在命令提示符下键入脚本的名称即可运行脚本,扩展名是可选的。例如:c:/test/testscript.ps1c:/test/testscript即使脚本在当前目录中,也必须指定脚本文件的完全路径。可以使用点 (.) 表示当前目录。例如:./testscript.ps1由于脚本可以用于传播恶意代码。因此PowerShell 中的安全策略允许您确定脚本是否可以运行,以及它们是否必须包括数字签名。PowerShell 中的执行策略都不允许通过双击脚本的图标来运行它。PowerShell包括一种非常丰富的脚本语言,使用该语言可以创建从最简单到非常复杂的脚本。它支持用于循环、条件、流控制和变量赋值的语言结构。

若要显示 cmdlet 的帮助,请键入“get-help”,后跟该 cmdlet 的名称。例如:get-help get-command(如 Get-HelpGet-CommandGet-ProcessGet-Service Get-Eventlog)若要显示 cmdlet的详细帮助,包括参数说明和示例,请使用 Get-Help Detailed 参数。例如:

get-help get-command -detailed

若要仅查看示例,请使用 Examples 参数。例如,若要显示 Get-Command cmdlet 的示例,请键入:

get-help get-command -examples

若要仅查看详细的参数说明,请使用 Get-Help Parameter 参数。可以指定参数的名称,或者使用通配符 (*) 指定所有参数。例如,若要查看 Get-Command TotalCount 参数说明,请键入:

get-help get-command -parameter totalcount

若要查看 Get-Command cmdlet 的所有参数,请键入:

get-help get-command -parameter *

也可以使用调用 Get-Help PowerShell函数之一。Help 函数一次显示一整屏帮助内容。Man 函数显示与 Unix 中的手册页类似的帮助。若要使用 Help Man 函数显示 Get-Command cmdlet 的帮助,请键入:man get-command help get-command

以下笔记

转自桃花岛

假定文件夹为c:/restored 列出文件夹中所有文件:

get-childitem c:/restored

注:get-childitem执行起来有点像dir,但是dir能够列出注册表中某特定键值的子键吗?先别急,我们慢慢来。:)

列出文件夹中所有文件,不包括后缀为tmp的文件:

get-childitem c:/restored -exclude *.tmp

列出文件夹中所有文件,不包括后缀为tmptemp的文件:

get-childitem c:/restored -exclude *.tmp, *.temp

列出当前文件夹中所有文件,只包括后缀为docxls的文件:

get-childitem c:/restored/*.* -include *.doc, *.xls

列出当前文件夹以及所有子文件夹中所有文件,只包括后缀为pdf的文件:

get-childitem c:/restored -recurse -include *.pdf

列出文件夹中所有文件,不包括后缀为tmp的文件、只显示文件名和长度:

get-childitem c:/restored -exclude *.tmp | select-object name, length

列出文件夹中所有文件,不包括后缀为tmp的文件、显示所有属性、以列表方式输出:

get-childitem c:/restored -exclude *.tmp | select-object * | format-list

改变当前目录位置到c:/restored

set-location c:/restored

注:也可以用cd命令以及sl,这是set-location的别名

返回Home目录:

cd ~

 

c:/restored映射为x盘:

new-psdrive x -psprovider filesystem -root c:/restored

把以下注册表键值映射为y盘:

new-psdrive -name y -psprovider    registry -root

HKCU:/Software/Microsoft/Windows/CurrentVersion

列出别名,根据定义排序:

get-alias | sort-object definition

还是假定c:/restored为我们执行操作的文件夹,

列出文件夹中所有文件,以大小、文件名排序:

get-childitem c:/restored | sort-object length, name

列出文件夹中所有文件,以大小、文件名排序,倒序排列:

get-childitem c:/restored | sort-object length, name -descending

列出文件夹中所有文件,以大小、文件名排序,倒序排列,只显示前20个:

get-childitem c:/restored | sort-object length, name -descending | select-object

-first 20

列出文件夹中所有文件,以大小、文件名排序,倒序排列,只显示后20个:

get-childitem c:/restored | sort-object length, name -descending | select-object

-last 20

察看对象的属性和方法:

get-childitem c:/restored | get-member

想知道c:/restored目录里每种文件各有多少?

get-childitem c:/restored | group-object extension

根据文件创建的年、月分组:

get-childitem c:/restored | group-object {$_.CreationTime.Year},

{$_.CreationTime.Month}

想知道c:/restored目录里文件的平均大小?总的大小?最大的文件大小?最小的文件大小?

get-childitem c:/restored | measure-object length -average -sum -maximum

-minimum

只想知道总的大小?

(get-childitem c:/restored | measure-object length -sum).sum

注:比较一下这个命令和上述两个命令输出结果的不同:

get-childitem c:/restored | measure-object length -sum

删除所有.tmp文件:

remove-item c:/restored/*.tmp

删除所有大于1M的文件:

get-childitem c:/restored | where-object {$_.length -gt 1048576} |

foreach-object {remove-item $_.fullname}

注:除了-gt,还有-lt, -le, -ge, -eq, -ne, -contains, -notcontains, -like, -notlike, -match, -notmatch这些参数可用,试试看他们各有啥作用。对了,如果有大小写敏感的要求,试着在这些参数前加c,例如-cgt

PowerShell理解KB, MBGB,上面的命令可以简写成:

get-childitem c:/restored | where-object {$_.length -gt 1MB} | foreach-object

{remove-item $_.fullname}

PowerShell也懂得:

1MB + 1MB

 

新建一个文件夹:

new-item    c:/restored/test -type directory

验证文件夹(路径)是否已经存在:

test-path c:/restored/test

如果存在,PowerShell返回True;否则返回false    

想知道c:/restored下面是否有bat文件也可以用上面的命令:

test-path c:/restored/*.bat

如果存在,PowerShell返回True;否则返回false

根据文件扩展名自动创建文件夹:

get-childitem c:/restored | select-object extension | sort-object extension

-unique | foreach-object {new-item ("c:/restored/"+$_.extension) -type

directory}

根据文件扩展名移动文件:

get-childitem c:/restored | where-object {$_.mode -notmatch "d"} |

foreach-object {$b = "c:/restored/" + $_.extension; move-item $_.fullname $b}

假定工作目录为c:/test,

列出工作目录及其子目录下所有文件:

get-childitem c:/test -recurse

只列出目录和子目录名:

get-childitem c:/test -recurse | where-object {$_.mode -match "d"}

抱歉!评论已关闭.