Windows PowerShell ISE

导语:对于电脑高手来说,华丽的图形界面往往并不实用,快捷的键盘命令才是王道。Win7集成的PowerShell2.0,更是其中的王中王,让你直接掌控你的电脑命脉。

  Win7中集成了PowerShell2.0,如今任何GUI执行的管理任务(例如控制系统,访问注册表、系统日志和数字签名证书等数据)都能通过PowerShell脚本来完成了,如果你的系统是WinXP/Vista/2003/2008,只需到http://support.microsoft.com/kb/968929下载安装PowerShell2.0,即可使用这个新一代的命令行工具!

  一、PowerShell是何方神圣?

  PowerShell是CMD的升级版,类似C++语言,提供了200多条命令、还有循环、条件、流控制和变量赋值等语言结构,可以让你创建各种复杂的脚本去完成任务。它支持完全交互式环境,可在提示符下逐条键入命令执行,例如输入命令get-process回车,系统返回该命令结果,也可以将多条命令写在同一个脚本文件中连续执行,脚本文件的文件扩展名为 .ps1,在命令提示符下键入该脚本名称(文件扩展名可选)即可自动连续执行脚本中的所有命令;命令执行的结果能输出到外壳程序窗口、文件或打印机中,还能使用管道运算符 (|) 输出到其他命令中。

  二、启动PowerShell

  在Win7中点击“开始→所有程序”,在“附件”中有个Windows PowerShell,点击展开Windows PowerShell,里面有Windows PowerShell ISE和Windows PowerShell这两个选项(图1),后者是CMD那样的命令行模式界面,前者是图形化的PowerShell开发环境、包含了调试功能和交互式控制台,适合PowerShell编程的用户使用。

  除了以上方法能启动PowerShell,在传统的CMD窗口中输入PowerShell回车也能启动PowerShell,与CMD不同,PowerShell的提示符是PS开头的(图2);

  如要启动PowerShell ISE,可以点击“开始→所有程序→附件→Windows PowerShell→Windows PowerShell ISE”,这是一个集成的脚本环境(图3),里面有3个窗格,在顶部窗格中你可以练习编程创建或编辑脚本,中间是运行结果,最下方窗格中能输入运行PowerShell命令。

  三、PowerShell支持哪些命令?

  启动PowerShell后,在窗口中输入get-command回车会显示PowerShell的所有命令,按照命令的类型、名称和描述一行一个命令列出清单(图4),有Alias、Cmdlet、Function三种命令类型,其中cmdlet命令有129条,这是用于操作对象的单功能命令,其书写格式是由-分隔的动词和名词,例如Get-Process、Start-Service等,大多数 cmdlet都非常简单,它们设计为与其他 cmdlet 组合使用,例如Get-Process仅显示当前系统内的进程,输入Get-Process|findstr “svchost”(图5),就会将Get-Process命令的结果传递到 Findstr 命令,用管道运算符 (|) 将其左侧命令的结果发送到其右侧的命令,这样只会列出含有“svchost”的进程。如要查看某命令的详细用法可使用get-help命令,例如输入get-help get-process回车即可显示该命令的名称、摘要、语法、详细说明、相关链接及备注。

  PowerShell能管理系统服务、操作注册表、进行众多的网络相关操作,可以方便地查看和结束系统内的进程,例如输入get-process就会列出系统中进程的句柄、进程名、进程占用处器时间和进程ID,如要结束某个或多个进程,只需先用get-process查看该进程的ID,然后输入Stop-process,再根据提示输入一个或多个进程的ID,按下回车后这些进程即可被结束。

  PowerShell还允许用别名来启动某命令和系统内建的工具,例如你输入命令set-alias gp get-process,可将gp设置为get-process的别名,以后输入gp即可启动get-process了,再如你输入命令set-alias ca calc将ca设置为计算器calc的别名,以后输入ca即可启动计算器。

 

[NextPage]

 

  四、语法与范例

  下面给出一些PowerShell命令范例:

  功能

  格式和备注

  范例

  数学运算

  输入要计算的表达式,结果就会出来的

  PS C:\> 105+20

  PS C:\> (2+3*4)/512

  输出文本

  PowerShell不需要打印语句,在要输出的文本前后加上引号即可

  PS C:\> "hello"

  大小写转换

  将字串转为英文大写字母"HELLO"

  PS C:\> "hello".ToUpper()

  插入字串

  在字串的第1个字符后插入字串

  PS C:\> "hello".Insert(1, "my")

  输出结果存储到临时文件

  计算结果保存到lbb.txt文件中

  PS C:\>(1-2)*3/4 > c:\lbb.txt

  列出文件中的内容

  用type命令将文件的结果取回

  PS C:\>type c:\lbb.txt

  运算结果存储到变量中

  运算结果存储到变量x中,以后可调用这个变量x

  PS C:\> $x=(3-1)*2

  变量运算

  变量x中数据与3进行运算

  PS C:\> $x/3

  数组

  将当前目录下的目录项对象集合保存到dirs数组中

  PS C:\> $dirs=dir

  数组访问

  PowerShell数组下标是从0开始的,这是返回dirs中保存的第一个目录项对象

  PS C:\> $dirs[0]

  访问注册表

  PowerShell中,HKEY_LOCAL_MACHINE 配置单元映射到 HKLM: 驱动器,而 HKEY_CURRENT_USER 配置单元映射到 HKCU: 驱动器

  PS C:\> cd hklm:

  PS HKLM:\> dir

  访问证书存储区

  证书存储区映射到 Cert: 驱动器

  PS C:\> cd cert:

  PS cert:\> dir

  等待calc程序执行结束

  PS C:\> $processToWatch = get-process calc

  PS C:\> $processToWatch.WaitForExit()

  管道运算符 (|)应用

  停止运行所有以"i"字符开头的程序

  PS C:\> get-process i* | stop-process

  计算当前目录下所有文件的长度总和

  PS C:\>get-childitem | measure-object -property length -sum

 

 

 

 

1, 工具

学习任何东西,工具选对了,至关重要。好的工具能让你一日千里,事半功倍。否则就悲催了。 PowerShell 常用的工具一般是系统自带的Windows PowerShell ISE(开始==〉所有程序 ==> 附件 ==〉windows powershell), 刚开始接触ps的时候, 都是用记事本或者直接powershell cmd, 用这个做些简单的工作, 很是很轻松的。 一旦要用脚本实现一些复杂功能的时候, 你就会发现仅使用这两种方式简直就是噩梦。powershll cmd不能保存, 记事本又不能继承智能提示。

2,cmdlet

PowerShell引入了 cmdlet(读作“command-let”)的概念,每个cmdlet是内置的,可以分别使用,但是组合使用它们时更能发挥其作用。cmdlet有一种统一的命名方法: 动词-名词,如 Get-Help、Get-Process 和 Start-Service。在PowerShell 中,大多数 cmdlet 都非常简单,它们设计为与其他 cmdlet 组合使用。例如,

get 检索数据

set 仅建立或更改数据

format 仅设置数据格式

out 仅将输出定向到指定的目标。

换行符·转义字符 ' 

3, 运算符

算数运算符  +  -  *  /  %

赋值运算符 =  +=  -=  *=  /=  %=  ++  --

比较运算符 

-eq 等于 -ne 不等于 -gt 大于 -ge 大于等于 -lt 小于 -le 小于等于 -like -notlike 相似 一般与通配符*配合使用

-match -notmatch 正则表达式匹配

-contains -notcontains 单词包含

-replace 替换

逻辑运算符

-and -or -xor -not或者!

重定向运算符

> 覆盖输出 >> 追加输出 2>错误输出 2>>错误追加

拆分连接运算符

-split -join

类型运算符

-is -not -as

位运算符

-bAND -bOR -bXOR

特殊运算符

& 调用运算符, 指示它后面的字符串或者其他变量等为命令

 .      方法调用, 文件调用

::  静态成员

..  范围运算符 1.. 10 1到10

-f    格式运算符

$()  子表达式运算符 返回一条或多条语句的结果。对于单个结果将返回标量。对于多个结果将返回数组。

@( ) 数组子表达式运算符

,  运算符用作二元运算符时,逗号用于创建数组。用作一元运算符时,逗号用于创建只含一个成员的数组。

3, 设置

出于安全考虑,操作系统默认不会自动执行Powershell 脚本,因此,我们需要调整 ExecutionPolicy 来确保Powershell脚本运行。最佳方法是使用下列命令:set-ExecutionPolicy RemoteSigned. 或者是 set-ExecutionPolicy unrestricted.

注意这里的set就是cmdlet的一个标准格式, 你也可以使用get-来查询当前的ExecutionPolicy

也可以单独使用:powershell -ExecutionPolicy RemoteSigned c:\ServerInit.ps1

4, PowerShell 的管道

a) |  管道字符 前一个命令输出做为后一个的输入

b) $_ 管道中的对象

 Get-WMIObject Win32_Service | Where-Object {$_.StartMode -eq “Disabled” }

Get-Content C:\Computers.txt | Select-Object Length | Format-List

4, 内置的cmdlets

powershell那只的cmdlets分为13大块
1. system: 有关系统的build-in cmdlets
2. Objects: 有关对象的内置cmdlets
3. Items: 有关条目(Item)的内置cmdlets
4. Aliases:有关别名的内置Cmdlets
5. Drivers:有关驱动器的内置cmdlets
6. Paths: 有关路径和位置的cmdlets
7. Contents: 有关内容的内置cmdlets
8. Access Operating System Components: 访问操作系统组件的cmdlets
9. Output formatters: 有关输出格式的内置cmdlets
10. Variable: 变量
11. Security: 有关安全的内置cmdlets
12. Miscellaneous Powershell: 其他Powershell内置cmdlets
13. Debugging: 有关调试的内置cmdlets

1)System

a) get-help. 这是发掘Powershell内置资料库的最好命令。在很多的cmdlets,都是以动词"get"开头,比如 get-help alias。 请记住get-help支持通用符,比如输入get-help *object
b) get-command: 显示有关Powershell的版本号(不要把它和主机名搞混了)。这个命令可以帮你去查看你的Powershell版本号
c) get-culture: 显示主机的区域设置信息(就如控制面板里的区域设置显示一样)
d) get-uiculture: 显示主机的当前用户界面区域性信息
更多关键系统cmdlets请参考以前(3. Powershell 关键命令介绍)


2) Object

a) get-member: 这是现在为止最重要的cmdlet . get-member列举了对象的属性(Properties)、方法(Method)、类(Type)型等信息, 比如
get-wmiobject | get-member
请参考前面的特别介绍get-member的文章
b) foreach-object: 这个cmdlets的目的是在多个对象中执行循环,比如驱动器。foreach对于管道中的每个对象执行相同的脚本,比如
$Nic= get-WmiObject Win32_NetworkAdapterConfiguration
foreach ( $MacAdr in $Nic ) { "Mac Address = " + $MacAdr.MacAddress}
请注意,括号的作用是很重要的,() 或{},每个都有特定的作用(条件){脚本块}。也请注意+,他不但可以把数字相加,而且可以把文本相连。
c) where-object ( 经常会被简写成"Where"),依据管道的条件来过滤输入,允许只对特定的对象进行操作,比如
get-service | where-object{$_status -eq "stopped"}
d) new-object: 创建.net或者com对象的实例。New-object在创建VBScript对象的时候特别有用,比如网罗对象,活动目录对象(Active Directory Object),其他的程序比如IE对象也在此列。
e) Select-object: 基于设置在cmdlet命令行的参数来过滤对象
f) group-object: 一个非常有潜力的cmdlet, 在搜集基于相同属性的对象的时候非常有用
g) sort-object: 按照属性值进行排序


3)Items
a) get-childitem: 显示特定目录的子项目,比如在一个文件夹的文件清单
b) Get-item:获取为了某个命令空间的对象的值,比如get-iem .\* 显示了在当前目录的所有文件
c) new-item: 在命名空间中创建新项目,比如创建子目录
d) set-item: 将项的值更改为特定的值
e) Remove-item: 删除指定项
f) move-item: 把项从一个地方转移到别处,并且把原文件删除
g) rename-item: 对现有对象重命名
h) copy-item: 把对象从一个地方复制到别处,保留原文件
i) clear-item: 删除对象的内容,但是不会删除对象,比如可以注册表键值删除掉,但是不会删除该注册表
j) invoke-item: 对对象指定某种程序执行
k) get-acl: 获取某个文件或者项的访问控制清单(ACL)
l) set-acl: 对某个文件或者项设置安全访问控制清单


4)Alias
想了解别名Alias很简单,只要从我们内置的那些alias开始就行,比如gci (get-childitem), 比如Ft(format table). 例子有, get-process * | ft name,handles,cpu -auto
a) set-alias: 对某个别名设置一个别名,你可以用它来创建你自己的别名
b) get-alias: 返回所有定义好的别名
c) new-alias: 创建一个新的别名,但是如果退出Poweshell中,这个别名将不能使用
d) export-alias: 把系统所有别名导出到CSV格式的文件中
e) import-alias: 从CSV 文件中更新系统别名


5) Drives

a) get-psdrive: 获取有关Poweshell驱动器的所有信息
b) new-PSdriver: 新建Poweshell驱动器
c) get-psProvider: 返回所有注册的CMDlet提供程序和驱动器
d) Remove-Drive: 从cmdlet提供商删除驱动器


6)Paths and Location 路径和位置
a) get-location: 显示当前位置
b) set-location: 更改当前工作位置(它的别名是CD)
c) combine-path: 将路径从 Windows PowerShell 路径转换为 Windows PowerShell 提供程序路径
d) test-path: 检查路径是否存在,存在的话返回正确,否则就是错误
a) e)resolve-path: 解析路径中的通用符
e) Push-location将当前位置推入堆栈
f) pop-location: 将当前位置更改为最近推入到堆栈中的位置


7) Contents

a) add-content: 将内容追加到一个文件里,如果文件不存在就创建
b) clear-content: 把文件里的内容清除,但是文件还是保留
c) get-content: 按行读取文件内的内容
d) set-content: 把文件内的所有内容以新内容取代


8) Access Operation System Components
a) get-process: 返回所有运行的系统进程
b) stop-process: 停止一个运行的进程
c) get-service: 返回显示注册的系统服务
d) stop-service: 停止正在运行的系统服务
e) start-service: 启动已经停止的系统服务
f) suspend-service: 暂停正在运行的系统服务
g) resume-service: 继续暂停的系统服务
h) restart-service: 停止并重新启动系统服务
i) set-service: 重新配置系统服务
j) New-service: 注册一个新的系统服务
k) get-eventlog: 返回指定系统日志的详细清单
l) get-wmiobject: 从WMI返回数据


9)output Formatters

a) Out-file: 将输出结果写入到一个文件中
b) out-printer: 将输出结果发送到打印机上
c) out-string: 把输出结果返回给一个字符串
d) out-null: 忽略所有输出
e) out-default: 把输出发送到主机,不能在命令行中调用
f) out-host: 把输出发送到主机
g) format-list: 将输出的格式设置为属性列表,其中每个属性均各占一行显示
a) H) format-table: 将输出的格式设置为表(每行一个对象)
h) format-wide: 将对象的格式设置为只能显示每个对象的一个属性的宽表 (可以几个对象一行)
i) import-csv: 导入使用 Export-CSV cmdlet 产生的格式的逗号分隔值 (CSV) 文件,并返回对应于该 CSV 文件中所表示的对象的对象
j) export-csv: 创建逗号分隔值 (CSV) 文件来显示输入对象
k) write-host: 使用主机用户界面来显示对象
l) Write-progress: 在 Windows PowerShell 命令窗口内显示进度栏。
m) write-debug: 将调试消息写入主机显示屏
n) Write-verbose: 将字符串写入主机的详细显示屏
o) write-error: 将对象写入错误管道
p) read-host: 从控制台读取一行输入


10)Variable 变量
a) get-variable: 返回变量的值
b) new-variable: 创建带特定名称和值的新变量
c) set-variable: 更新或者创建新的变量,
d) remove-variable: 删除变量定义
e) clear-variable: 清空所有变量的值,但是定义继续保留


11)Security

a) get-pfxcertificate: 获取文件中有关X509Certificate的信息
b) get-credential: 通过询问通过提供密码来生成凭证
c) get-authenticodesignatureL获取文件中有关 Authenticode 签名的信息。
d) set-authenticodesignature: 更新Authenticode签名


12) Miscellaneous Poweshell

a) get-date: 显示当前日期和时间
b) set-date: 更改系统日期和时间
c) measure-object: 度量对象的特征及其属性
d) new-timespan: 比较两个时间日期对象的时间
e) start-sleep: 暂停 处理


13)Debugging 调试
Get-Command 的结果
下列命令可以得到所有的cmdlet
get-command | fw -column 3

6, 与Driver交互

get-psprovider 可以查看我们已有的Providers, 实际上,每一个Provider就是一个动态链接库(.dll),在PowerShell中也可以被称之为“管理单元”,在管理单元中,有详细的代码实现我们的各种操作。PowerShell甚至允许我们自己编写Provider 

Get-PSDrive 可以查看所有驱动目录

Alias      Alias C:/D:/E:/F: ...                FileSystem cert                               Certificate Env                                Environment  Function                           Function   HKCU                               Registry      HKEY_CURRENT_USER HKLM                               Registry      HKEY_LOCAL_MACHINE Variable                           Variable  WSMan                              WSMan 

几种常见的操作方式:

cmdlet 功能 cmd aias

get-location 当前目录 pwd gl set-location 改变操作目录 cd,chdir sl new-item 新建文件或文件夹 ni rename-item 重命名 rn rni copy-item 复制 copy cpi move-item 移动 move mi remove-item 删除 del ri set-item 设置内容 si clear-item 删除内容 cli mkdir 新建文件夹 md set-content 设置内容 sc get-content 获取内容 type gc

 

系统变量:

获取系统变量:

$env.SystemDrive

注册表操作:

1)从文件系统切换到注册表

我们经常在别的驱动器中进行操作(如文件系统),这是突然需要其他驱动如注册表,则可以使用Push-Location暂时转到注册表的驱动器,操作完成后使用Pop-Location回到原来的驱动器。

Push-Location HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run

Pop-Location

2) 注册表项

Get-Item -Path HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run

New-Item -Path HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run -Name "PS" Force

Set-Item -Path HKLM:\Windows\CurrentVersion\Run\PS -Value "PSV2" -Force -PassThru

Clear-Item -Path HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run\PS

Remove-Item -Path HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run\PS -Force

其他: rename, remove, clear

3)注册表值

Get-ItemProperty OptionalComponents

New-ItemProperty -Path HKLM:Run -Name "VS2010" -Value "devenv.exe" -PropertyType string Force

Set-ItemProperty -Path HKLM:Run -Name "VS2010" -Value "E:\" –PassThru

Clear-ItemProperty -Path HKLM:Run -Name "VS2010" –PassThru

Remove-ItemProperty -Path HKLM:\Microsoft\Windows\CurrentVersion\Run -Name "VS2010"

其他: rename, remove, clear

 

6. 与.NET Framework交互

Windows PowerShell更强大的地方在于它可以访问.NET Framework的类库,我们可以使用New-Object命令来创建一个.NET Framework中的类实例,并保存在变量中,如下面的命令:

$d = New-Object -TypeName System.DateTime

 

这里使用New-Object来创建一个DateTime对象,使用-TypeName指定类型名称,创建的对象保存在$d变量中. 除此之外,还可以使用-ArgumentList来指定参数 $d = New-Object -TypeName System.DateTime -ArgumentList 2008,12,1

7. 与Com交互

使用Windows PowerShell还可以完全与COM交互,这使的Windows PowerShell的功能更加强大,有了上面前面提到的访问WMI、与.NET Framework交互,再加上与COM交互,可以说Windows PowerShell几乎无所不能。如下面看一个例子,使用PowerShell来访问IE,可以使用如下命令来创建一个IE的对象,并让它导航到博客园首页:

$ie = New-Object -ComObject InternetExplorer.Application  $ie.Visible = $true  $ie.Navigate("http://www.cnblogs.com")  $ie.Quit()

8, 与WMI交互

 

get-wmiobject -list -computername v-chuxu 这个命令默认从本地计算机的root\cimv2命名空间中获取类列表

get-wmiobject -list -namespace root\microsoft\sqlserver\computermanagement 指定命名空间

Get-WmiObject -List | where {$_.name -like "*adapter*"} 对结果进行过滤,可以帮助我们迅速获得对象

Get-WmiObject -QUERY "SELECT Name,Priority FROM Win32_Process WHERE Name LIKE 'A%'" wmi查询语句

 

例子:

1,查询下面有哪些class

Get-WmiObject -list | Where-Object{ $_.name -like '*Win32_*'}| ForEach-Object{ echo $_.name}

2, 找到process或者是service后, 查看下面有哪些wmi对象

Get-WmiObject -Query "select * from Win32_Service" | ForEach-Object{echo $_.name} 或者

Get-WmiObject -Class Win32_Service | ForEach-Object{echo $_.name}

3, 获得指定的wmi对象

Get-WmiObject -Class Win32_Service -Filter "name='msdtc'"

4 获得对象可调用的方法

$msdtc=Get-WmiObject -Class Win32_Service -Filter "name='msdtc'" | gm -m method

5, 执行方法

$msdtc.StartService , $msdtc.StopService

 

9. 与Cmd交互
cmd /c echo %computername%
 

10, 语法结构

 

1, break 2, continue // break、continue 可用于代码块、函数、脚本 3, exit 4, for ( [初始值]; [条件]; [迭代值] ) { } for ( $i = 0; $i lt 5; $i++ ) { Write-Object $i; }

5, while (<condition>){<statement list>}

6, do{<statement list>}while (<condition>)

7, foreach ( $var in set ) { } foreach ( $var in $array ) { Write-Output $var } 或者管道 $array|foreach{}

8, if (<test1>){} elseif (<test2>){} else {}

9, switch [-regex|-wildcard|-exact][-casesensitive] ( pipeline ) {

"string"|number|variable|{ expression } {}

default { statementlist } }

11, 杂项

错误处理

trap{}  异常处理

$error.clear() $error获得error的集合, clear可以清空error

 

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值