千家信息网

Windows PowerShell 学习---第一章 PowerShell介绍

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,第1章 PowerShell介绍1.1、什么是PowerShell2006年,微软发布一款叫做Windows PowerShell的全新脚本语言。PowerShell与命令提示符shell一样,Pow
千家信息网最后更新 2024年11月11日Windows PowerShell 学习---第一章 PowerShell介绍

第1章 PowerShell介绍

1.1、什么是PowerShell

2006年,微软发布一款叫做Windows PowerShell的全新脚本语言。

PowerShell与命令提示符shell一样,PowerShell可以进行交互性地输入命令。也可以很容易的使用管道和重定向将文件和程序串联起来。

不过,PowerShell确是一个强大的面向对象的语言,可以用于复杂的脚本编程。

1.2、面向对象的命令shell

关于cmd

如果在命令提示符下输入dirdir命令将会在屏幕打印出目录中的文件名、大小和时间戳等信息。可以使用>重定向操作符将这些文本导入到一个文件中,或者使用|操作符将文本管道连接到另一个程序。例如:

dir /s /b| sort

上述命令列出了当前目录及其子目录中的文件,作为一个文本流,并且这些文本发送给了sort程序,sort按照字母顺序对它们排序。

PowerShell和对象

PowerShell命令似乎以同样的方式工作,但是它的命令行处理的是对象而不是文本。这个对象就是像Java中面向对象的那个对象。这些对象表示文件、文件夹、Windows设备驱动、网络服务的对象,以及记录了.NET框架库中定义的数百个对象中的任何之一的对象。

通过管道符号从一条命令流向下一条命令,是对象流。各种PowerShell命令可以生成、操作这些对象,调用这些对象上的方法,修改这些对象的属性,以及从这些对象提取信息。

关于cmdlet

Cmdlet读作command-let

PowerShell内建命令起名叫做cmdlet。之所以起个这么奇怪的名字可能是因为,它们不像cmd.exe的命令那样完全内建到PowerShell中,也并不是真的像.exe文件一样完全独立于PowerShell。它们以一种新的方式实现,因此需要一个新的单词。

Cmdlet的一些简单说明

  • Cmdlet名称不区分大小写。

  • 微软程序员选择使用一个名词-动词的惯例来命名cmdlet

这样使得该名称更清晰的说明cmdlet实际做什么。

  • Cmdlet命令行选项的名称也一样的长。

  • 一些命令可以缩短到更短。

例如使用new-alias命令可以为cmdlet起一个短名别名。

dir命令在PowerShell中输入后发生了什么

PowerShell dir命令实际上是Get-ChildItemcmdlet的一个别名。可以输入这两个名字中的任何一个,来得到同样的结果。

不带其他参数的时候,Get-ChildItem针对当前目录中的所有文件和子目录,列出FileFolder对象。如果输入了命令dir而不带参数,Get-ChildItem会显示出FileFolder对象的一个列表,别切由于没有管道或输出重定向,结果会出现在Windows PowerShell命令窗口中。

当对象进入到PowerShell窗口的时候,PowerShell会针对每个对象打印一行,以漂亮的表格格式,列出每个对象最重要的属性。例如:

PSE:\py> dir

目录: E:\py

Mode LastWriteTime Length Name

---- ------------- ------ ----

-a--- 2015/11/18 18:28 30 a.txt

-a--- 2015/8/6 18:09 1510 t1.py

-a--- 2015/9/13 13:15 320 t2.py

-a--- 2015/9/13 12:57 37 t2.txt

-a--- 2015/11/19 14:40 224 t3.py

PSE:\py>

在各栏顶部的标题,是要显示的属性的名称。这个列表对于cmdlet产生的任何其他对象类型来说都是类似的。

常规命令提示符环境中的dir命令生成固定格式的文本。PowerShell中的dir cmdlet,生成FileFolder对象的一个列表,PowerShell事后将其格式化为一个文本列表。

可以使用>符号,将一个PowerShell cmdlet的输出重定向到一个文件;并且会发生相同的事情:对象流格式化为一个漂亮的文本列表。

PowerShell的创新在于,当使用管道之后所发生的事情。PowerShell允许你将一个对象流从一个cmdlet导向到另一个cmdlet,并且可以修改这些对象的属性并调用对象上的方法,就好像对象真的传递过来一样。只有当对象最终触及屏幕的时候文本才会出现。一个cmdlet可以产生表示文件、计算机、服务和网络对象等对象的一个列表;管道中的一下一个cmdlet可以进行过滤并只是传递它感兴趣的那些对象;下一个cmdlet可能调用方法在对象上执行操作。这真的是PowerShell的独特功能。

例如删除特定目录下文件

PSD:\ps> dir

目录: D:\ps

Mode LastWriteTime Length Name

---- ------------- ------ ----

-a--- 2017/9/9 17:00 0 1 - 副本 (2).txt

-a--- 2017/9/9 17:00 0 1 - 副本 (3).txt

-a--- 2017/9/9 17:00 0 1 - 副本 (4).txt

-a--- 2017/9/9 17:00 0 1 - 副本.txt

-a--- 2017/9/9 17:00 0 1.txt

PSD:\ps> dir|Remove-Item

PSD:\ps> dir

PSD:\ps>

Dir生成了表示目录d:\ps的内容的FileFolder对象的一个列表,并且将其传递给了remove-item命令,remove-item删除了传递给它的任何对象背后的"真实内容"

或者可以使用下面的命令。

(dir d:\ps).delete()

它会生成同样的filefolder对象的流,并且在每个对象上调用delete方法。结果是相同的:文件都删除掉了。

还可以这样:

Remove-itemd:\ps\*.*

这将会是最为直接的命令,但是这样就没展示出PowerShell和常规命令提示符的区别。

下面是另一个示例,展示了一个管道命令是如何工作的。

PSD:\ps> dir

目录: D:\ps

Mode LastWriteTime Length Name

---- ------------- ------ ----

-a--- 2017/9/9 17:12 0 1.txt

-a--- 2017/9/9 17:12 0 2.txt

PSD:\ps> dir|Where-Object {$_.name -eq "1.txt"}

目录: D:\ps

Mode LastWriteTime Length Name

---- ------------- ------ ----

-a--- 2017/9/9 17:12 0 1.txt

PSD:\ps> dir|Where-Object {$_.name -eq "1.txt"}|remove-it

PSD:\ps> dir

目录: D:\ps

Mode LastWriteTime Length Name

---- ------------- ------ ----

-a--- 2017/9/9 17:12 0 2.txt

PSD:\ps>

Dir针对当前目录中的每一个文件生成了一个对象,where-Object用于过滤,过滤出文件名为1.txt的对象,并且用remove-item删除了这个文件。

1.3、基于.NET Framework

.NET Framework是微软对sunJava编程语言的应对之策。这里包含了一个强大的类库,可以能够使用图形化用户接口、数据库访问、网络通信、web交互、加密、数值计算等功能。

.NET Framework的所有功能在PowerShell命令行和脚本中都是可用的。

.NET Framework class library在线地址

https://msdn.microsoft.com/zh-cn/library/w0x726c2(v=vs.110).aspx

1.4、一个可扩展的环境

PowerShell可以运行3种程序:内建命令、外部程序和脚本。

这类似于常规命令提示符环境,在命令提示符中,你可以使用由cmd程序自身处理的内建命令,可以运行外部程序,或者创建批处理文件,批处理文件是组合各种类型的命令来分布执行一个较为复杂的任务。

PowerShell中,内建命令是cmdlet。然而,和命令提示符shell不同,这些内建的命令没有固化到PowerShell程序中,而是通过一个插件方法、作为在硬盘上存储的一个或多个.DLL文件来添加到PowerShell程序中。

因此,定制的cmdlet可以添加到该环境。思路是:Microsoft和第三方可以为他们的应用程序和服务器添加安装管理cmdlet,以便可以由PowerShell脚本管理它们。例如,Microsoft SQL SeverExchangeVMWare服务器拥有定制的cmdlet插件、

1.5PowerShell环境

开始à所有程序à附件àWindows PowerShell

  • Windows PowerShell 交互式命令环境

  • Windows PowerShell ISE 这是一个GUI编辑\调试工具,可以用来开发PowerShell脚本。


1.6、PowerShell版本

Win 7Windows server 2008R2默认安装的是v2.0版本

1.7、获取帮助

首先要学习的最重要的PowerShell命令,帮助了解其他命令的一个命令:get-help

Get-help有一个别名help。因此可以互换地使用这些命令名的任何一个。PowerShell有很多内建的帮助。

一些技巧如下:

  • 输入单词help来来获取在线帮助系统的一个快速介绍

PSE:\py> help

主题

Get-Help

简短说明

显示有关 Windows PowerShell cmdlet 和概念的帮助。

详细说明

语法

get-help { |}

help { |}

-?

"Get-help"和"-?"以单页形式显示帮助。

"Help"以多页形式显示帮助。

示例:

get-help get-process :显示有关 Get-Process cmdlet 的帮助。

get-help about_signing :显示有关签名脚本的帮助。

help where-object :显示有关 Where-Object cmdlet 的帮助。

help about_foreach :显示有关 PowerShell foreach 循环的帮助。

set-service -? :显示有关 Set-Service cmdlet 的帮助。

可以在帮助命令中使用通配符(不使用 -?)。

如果有多个匹配的帮助主题,PowerShell 将显示匹配主题列表。

如果只有一个匹配的帮助主题,PowerShell 将显示该主题。

示例:

get-help * :显示所有帮助主题。

get-help get-* :显示以 get- 开头的主题。

help *object* :显示名称中包含"object"的主题。

get-help about* :显示所有概念性主题。

有关通配符的信息,请键入:

get-help about_wildcard

备注

若要了解 Windows PowerShell 的有关信息,请阅读以下帮助主题:

get-command :从 cmdlet 代码中获取有关 cmdlet 的信息。

get-member :获取对象的属性和方法。

where-object :筛选对象属性。

about_object :介绍 Windows PowerShell 中对象的用法。

about_remote :说明如何在远程计算机上运行命令。

概念性帮助文件以"about_<主题>"的形式命名,例如:about_regular_expression

概念性帮助文件的名称必须用英文输入,即使在非英文版 Windows PowerShell 中也是如此。

帮助命令还可显示 cmdlet 的别名。这些别名是更容易键入的代用名或略称。

例如,Invoke-Command cmdlet 的别名是"remote"。

若要获得别名,请键入:

get-alias

PSE:\py>

  • helpget-help后面,你可以输入一个单词、cmdlet名称或部分cmdlet名称。

也可以输入用引号括起来的一个短语。

如果有多个主题、多个cmdlet名称或多个索命与输入的内容匹配,get-help会打印出所有匹配的帮助条目的一个列表。然后可以输入help,后面跟着你想要详细了解的特定条目的名称。

PSC:\Users\Administrator> Get-Help new

Name Category Synopsis

---- -------- --------

New-WSManInstance Cmdlet 创建管理资源的新实例。

New-WSManSessionOption Cmdlet 创建 WS-Management 会话选项哈希表以用作以下 WS-Management cmdlet 的输入参数:...

New-PSSession Cmdlet 建立与本地或远程计算机的持续性连接。

New-PSSessionOption Cmdlet 创建包含 PSSession 高级选项的对象。

New-Module Cmdlet 创建一个仅存在于内存中的新动态模块。

New-ModuleManifest Cmdlet 创建一个新的模块清单。

New-Event Cmdlet 创建新事件。

New-Alias Cmdlet 创建新别名。

New-TimeSpan Cmdlet 创建 TimeSpan 对象。

New-Object Cmdlet 创建 Microsoft .NET Framework COM 对象的实例。

New-Variable Cmdlet 创建新变量

New-EventLog Cmdlet 在本地或远程计算机上创建新事件日志和新事件源。

New-PSDrive Cmdlet 在当前会话中创建 Windows PowerShell 驱动器。

New-Item Cmdlet 创建新项。

New-ItemProperty Cmdlet 为项创建新属性并设置该属性的值。例如,可以使用 New-ItemProperty 创建和更改注册表值和数据,它们是注册表项的属性。

New-Service Cmdlet 创建新的 Windows 服务。

New-WebServiceProxy Cmdlet 创建一个 Web 服务代理对象,用于在 Windows PowerShell 中使用和管理 Web 服务。

如果确实有一个名称或说明包含了输入的单词或短语,get-help能够打印出该主题的帮助信息。

PSC:\Users\Administrator> Get-Help new-ite

Name Category Synopsis

---- -------- --------

New-Item Cmdlet 创建新项。

New-ItemProperty Cmdlet 为项创建新属性并设置该属性的值。例如,可以使用 New-ItemProperty 创建和更改注册表值和数据,它们是注册表项的属性。

____________________________________________________________________________________________________________________________________________________________________________________________________________________

PSC:\Users\Administrator> Get-Help new-item

名称

New-Item

摘要

创建新项。

语法

New-Item [-Path] [-Credential ] [-Force] [-ItemType ] [-Value] [-Confirm] [-WhatIf] [-UseTransaction][]

New-Item -Name [[-Path]] [-Credential ] [-Force] [-ItemType] [-Value ] [-Confirm] [-WhatIf] [-UseTransaction][]

说明

New-Item cmdlet 创建新项并设置该项的值。可创建项的类型取决于该项所在位置。例如,在文件系统中,New-Item 用于创建文件和文件夹。在注册表中,New-Item 用于创建注册表项和注册表条目。

此外,New-Item 还可设置它所创建的项的值。例如,创建新文件时,New-Item 可向该文件添加初始内容。

相关链接

Online version:http://go.microsoft.com/fwlink/?LinkID=113353

about_Providers

Get-Item

Set-Item

Remove-Item

Clear-Item

Invoke-Item

Rename-Item

Move-Item

Copy-Item

备注

若要查看示例,请键入: "get-help New-Item -examples".

有关详细信息,请键入: "get-help New-Item -detailed".

若要获取技术信息,请键入: "get-help New-Item -full".

  • 一些cmdlet有额外帮助信息可以使用。

例如你可以通过输入help new-alias -examples看到使用new-alias cmdlet的一些示例。

额外信息的常用选项是-examples-detailed-full

  • 帮助文本出现在控制台窗口中,并且默认地通过more来管道连接的,以便在每一屏只有都会暂停。按下回车键继续下一页面。

此外,可以比较容易的将帮助信息输出到一个文件中,>x;然后输入notepad x来读取该文本。

  • 有一些帮助条目覆盖了安装的cmdlets中的每一个,还有一些关于不同主题的额外文章。

这些文章以about_开头,例如,help about_execution_policies会打印出关于脚本安全限制系统的信息。

要查看所有这些about条目的一个列表输入help about

要根据cmdlet所做的工作的说明中的单词来找到cmdlet,以及当你已经找到感兴趣的一个cmdlet后要了解其命令行语法的话,在线帮助系统很好用。

在线帮助语法说明

  • []方括号表示可选的命令参数

  • {}花括号通常表示可以从中选择一系列选项,选项之间带有一个垂直线|

  • <>尖括号括起来的值是必须自己提供的。

例如[-Description ]表示一个可选的参数。可以忽略它,或者,输入类似-description "some text"的内容。也可以将其省略为-descr "sometext"

1.8、别名

(1)、获取别名列表

通过输入alias来看到所有内建别名的一个列表。Alias也是get-alias的别名

PSC:\Users\Administrator> alias

CommandType Name Definition

----------- ---- ----------

Alias % ForEach-Object

Alias ? Where-Object

Alias ac Add-Content

Alias asnp Add-PSSnapIn

Alias cat Get-Content

Alias cd Set-Location

Alias chdir Set-Location

Alias clc Clear-Content

Alias clear Clear-Host

Alias clhy Clear-History

Alias cli Clear-Item

Alias clp Clear-ItemProperty

Alias cls Clear-Host

Alias clv Clear-Variable

Alias compare Compare-Object

Alias copy Copy-Item

Alias cp Copy-Item

Alias cpi Copy-Item

Alias cpp Copy-ItemProperty

Alias cvpa Convert-Path

Alias dbp Disable-PSBreakpoint

Alias del Remove-Item

Alias diff Compare-Object

Alias dir Get-ChildItem

Alias ebp Enable-PSBreakpoint

Alias echo Write-Output

Alias epal Export-Alias

Alias epcsv Export-Csv

Alias epsn Export-PSSession

Alias erase Remove-Item

Alias etsn Enter-PSSession

Alias exsn Exit-PSSession

Alias fc Format-Custom

Alias fl Format-List

Alias foreach ForEach-Object

Alias ft Format-Table

Alias fw Format-Wide

Alias gal Get-Alias

Alias gbp Get-PSBreakpoint

Alias gc Get-Content

Alias gci Get-ChildItem

Alias gcm Get-Command

Alias gcs Get-PSCallStack

Alias gdr Get-PSDrive

Alias ghy Get-History

Alias gi Get-Item

Alias gjb Get-Job

Alias gl Get-Location

Alias gm Get-Member

Alias gmo Get-Module

Alias gp Get-ItemProperty

Alias gps Get-Process

Alias group Group-Object

Alias gsn Get-PSSession

Alias gsnp Get-PSSnapIn

Alias gsv Get-Service

Alias gu Get-Unique

Alias gv Get-Variable

Alias gwmi Get-WmiObject

Alias h Get-History

Alias history Get-History

Alias icm Invoke-Command

Alias iex Invoke-Expression

Alias ihy Invoke-History

Alias ii Invoke-Item

Alias ipal Import-Alias

Alias ipcsv Import-Csv

Alias ipmo Import-Module

Alias ipsn Import-PSSession

Alias ise PowerShell_ise.exe

Alias iwmi Invoke-WMIMethod

Alias kill Stop-Process

Alias lp Out-Printer

Alias ls Get-ChildItem

Alias man help

Alias md mkdir

Alias measure Measure-Object

Alias mi Move-Item

Alias mount New-PSDrive

Alias move Move-Item

Alias mp Move-ItemProperty

Alias mv Move-Item

Alias nal New-Alias

Alias ndr New-PSDrive

Alias ni New-Item

Alias nmo New-Module

Alias nsn New-PSSession

Alias nv New-Variable

Alias ogv Out-GridView

Alias oh Out-Host

Alias popd Pop-Location

Alias ps Get-Process

Alias pushd Push-Location

Alias pwd Get-Location

Alias r Invoke-History

Alias rbp Remove-PSBreakpoint

Alias rcjb Receive-Job

Alias rd Remove-Item

Alias rdr Remove-PSDrive

Alias ren Rename-Item

Alias ri Remove-Item

Alias rjb Remove-Job

Alias rm Remove-Item

Alias rmdir Remove-Item

Alias rmo Remove-Module

Alias rni Rename-Item

Alias rnp Rename-ItemProperty

Alias rp Remove-ItemProperty

Alias rsn Remove-PSSession

Alias rsnp Remove-PSSnapin

Alias rv Remove-Variable

Alias rvpa Resolve-Path

Alias rwmi Remove-WMIObject

Alias sajb Start-Job

Alias sal Set-Alias

Alias saps Start-Process

Alias sasv Start-Service

Alias sbp Set-PSBreakpoint

Alias sc Set-Content

Alias select Select-Object

Alias set Set-Variable

Alias si Set-Item

Alias sl Set-Location

Alias sleep Start-Sleep

Alias sort Sort-Object

Alias sp Set-ItemProperty

Alias spjb Stop-Job

Alias spps Stop-Process

Alias spsv Stop-Service

Alias start Start-Process

Alias sv Set-Variable

Alias swmi Set-WMIInstance

Alias tee Tee-Object

Alias type Get-Content

Alias where Where-Object

Alias wjb Wait-Job

Alias write Write-Output

(2)、定义别名

可以输入下面的命令来定义一个新的别名:

New-alias -nameshortname -value realcommandname -description "Brief description"

当关闭PowerShell窗口的时候,别名定义不再继续存在。下一次运行PowerShell的时候,定制的别名将不复存在了。

如果想要保存别名,可以通过配置文件的形式实现。

1.9PowerShell配置文件

可以通过添加定制的别名、把目录添加到路径-环境变量,来定制符合自己偏好的PowerShell环境。因此每次启动PowerShell的时候,如果必须重新输入这些命令,简直是一种痛苦。个脚本

PowerShell的配置文件是每次启动一个新的实例的时候,PowerShell所运行的命令的一个脚本。

事实上,无论何时,以何种形式启动PowerShell,它都会在如下两个位置查找配置文件脚本:

  • C:\Windows\system32\WindowsPowerShell\v1.0\

  • C:\Users\username\Documents\WindowsPowerShell\

先查找一个名叫profile.ps1的脚本,如果找到就运行它。

命令行PowerShell随后查找一个名叫Microsoft.PowerShell_profile.ps1的配置文件脚本,如果找到就执行它。

GUI PowerShell ISE程序首先查找profile.ps1,然后查找Microsoft.PowerShellISE_profile.ps1


0