powershell技术教程

上传人:小** 文档编号:89126650 上传时间:2019-05-19 格式:DOC 页数:53 大小:1.25MB
返回 下载 相关 举报
powershell技术教程_第1页
第1页 / 共53页
powershell技术教程_第2页
第2页 / 共53页
powershell技术教程_第3页
第3页 / 共53页
powershell技术教程_第4页
第4页 / 共53页
powershell技术教程_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《powershell技术教程》由会员分享,可在线阅读,更多相关《powershell技术教程(53页珍藏版)》请在金锄头文库上搜索。

1、PowerShell强大的管理能力在经历了漫长的等待之后,PowerShell 终于已蓄势待发。这意味着该是 Windows 管理员提起注意的时候了。PowerShell 提供了也许是最简单且最灵活的方法来自动执行各种各样的管理任务,从而您的工作效率和效力都得到提高。但更为重要的是,Microsoft 正在 PowerShell 之上构建 Exchange Server 2007 和 System Center 2007 之类产品的图形管理控制台。这意味着您将能够从 PowerShell 内部执行几乎所有的管理任务。随着时间的推移,Microsoft 计划提高越来越多产品的管理能力。因此,Po

2、werShell 最终会成为用于管理几乎任何 Microsoft 服务器产品的第一个全能型工具。为了帮助您尽快入门,我将在此新设的专栏中定期探讨 PowerShell。请务必要下载一份软件。强大而又简便的功能顾名思义,PowerShell 是一个外壳,但与从 Windows NT 3.1 起就出现的命令提示符 (Cmd.exe) 不同。Cmd.exe 不会消失,但随着 PowerShell 的到来,几乎没有什么理由再继续使用 Cmd.exe。PowerShell 在使用方面与 Cmd.exe 并无多大不同,只是 PowerShell 的功能更为强大。与 Cmd.exe 一样,PowerShel

3、l 具有内置的脚本编写语言,不过它比 Cmd.exe 原始的批处理语言更为灵活。灵活性是如何体现的呢?有了 PowerShell,您可以使用仅包括大约半打内置关键字的语言自动执行极其复杂的任务。既然我已提到了脚本编写,那么现在我可能就应该简单提一下安全性。PowerShell 得益于 Microsoft 过去十多年在安全性方面所取得的研究成果。默认情况下,PowerShell 不会运行脚本,只能交互式地用它来运行单个命令。如果您确实启用了脚本编写,则可令 PowerShell 仅运行经过数字签名的脚本。这些均有助于确保 PowerShell 不会成为下一个 VBScript 一种伟大的语言,但

4、它常被滥用来创建恶意脚本。VBScript 也不会退出历史舞台,但您可能会发现 PowerShell 对于许多不同的任务来说更易于使用。Cmd.exe 做到的事情,PowerShell 几乎都能做到。例如,您可以运行 ipconfig 并且会获得同样熟悉的输出。但是 PowerShell 会引入一整套新的命令,它们不是外部可执行文件。这些 cmdlet(发音为“command-let”)就内置于 PowerShell 之中(要了解对 PowerShell 使用入门最有用的 cmdlet,请参见侧栏的“快速使用入门十大 Cmdlet”)。快速使用入门十大 Cmdlet Get-Command 用

5、于检索所有可用 cmdlet 的列表。 Get-Help 用于显示有关 cmdlet 和概念的帮助信息。 Get-WMIObject 用于通过 WMI 来检索管理信息。 Get-EventLog 用于检索 Windows 事件日志。 Get-Process 用于检索单个活动进程或活动进程的列表。 Get-Service 用于检索 Windows 服务。 Get-Content 用于读入文本文件,将每行视为一个子对象。 Add-Content 用于将内容附加到文本文件。 Copy-Item 用于复制文件、文件夹和其他对象。 Get-Acl 用于检索访问控制列表 (ACL)。要获得 PowerSh

6、ell 自带的完整 cmdlet 列表,请访问 cmdlet 都以标准的“动词-名词”格式命名,这使其易于理解和记忆。例如,运行 Get-Command cmdlet 将会列出所有可用的 cmdlet。对于管理员来说最有用的 cmdlet 也许就是 Get-WMIObject。若您想要查明 Server2 正在运行哪个服务包,只需运行:Get-WMIObject Win32_OperatingSystem Property ServicePackMajorVersion Computer Server2要使用 VBScript 来发现同一信息,就得编写几行代码。利用 cmdlet 可以处理服

7、务(Start-Service、Stop-Service 等)、进程(Stop-Process 等)、文件(例如,Rename-Item、Copy-Item、Remove-Item、Move-Item)等等。其中许多 cmdlet 甚至还有快捷名称,称为别名。对于 Get-WMIObject 而言,您可以只键入 gwmi。运行 Get-Alias 将为您提供这些快捷名称的列表。为什么面向对象很重要PowerShell 在 Microsoft .NET Framework 上构建,所以它完全是面向对象的。通常,只有软件开发人员才会对此感到兴奋,但是就本处的情况而言,面向对象可以为管理员节省大量的

8、时间。这是因为管理员现在只需在基于文本的外壳内就能直接处理丰富的对象。请看以下示例:Get-Process | Sort-Object pm desc | Select-Object first 10这里只有一行,其中含有以管道分隔的三个不同的 cmdlet(稍后会对此进行详述)。第一个 cmdlet 检索所有正在运行的进程,然后将那些对象传递给或通过管道输送到 Sort-Object。第二个 cmdlet 基于每个进程对象的 pm(即物理内存)属性按降序对其进行排序。然后将进程对象的有序集合通过管道输送到 Select-Object,它将选取前十个对象进行显示。结果呢?此行简单命令会显示机器

9、上的十大物理内存使用者,如图 1 所示。这是一种极其有效的方法,借此可在执行某些故障排除时进行快速浏览。图 1使用简单的 Cmdlet 进行故障排除管道(在美式键盘上,该竖线字符通常位于反斜线按键上)的使用是 PowerShell 具有如此能力不可或缺的组成部分。使用此字符,可以将对象从一个 cmdlet 传递(或通过管道输送)给另一个,从而使每个 cmdlet 可以进一步提炼结果、设置结果的显示格式,等等。之所以能够采用这种机制,是因为每个 cmdlet 均会返回一个或多个对象,而非纯文本,这就使得后续 cmdlet 可以处理完整的对象。PowerShell 中的对象使用非常普遍,这全都仰仗

10、于它的变量。而且,您不必预先声明变量,只需在变量名称前放置一个美元符号 ($) 就可以开始使用它们了。尽管不是必需的,但您也可以将所要放入变量的数据类型告知 PowerShell。这使得 PowerShell 可以将变量映射到某一种极其强大的 .NET Framework 类型,从而为您提供诸多附加的内置功能。例如,假设您想要提示输入计算机名称并从该计算机中检索服务包版本,但是您不知道键入的计算机名称是否会包括两个反斜线(如 Server2)。由于您知道 Get-WMIObject cmdlet 不需要反斜线,因此您可以将计算机名称保存到一个字符串变量中,然后使用 Replace 方法以空字符

11、串替换反斜线,如下所示:string$c = Read-Host Enter computer name$c = $c.Replace(,) Get-WMIObject Win32_OperatingSystem Property ServicePackMajorVersion Computer $c已在 $c 变量中提供了 Computer 参数的值。该变量最初是作为字符串而创建的,因此它具有 .NET Framework 字符串类型的所有功能,包括 Replace 方法。当然,要了解所有这些功能需要花费一些时间,但是通过示例您应该很容易就能掌握这些功能。PowerShell 本身也有助于简

12、化学习过程。例如,如果您键入 $c = $c.(不要忘了句号)并按 Tab,PowerShell 将显示 Clone(),这是字符串类型的第一个方法。如果您一直按 Tab,PowerShell 将会循环列出所有可用的方法。实质上,当您这样做时,PowerShell 是在向您展示它所知道的字符串处理方法。在此给出一项更难的任务。从文件中读取计算机名称的列表(每行一个名称)并显示每台计算机的服务包号。在 VBScript 中,此项任务将需要一打或更多行的代码。在 Cmd.exe 中,您就得使用复杂的批处理文件。在 PowerShell 中,此项任务仅需一行:Get-Content c:comput

13、ers.txt | foreach $_; gwmi Win32_OperatingSystem -propServicePackMajorVersion -comp $_ Get-Content cmdlet 读取 C:Computers.txt 的内容。文件的每一行均自成一个对象。此对象集合(即,计算机名称)通过管道输送到 foreach 命令(它其实就是 ForEach-Object cmdlet 的别名)。花括号内的命令会对通过管道送入的每个对象重复一次(在本例中就意味着它们对每个计算机名称都要运行一次)。特殊的 $_ 变量将包含当前对象(即,当前的计算机名称)。花括号内实际是两个命令

14、:第一个只是通过输出 $_ 的内容来显示当前的计算机名称。第二个是现已熟悉的 gwmi。结果将显示文件中所列出的每台计算机的服务包版本列表。所有这些都是用相对简单的一行命令完成的。请注意,Property 和 Computer 参数名已被缩写。PowerShell 仅需有足够的信息即可唯一地区分参数名。可读性与复用然而,编写一行命令和参数无助于可读性。PowerShell 允许您将其拆分成更具可读性的形式,您甚至不用编写脚本就能将其直接键入外壳。这就是它可能的形式:PS C: $names = get-content c:computers.txtPS C: foreach ($name in

15、 $names) $name gwmi Win32_OperatingSystem -prop ServicePackMajorVersion -comp $name 这一次,文件的内容存储在变量 $names 中。本例仍使用了 foreach,但它不是通过管道进行输入的,因此必须告知它需要循环处理哪个对象集合以及将每个对象存储在哪个变量中,即 ($name in $names) 所指明的那一部分。其他方面大体相同,只要您一按 Enter,就会执行代码并显示结果。如果要重复使用此同一代码,只需将其制成函数即可。再次将以下内容直接键入到外壳中:PS C: function Get-ServicePacks ($file) $names = get-content $file foreach ($name in $names) $name gwmi win32_operatingsystem -prop servicepackmajorversion -comp $name 如您所见,实际上并未做太多更改。只需将上一示例封入一个名为 Get-ServicePacks(与 PowerShell 的“动词-

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号