天天看点

<Power Shell>02 认识powershell

言归正传,谢谢大家今天陪Cantgis 一起学习powershell的基础知识。

不要着急操作,首先Cantgis先简单的剖析一下powershell的功能,命名规则等,之前我们讲过powershell学习和使用是非常的简单。

下面我们开始挑重点要点 简明扼要的讲什么是powershell。

多大130个命令行在执行常见的系统管理任务工具,包括管理服务管理流程 管理事件日志 管理证书,修改注册表,还有使用WMI(windows management instrumentation)

powershell支持现有的语言脚本,用于现有的命令汗工具,以及多个版本的windows。

管理windows数据以不同的存储区和格式的标准实用车程序。包括ADSI WMI COM对象、ActiveX数据对象(ADO)、HTML和XML

复杂的表达式分析器和.NET Framework在命令行的对象操

可扩展的接口,能够以便我们后续来自定义脚本开发Cmdlet

好了看到上面的功能有点展示了,我们开始迫不及待想要学习powershell这么强的语言

下面我们一起了解一下这个语言命令 和参数模式。

windows powershell采用我们之前讲到的内置cmdlet命令,也就是cmd.exe。

这个给我们带来非常好的消息,如果您是老手肯定知道,如果你是开始和我一样学习,别着急,接下来我们开始讲一下所谓powershell的命名名称和特点。

powershell实际上采用了“动词-名词”的命名系统

动词并非一定为英文单词哦,,但是他会表示为powershell中的特定操作。名词和所有语言名词十分类似,描述在系统管理界面层起到非常重要作用的对象类型。

如get-process stop-process get-service 和stop-sercice 命令

如果仅仅是两个名词和两个动词,则并不会简化了解那么多命令的过程,但是呢,我们发现如果是由10个动词和10哥名词组成的一组标准命令名称,则我们只需要记住20个单词,并且使用这些单词可以构成100哥不同命令名称哦!

你知道的,通常情况下 通过命令的名称即可识别其用途,从而对新命令应该使用什么样的名称。

例如计算机关机命令可能为stop-computer;用于列出网络上所有计算机的命令可能为get-computer;用于获取系统的时间日期我们非常简单 键入get-date。

所有的cmdlet中包含了一些公共参数(common parameters), 例如: -Verbose, -Debug, -ErrorAction, -ErrorVariable, and -OutVariable. 这些参数大多用于一些脚本调试等.

当然之前一章我们提到了别名机制,这里我们重点讲一下(137个别名)

1

2

<code>PS C:\Users\Administrator&gt; (</code><code>Get-Command</code> <code>-CommandType</code> <code>alias</code><code>).count</code>

<code>137</code>

在powershell中,还允许为命令创建自己熟悉的别名,这样对于那些太长的命令使用自己自定义的缩写来表示,对于某些自己不太容易记忆的命令使用自己喜欢的名字来表示,这一迪昂是不是非常人性化呢。

名别即将所输入的命令名称与另一个名称相关联。例如,powershell有一个名为clear-host的内部函数,用于清理窗口,如果我们偷懒直接键入clear 会出现什么呢?当然powershell非常聪明他会理解为这是clear-host的函数别名,从而运行clear-host 函数

TAB键子的那个匹配活找到下一个匹配文件,补齐功能非常省事,它会自动尝试补齐剩下的命令字符串。

例如,我们输入get-co 然后键入【tab】则powershell将会自动扩展为get-command cmdlet ,如果再次按【tab】powershell讲仅有匹配另一个与get-content替换上一个command。

关于策略执行,powershell在默认情况下是不允许任何脚本,但很多时候以后我们会看到很多管理功能都需要使用脚本才能完成。另外使用脚本完成,还可以减少很多操作中的繁琐操作。

在powershell中拥有四个执行策略。

Restricted 不加载配置文件或者运行脚本。默认值为restricted,

allsigned:要求所有脚本和配置文件有可信任的发布者签名,包括在本地计算机编写的脚本

rsmotesigned 要求是从Internet下载所有脚本和配置文件有可信任的发布者签名

unrestricted 加载所有配置文件并运行所有脚本,如果运行从Internet下载的未签名脚本,则系统提示用户要获得相关权限。

修改脚本的执行策略命令为set-executiopolicy 如果执行策略改为运行受信任的脚本,在运行命令,set-executionpolicy allsigned就可以

后续我们会讲到脚本,这个powershell的脚本文件扩展名为.ps1,在命令下键入脚本的名称就可以运行该脚本。powershell的脚本文件可以使用记事本等软件进行编写,扩展能力非常强悍

powershell管理,在整个命令行界面是最有价值的概念。如果适当使用管道。不仅可以减少复杂的输入命令所需的工作量,只需要使用管道运算符“|”将命令连接一起,即可奖每一个命令的输出用作下一个命令的键入哦!!

下面我们输出powershell命令,当做一个小例子。首先我要强调 在powershell中任何运行结果都可以定向输出指定文件中。

在输出过程中使用的命令为out-file,在日常生活中我们用‘&gt;’代替。

下面我们把当前计算机的进程输出到指定的一个txt文件,我们输出后打开这个txt文件,查看当前的进程详细信息。

<code>PS C:\Users\Administrator&gt; </code><code>Get-Process</code> <code>&gt; D:\getmac.txt</code>

<code>PS C:\Users\Administrator&gt;</code>

<a target="_blank" href="http://blog.51cto.com/attachment/201306/133239886.png"></a>

好了,不会使用powershell不要紧,我们有帮助系统,能够快速合理的实现powershell操作,两个帮主:get-command 和get-help

<a target="_blank" href="http://blog.51cto.com/attachment/201306/134316105.png"></a>

使用get-help get-alias       获得帮助关于这个会话命令的

使用get-help get-alias -examples   显示示例

显示帮助的主题的列表

get-help about_*

显示帮助文件,在powershell 中执行

get-help get-host

显示帮助系统中(get-help)所有帮主文件列表,键入命令

get-help *

显示完整的帮助信息

get-help get-host -full

get-command  检索所有命令名称

显示WMI 类列表。

3

4

<code>get-wmiobject</code> <code>-list</code>

<code>get-wmiobject</code> <code>-list</code> <code>-computername</code> <code>.</code>

<code>get-wmiobject</code> <code>-list</code> <code>-computername</code> <code>localhost</code>

<code>get-wmiobject</code> <code>-list</code> <code>-computername</code> <code>127.0.0.1</code>

注意 在使用get-wmiobject时候连接到远程计算机 远程计算机必须运行wmi 并且在默认配置下所使用的账户必须是远程计算机上的本地管理员,在远程计算机不需要安装powershell

从而我们可以对未运行powershell但可以使用wmi操作系统进行管理

函数(function)有名称的代码块(scriptblock).

下面我写一个简单的函数定义,函数就是一段你输入到PowerShell的命令集合

5

6

7

8

9

10

11

12

13

14

15

<code>PS C:\Users\Administrator&gt; </code><code>function</code> <code>Get-DayToBeiJingOlympic</code>

<code>&gt;&gt; {</code>

<code>&gt;&gt; (</code><code>[datetime]</code> <code>"2013-06-15"</code> <code>- </code><code>[datetime]</code><code>::Now).Days;</code>

<code>&gt;&gt; }</code>

<code>&gt;&gt;</code>

<code>PS C:\Users\Administrator&gt; </code><code>Get-DayToBeiJingOlympic</code>

<code>0</code>

<code>&gt;&gt; (</code><code>[datetime]</code> <code>"2013-06-14"</code> <code>- </code><code>[datetime]</code><code>::Now).Days;</code>

<code>-1</code>

第一次 我提到  距离2013年6月15日 有多少天 0天

第二次我提到距离2013年6月14日有-1天

脚本(script)

PowerShell在交互式Shell(interactive Shell)和脚本语言(script Language)之间进行了平衡, 提供了执行脚本的能力. 脚本类似于函数, 存放在文件中, 调用时由PowerShell载入内存, 编译并执行.

效率上来讲, 脚本慢于函数(function), 主要原因在于函数只会在第一次调用时被编译, 而脚本每次调用都会被编译一次. 但是编译后的执行阶段, 他们的性能是近似相等的.

有一些命令应该禁止在powershell中使用如: dir, findstr, del, ping. 这些命令就是Windows之前的可执行文件(非.Net命令行可执行文件). 在PowerShell中调用这些命令效率是最低的, 因为执行他们PowerShell需要创建一个新进程. 此外因为这些命令早于PowerShell, 因此他们的信息输出都是基于文本的(也可以说是字符串), 因此丧失了PowerShell对对象的处理能力。

今天我就到这了,谢谢大家耐心看完Cantgis,相信你已经理解了什么是powershell 他的工作机制是什么了,接下来我们会更深入的了解powershell的世界。

     本文转自cantgis 51CTO博客,原文链接:http://blog.51cto.com/cantgis/1222518,如需转载请自行联系原作者

继续阅读