已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章 充分利用Windows PowerShell第2章 充分利用Windows PowerShelll 初始化环境l 理解命令输入、解析和输出l 输出的写操作和格式化Windows PowerShell为使用命令和脚本提供了一个高效的环境。正如第1章所述,可以在命令行中运行多种类型的命令,包括内置的cmdlet、Windows工具和带有命令行扩展的应用程序。无论它的来源是什么,每个命令都要遵循相同的语法规则。这些规则规定了一个命令由命令名称及其之后必要或可选的参数组成。参数包括参数本身、参数值和其他命令文本,可以利用管道来结合命令和重定向为输入、输出和错误指定来源。在PowerShell执行命令的同时,也启动了一系列事件,类似于执行下列步骤。(1)被串接或组合并在一行中传递的多条命令被分解为独立的执行单元。一个执行单元的值被分解为一系列片段,称为令牌。(2)每个令牌被解析,根据值分隔命令,并且根据某种对象类型(例如字符串或布尔值)来求值。在分析阶段,命令文本中的变量用它们相应的实际值来替换。(3)个别的命令被处理。如果一个命令的名称中包含一个路径,PowerShell将使用这个路径去查找命令。如果没有在指定的位置找到这个命令,PowerShell会返回一个错误。(4)如果命令名称中没有指定文件路径,PowerShell会尝试在内部解析命令名称。每一个匹配表示引用了一个内置的命令(包含命令或函数的别名),该命令可以被立即执行。如果没有匹配项,PowerShell就在命令路径中查找匹配的可执行命令。如果在上述位置中都没有找到该命令,PowerShell会返回一个错误。因为PowerShell默认不查找当前目录,必须明确地指定当前目录。(5)如果命令被定位,则使用任意指定的参数(包括使用那些指定的输入)执行命令。命令的输出和任何错误被写到PowerShell窗口或指定位置。可以看出,很多因素可以影响命令的执行,包括命令的路径设置、重定向技术和命令是否被串接或分组。在本章中,将描述并展示上述命令执行过程的实例,来帮助你充分利用PowerShell。在深入讨论之前,让我们看看启动PowerShell时的一些特别约定,并且介绍配置文件和控制台文件的概念。2.1 初始化环境Windows PowerShell提供一个动态的、可扩展的执行环境。有几种方法可以初始化PowerShell环境,包括传递启动参数到Powershell.exe,使用自定义的配置文件,使用控制台文件,或者这三者的任意组合。也可以用几种方法来扩展PowerShell的环境,包括通过安装提供程序和注册管理单元(详情参见第3章)。2.1.1 传递启动参数如果曾经使用过PowerShell,你可能是通过单击“开始”|“所有程序”|“附件”|Windows PowerShell,然后选择Windows PowerShell来打开控制台窗口的。这样的启动方式是以普通用户权限而不是管理员权限来启动PowerShell的,因此不能够执行许多管理任务。为了以管理员权限启动PowerShell,需要单击“开始”|“所有程序”|“附件”|Windows PowerShell,右击Windows PowerShell并选择“以管理员身份运行”。其他启动PowerShell控制台的方式有:使用“开始”菜单的“搜索”文本框;使用“运行”对话框;在命令行窗口中输入powershell。这些技术能够传递参数到PowerShell,包括用于控制PowerShell工作方式的开关和执行额外命令的参数。例如,可以通过使用powershell -nologo在无logo模式(表示logo标志被关闭)下启动PowerShell。默认情况下,通过命令行窗口启动PowerShell,PowerShell运行,然后退出。如果希望PowerShell执行一个命令并且不终止,在命令文本之后输入powershell /noexit。代码清单2.1展示调用PowerShell控制台的基本语法。表2.1列举可用的启动参数。默认情况下,PowerShell控制台启动时启动配置文件被装载。要退出控制台,输入exit。代码清单2.1 PowerShell语法powershell.exe -PSConsoleFile FileName | -Version VersionNumber -NoLogo -NoExit -NoProfile -NonInteractive -Sta -InputFormat Text | XML -OutputFormat Text | XML -WindowsStyle Style -EncodedCommand Base64EncodedCommand -File ScriptFilePath -ExecutionPolicy PolicySetting -Command CommandText表2.1 PowerShell启动参数参 数描 述-command指定命令文本来执行,就像在PowerShell命令提示符下输入一样-EncodedCommand指定base64-encoded命令文本来执行-ExecutionPolicy为控制台会话设置默认的执行策略续表参 数描 述-File设置要执行的脚本文件的名称-inputFormat设置发送到PowerShell的数据的格式,如文本字符串或序列化的XML。默认的格式是XML。有效值是text和XML-NoExit运行启动命令后不退出。通过命令行shell(cmd.exe)运行PowerShell命令或脚本时,这个参数非常有用-NoLogo启动PowerShell控制台但不显示版权标志-Noninteractive在非交互模式下启动PowerShell控制台。在这个模式下,PowerShell不为用户提供交互的提示-NoProfile告诉PowerShell控制台不装载当前用户配置文件-OutputFormat设置输出格式为文本字符串或序列化的XML。默认格式是文本字符串。有效值是text和XML-PSConsoleFile装载指定的Windows PowerShell控制台文件。控制台文件以.psc1为扩展名,用于确保指定的管理单元扩展被装载并且可供使用。可以在Windows PowerShell中使用Export-Console创建控制台文件-Sta以单线程启动PowerShell-Version出于兼容的原因,设置使用的Windows PowerShell的版本,如1.0-WindowStyle设置窗口风格,如Normal(普通)、Minimized(最小化)、Maximized(最大化)或者Hidden(隐藏)。默认值是Normal2.1.2 调用Windows PowerShell尽管最常使用PowerShell控制台或PowerShell ISE,但有时候可能需要从Windows命令行shell(cmd.exe)环境或者批处理脚本调用PowerShell。要这么做,可以使用-Command参数。一般来说,还需要使用-NoLogo参数以便不显示Windows PowerShell的logo,并且使用-NoProfile参数来停止配置文件的执行。例如,在一个命令提示符下或一个批处理文件中,可以在PowerShell中用下列命令得到当前运行进程的列表:powershell nologo noprofile command get-process输入这一命令,Windows命令行运行PowerShell,就像运行其他外部程序一样,传递参数和参数值,在执行完毕后退出PowerShell。要想使命令行在执行一个PowerShell命令后保持PowerShell运行,可以增加-NoExit参数,如下例所示:powershell noexit command get-process2.1.3 使用-Command运行命令因为-Command是从命令行提示符或批处理调用PowerShell最常用的一个参数,让我们仔细看看它的所有使用方法。如果输入“-”作为命令,命令文本从标准输入读取。也可以使用管道和重定向技术来操作命令的输出。记住任何在命令之后输入的字符都被解释为命令参数。因此,要写包含管道或重定向的命令,必须用双引号括住命令文本。下面的例子用来获取当前运行进程的信息并按进程标示符排序:powershell nologo noprofile command get-process | sort-object Id实践提示 大部分命令生成的输出可以被重定向到另一个命令作为输入。这样的技术称为管道,通过管道,某命令的输出被发送到下一命令作为输入。如下所示,可以看到管道命令的一般语法:Command1 | Command2这里管道重定向Command1的输出到Command2的输入。也可以下例的语法多次重定向输出:Command1 | Command2 | Command3一般来说,如果一个cmdlet接受了来自另一个cmdlet的输入,这个cmdlet就具有一个-InputObject参数,并且可以管道输出到这个cmdlet。Windows PowerShell也支持脚本块。一个脚本块是有序执行的一系列命令。脚本块用大括号“”括住,并且在脚本块中的每个命令用分号间隔。输入脚本块时可以使用大括号,但只有在Windows PowerShell中运行Powershell.exe时才能直接这样使用。结果是返回未序列化的XML对象而不是标准对象。例如,正在PowerShell提示符下工作,并且希望通过一个分离的PowerShell实例运行一系列的命令,可以用大括号括住命令并且使用分号分隔命令,如下所示:powershell command get-service; get-process尽管在PowerShell提示符下这一技术有效,但在命令提示符下运行PowerShell时,它将不会工作。在此情况下,使用如下格式:& CommandText在这里,引号表示一个字符串,&表示一个调用操作符,使这个命令被执行。在输入运行命令的字符串后,一般可以在命令提示符下或PowerShell提示符下运行这个命令。例如,在命令提示符下不能输入执行powershell -command get-service; get-process,但可以在命令提示符下输入执行下列命令:powershell command & get-service; get-process这里,以字符串形式传递了一个代码块到PowerShell以解析并执行。PowerShell执行Get-Service并显示结果,然后执行Get-Process并显示结果。如果无论使用字符串还是多个命令,无论在命令提示符还是在PowerShell提示符下都能成功使用某语法,那么该语法就是应该使用的语法。2.1.4 使用-File运行脚本使用Windows命令行且运行PowerShell脚本时,可以使用管道和重定向技术来操作命令输出。不同于使用-Command参数,-File参数用来指定要运行的脚本。如下例所示,使用-File参数并指定要运行的脚本的路径:powershell nologo noprofile file c:scriptsrun_all.ps1如果脚本在当前目录中,可以只输入脚本名称,如下所示:powershell nologo noprofile file run_all.ps1如果路径中包含空格,必须用双引号括住路径,如下所示:powershell nologo noprofile file c:datacurrent scriptsrun_all.ps1实践提示 无论是从菜单还是从命令提示符启动PowerShell,都可指定参数。当从菜单启动PowerShell时,修改启动PowerShell控制台或PowerShell应用程序的菜单快捷方式,指定在使用PowerShell时用到的参数。要这么做,可以按下列步骤操作。(1) 在菜单上,右击快捷方式,然后选择“属性”。在“属性”对话框中, “快捷方式”选项卡的“目标”栏被默认选中。(2) 按右箭头键,不用按下其他按键。插入光标会移动到PowerShell路径 的末端,插入一个空格,然后输入参数和参数值。(3) 单击“确定”来存储设置。如果误操作或者不想再使用参数,重复上 述步骤并移除之前增加的参数和参数值。2.1.5 使用嵌套的控制台在PowerShell控制台中,有时需要使用不同的环境设置和参数,然后返回先前设置而不退出控制台窗口。为此,可以使用嵌套技术。使用嵌套,可以在一个PowerShell控制台中启动另一个PowerShell控制台。不同于命令行,嵌套的控制台以新的工作环境运行,并且不继承当前控制台的环境设置。可以在这个分离的控制台环境中执行命令和脚本。输入exit来关闭嵌套的控制台实例时,将返回先前的控制台,先前的环境设置被恢复。2.2 理解命令输入、解析和输出从本章和第1章的例子可以看出,在PowerShell提示符下输入命令是一个十分简单的过程。最基本的方法是输入命令并按下Enter键。按下Enter键后,PowerShell处理并解析命令文本。2.2.1 基本行编辑PowerShell控制台包括一些基本的对当前行的编辑能力。表2.2列出了编辑按键。可以执行get-history来列出所有在命令记录中的命令,也可以执行clear-history来清除命令记录。Get-History按照命令编号列出命令,也可以通过Invoke-History从命令记录中运行指定编号的命令。在下例中,运行编号为35的命令:invoke-history 35表2.2 基本编辑按键按 键用 法插入一个换行符或者作为转义字符来定义字面值。也可以用管道字符“|”换行Alt+Space+E显示一个编辑快捷菜单,包含“标记”、“复制”、“粘贴”、“全选”、“滚动”和“查找”选项。按下K表示标记,Y表示复制,P表示粘贴,S表示全选,L表示在屏幕缓冲区域中滚动,F表示在屏幕缓冲区域中查找文本。要复制屏幕缓冲区域到“剪贴板”,先按下Alt+Space+E+S,然后按下Alt+Space+E+YAlt+F7清除命令记录Ctrl+C中断子提示或中止执行Ctrl+End删除行中光标后的所有字符Ctrl+左箭头/Ctrl+右箭头每次向左或向右移动一个单词Ctrl+S暂停或恢复输出显示Delete/Backspace按下Delete键来删除光标后的字符,或者按下Backspace键删除光标左侧的字符Esc清除当前行F1在命令行上将光标向右移动一个字符。在行末,从上个命令的文本中插入一个字符F2复制从上一个命令行开始到输入的字符为止的内容,以创建新的命令行F3从当前光标位置起到行末,根据上个命令补齐命令行内容F4删除当前命令行中从当前光标位置起到输入的字符止的字符F5向后扫描命令记录F7显示一个包含命令记录的弹出窗口,并允许选择一个命令。使用方向按键可以滚动列表。按下Enter键选中要执行的命令,或者按右箭头键将选中的文本放置到命令行F8在命令行中,根据已经输入的文本,在命令记录中向后查找匹配的命令F9从命令记录中运行指定编号的命令。按下F7键列出命令编号Home/End移动到行首或行末续表按 键用 法Insert在插入模式和覆盖模式间切换左/右箭头键在当前行向左或向右移动光标Page Up/Page Down访问命令记录中第一条或最后一条命令右击如果“快速编辑”模式被禁用,显示包含“标记”、“复制”、“粘贴”、“全选”、“滚动”和“查找”选项的编辑快捷菜单。要复制屏幕缓冲区域到“剪贴板”,右击,选择“标记”,然后按下Enter键Tab/Shift+Tab访问tab扩展功能,详情参见6.2节上/下箭头键在命令记录中向前或向后扫描,如1.2.4节所述Windows徽标键+R 后输入powershell运行Windows PowerShell。注意,如果安装了多个版本的PowerShell或者正在使用64位计算机,那么将运行第一个版本(可能不是想运行的那个版本)实践提示 在PowerShell控制台中复制和粘贴文本的方式取决于是否启用了“快速编辑”模式。如果“快速编辑”模式被启用,可以通过拖动鼠标并按下Enter键来复制文本,然后单击鼠标来粘贴文本。当拖动鼠标来选取要复制的文本时,要注意开始之后不要中途停顿,然后,PowerShell将从“剪贴板”粘贴。如果“快速编辑”模式被禁用,复制文本需要通过右击,选择“标记”,拖动鼠标来选择文本,然后按下Enter键。粘贴文本需要右击,选择“粘贴”。在“属性”对话框中,可以启动或禁用“快速编辑”,详情参见1.2.3节。2.2.2 语法解析的工作机制除了先前在1.1节中讨论的处理模式以外,PowerShell还有解析模式。不要把处理模式和解析模式混淆。处理模式控制PowerShell处理命令的方法。一般来说,处理发生在交互或者非交互模式下。解析模式控制PowerShell解析一条命令中的每个值的方法。PowerShell将命令分解为执行和令牌单元。执行单元包括从行中第一个字符,到分号或者到行末之间的任何字符。令牌是执行单元中的一个值。知道这点,可以执行以下操作。l 在一个命令行上输入多条命令,使用分号分隔每条命令。l 可以通过按下Enter键来标记一个执行单元的末端。PowerShell解析值的方法取决于当解析一个执行单元时遇到的第一个令牌。PowerShell解析使用下列模式之一。l 表达式模式 如果在一个执行单元中出现的第一个令牌不是cmdlet、关键字、别名、函数或外部工具的名称,PowerShell会使用表达式模式。PowerShell会将表达式作为数值或字符串求值。字符串值必须用引号括住,不在引号中的数字被作为数值(而不是字符串)。l 命令模式 如果在一个执行单元中出现的第一个令牌是cmdlet、关键字、别名、函数或外部工具的名称,PowerShell会使用命令模式。PowerShell调用命令令牌。除了那些以表示变量、数组、字符串或子表达式开头的字符开头的值,命令令牌后的值将作为扩展字符串被处理。这些特殊字符包括“$”、“”、“”、“”和“(”,当遇到这些字符,将使用表达式模式处理值。记住这些规则,可以看到如下事实。l 在PowerShell提示符下输入5+5,PowerShell把5+5解释为表达式,计算并显示结果10。l 在PowerShell提示符下输入Write-Host 5+5,PowerShell把5+5解释为Write-Host的参数,显示5+5。l 在PowerShell提示符下输入Write-Host(5+5),PowerShell把(5+5)解释为表达式,计算并传递给Write-Host。PowerShell显示结果10。2.2.3 解析被赋予的值在PowerShell中,变量定义以美元符号($)开头,后面跟定义的变量名。要赋值给一个变量,可以使用等于符号(=),然后指定要赋予的值。创建一个变量后,可以使用变量名引用或显示变量的值。按照这一规则,在PowerShell提示符下输入$a=5+5,PowerShell把5+5解释为表达式,计算并将结果赋值到变量。结果,在PowerShell提示符下输入变量$a:$a或者输入以下命令:Write-Host $a输出结果如下:10又如,定义一个名为$a的变量,赋予它一个字符串值,如下所示:$a = This is a string.这里,值被当作字符串处理并赋值到$a,字符串在表达式模式下处理。在PowerShell提示符下输入$a:$a或者输入以下命令:Write-Host $a输出结果如下:This is a string.但有些时候,希望强制PowerShell使用命令模式将一个字符串解释为文本表达式。要知道原因,考虑下面的例子:$a = Get-Process如果在PowerShell提示符下输入$a:$a输出结果如下:Get-Process发生这一情况是因为分配到$a的值被作为文本字符串,并且它在表达式模式下被处理。但在此例中原本希望PowerShell正确执行Get-Process。要达到目的,需要PowerShell解析这个字符串并判定它包含一个令牌,而这个令牌应该在命令模式下被处理。在引用$a变量时,通过使用“&”操作符,可以达到上述目的,如下例所示:&$a因为PowerShell在命令模式下处理这个字符串,Get-Process被看作一个命令令牌,Get-Process这一cmdlet被调用,输出显示当前运行的进程。只要名称被赋予字符串中,这一技术可以使用任何cmdlet、关键字、别名、函数或外部工具的名称。除了命令名称以外,如果要增加值,如参数、多命令或管道,必须用“”括住命令而不是用引号。大括号表示一个脚本块,如下所示:$a = get-eventlog -newest 25 -logname application赋到$a的值被作为一个特殊字符串在表达式模式下被处理。在PowerShell提示符下输入执行$a,输出结果如下:get-eventlog -newest 25 -logname system要强制PowerShell解析脚本块内容,可以如下输入:&$aPowerShell会解析脚本块中的每个令牌。结果与执行命令文本相同。2.2.4 解析异常在命令行中执行一个不完整的表达式时,PowerShell显示“”子提示符,表示它等待补全表达式。例如,输入Write-Host(,然后按下Enter键,PowerShell显示“”子提示符,然后等待补全表达式。必须输入额外的文本,如5+5)来补全命令行,然后按下Enter键。必须再次按下Enter键(不要输入其他文本)退出子提示符然后返回。之后PowerShell才将输入作为完整的执行单元来解释。如果要有意地将命令文本分解为多行输入,可以使用“”符号。在复制长命令行并将它们粘贴到PowerShell控制台时,可以使用这个技术,然后运行它们。下面是操作步骤。(1)输入命令文本的一部分,然后输入“”。按下Enter键,PowerShell显示“”子提示符。(2)输入命令文本的下一部分。然后输入“”,表示要在下一行继续输入命令文本或者按下Enter键标记命令文本的结束。(3)最后当按下Enter键(不要使用“”符号)标记命令文本的结束(关闭所有表达式),PowerShell将命令文本作为命令解析。下面是实例和部分输出:get-eventlog -newest 25 -logname system如果命令文本中使用了管道字符“|”,可以断行,然后在下一行中继续,如下例和部分输出所示:get-process | sort-object Id2.2.5 解析的输出在解析命令和值之后,PowerShell返回输出。不同于命令行shell(cmd.exe),在PowerShell中运行的内置命令在输出中返回对象。对象是数据点的一个集合,代表一个项目。对象有特定的数据类型,如字符串型、布尔型或数值型,并且有方法和属性。对象方法允许针对对象代表的项目执行操作。对象的属性存储关于对象代表的项目的信息。使用PowerShell时,可以使用一个对象的方法和属性来采取特定的动作并操作数据。在管道中组合使用命令时,命令将信息作为对象相互传递。当第一条命令运行时,它沿着管道向第二条命令发送一个或多个对象。第二条命令接收从第一条命令发来的对象、处理对象并显示输出,或在管道中传递新的或者被修改的对象到下一条命令。这一过程将持续到管道中所有命令运行完,并最终显示命令输出。因为我们不能读到对象,而PowerShell能用文本解释对象并输出到屏幕。有多种方法可以操作输出。2.3 输出的写操作和格式化尽管PowerShell读写对象,但各种对象关联的值最终仍被转换为文本,作为cmdlet执行处理的最终结果。被写到控制台的输出称为被写到标准输出流的输出。PowerShell也支持其他输出流。在讨论这些输出流之前,将解释默认情况下,如何格式化输出流。2.3.1 使用格式化的cmdlet使用外部工具和程序时,由工具和程序决定如何格式化输出。使用PowerShell的cmdlet,PowerShell使用专用的格式化cmdlet(格式器)来格式化输出。格式器决定显示哪些输出属性,以及是否显示成列表或表格。格式器根据数据的类型来决定显示的方式。字符串和对象以不同的方式被处理和操作。注意格式器安排数据的显示,但是不真正显示它。用作输出的cmdlet负责显示输出,详情参见后文。使用下列格式器之一,可以明确地指定输出的格式。l Format-List 将输出格式化为属性列表。默认情况下,对象的所有属性都被格式化,每行显示一个属性。使用-Properties来指定根据名称显示哪个属性。在逗号分隔列表中输入属性名称。需要时,使用通配符例如“*”来匹配任何值。Format-List -DisplayError -ShowError -Expand String -Force -GroupBy Object -InputObject Object -View String-Property PropertyNamel Format-Table 将输出格式化为一张表格,分列显示所选的属性。对象类型决定默认显示的布局和属性。根据数据宽度,使用-AutoSize自动地调整列的大小和数量。使用-HideTableHeaders来忽略列头。使用-Wrap在下一行显示超出列宽的文本。Format-Table -DisplayError -ShowError -Expand String -Force -GroupBy Object -InputObject Object -View String-AutoSize -HideTableHeaders -Wrap -Property PropertyNamel Format-Wide 将输出格式化成多列的表格,但每个对象只有一个属性被显示。根据数据宽度,使用-AutoSize自动地调整列的大小和数量。使用-Columns指定要显示的列的数量。Format-Wide -DisplayError -ShowError -Expand String -Force -GroupBy Object -InputObject Object -View String -AutoSize -Column NumColumns -Property PropertyNamel Format-Custom 使用预定义的可选视图格式化输出。可以在Windows PowerShell目录下查看*format.PS1XML文件来决定可以选用的视图。要创建自己的.PS1XML视图文件,使用Update-FormatData将该文件增加到Windows PowerShell中。使用-Depth来指定显示的列数。Format-Custom -DisplayError -ShowError -Expand String -Force -GroupBy Object -InputObject Object -View String -Depth Num -Property PropertyName在使用上述格式器时,可能也会用到下列cmdlet。l Group-Object 组对象包含和指定属性相同的值。对象依次分组,所以如果值不排序,就不能得到想要的结果。-CaseSensitive用于以区分大小写的方式排序而不是采用默认排序方式(不区分大小写)。使用-NoElement来忽略分组中的成员名,例如文件名(如果根据扩展名对文件分组)。Group-Object -CaseSensitive -Culture String -NoElement-InputObject Object -Property PropertyNamel Sort-Object 根据对象的属性值以升序排列对象。使用-Descending以降序排列。-CaseSensitive用于以区分大小写的方式排序而不是采用默认排序方式(不区分大小写)。使用-Unique来消除重复项并返回指定的唯一成员集合。Sort-Object -Culture String -CaseSensitive -Descending-InputObject Object -Unique -Property PropertyName要改变cmdlet的输出格式,使用管道操作符“|”将命令输出发送到格式器。例如,默认情况下,Get-Service的格式是一张表,显示“状态”(Status)、“名称”(Name)和“显示名称”(DisplayName)属性,下面是命令和输出:get-serviceFormat-Wide将输出格式化成多列的表格,但每个对象只有一个属性被显示。在下例中,发送Get-Service的输出到Format-Wide:get-service | format-wide -column 3结果,服务列表被格式化为多列。输出提供每个被配置的服务的名称。如果知道服务名称,可以通过列举每个配置属性的值来测试服务。例如,下面的命令获得WinRM服务的详细信息:get-service winrm | format-list在这个格式中,数据以列表而不是以表格显示,而且有先前输出格式中被忽略的额外信息。任何格式器都可以使用-Properties参数来根据名称指定显示的属性。必要时可以使用通配符例如“*”来匹配任何值。例如,要显示所有winlogon进程属性,执行以下命令:get-process winlogon | format-list -property *要查看一个对象的所有属性,可以发送命令的输出到Get-Member。例如,查看一个服务对象的所有属性,执行下列命令:get-service | get-member -membertype *property因为所有这些属性都属于Get-Service为每个服务获取的对象,所以可以通过-Property参数显示任意或所有的属性。例如,下面的例子使用Format-Table命令,让它只显示每个服务的“名称”(Name)、“状态”(Status)和“服务类型”(ServiceType)属性。get-service | format-table Name, Status, ServiceType, ServicesDependedOn除了格式化显示输出,还可能需要将对象进行分组和排序。所有的格式器都包含-GroupBy参数,它允许根据指定的属性分组输出。使用-Groupby参数生成的结果和发送输出到Group-Object后再将输出发送到格式器的结果是一样的。但这些技术可能不会生成需要的输出,因为每次遇到一个新的指定属性值,都会生成新的标题。例如,使用Get-Service可以按状态(如正在运行的或者停止的)将服务分组,如下例所示:get-service | format-list groupby status使用Group-Object并根据状态分组,将获得完全不同的结果:get-service | group-object status尽管两种输出都有用,但如果要依次看所有停止和启动的服务,它们都不能提供所需要的结果。工作区首先将对象排序然后将它们分组。可以通过Sort-Object对对象排序。Sort-Object支持针对单一属性和多个属性的排序。可以使用-Property参数指定单个或多个属性进行排序,并用逗号“,”分隔多个属性。例如,要根据状态(Status)和名称(Name)对服务排序,可以使用下面的命令:get-service | sort-object status, name | format-table groupby status默认情况下,属性按升序排列。可以使用-Descending参数实现以降序排列。例如,使用Get-Process时,以降序排列可以帮助识别使用计算机资源最多的进程。该命令如下所示:get-process | sort-object ws descending默认情况下,属性按不区分大小写的方式排序。通过增加-CaseSensitive参数可以使用区分大小写的方式排序。最后,如果只想查看唯一的属性值,可以添加-Unique参数。它消除了拥有相同值并多次出现的指定集合成员。基于对象属性排序时,表示只有唯一的指定属性被返回,此方法可能适用于按照企业名排序的输出,但不适合用于按照进程名排序的输出。要知道原因,可以执行命令,按名称(ProcessName)排序列出正在运行的进程,如下例所示:get-process | sort-object name在这个输出中,可以看到一些多次出现的进程,如powershell或svchost。如果输入下列命令:get-process | sort-object name unique在这个输出中,只会看到每个进程的第一个实例,它不会给出有多少进程正在运行,也不会给出那些进程占用了哪些资源。2.3.2 写到输出流Windows PowerShell有几个cmdlet能写到不同的输出流。首先要了解这些cmdlet的是,它们并不真正渲染输出。它们只是管道(发送)输出到指定的输出流。尽管一些输出流会修改输出格式,但真正的渲染和完成输出工作属于那些输出cmdlet,详情参见后文。可用的输出流有下列几类:l 标准输出流l 详细信息流l 警告信息流l 调试信息流l 错误信息流1. 显式地写输出可以使用下列输出cmdlet来显式地写输出。l Write-Host写到标准的输出流并允许为文本设置背景色和前景色。默认情况下,任何文本都以换行符中止。使用-NoNewLine可以不用插入换行符。使用-Separator在要显示的对象间指定一个字符串输出。使用-Object来指定要显示的对象或字符串。Write-Host -BackgroundColor Color -ForegroundColor Color -NoNewline -Separator Object -Object Objectl Write-Output 发送指定对象经管道到下一个命令或在控制台中显示。因为Write-Output接受输入对象,所以可以发送对象到它,它会依次发送对象到下一个命令或控制台。Write-Output -InputObject Object使用Write-Host的主要原因是利用它提供的格式化选项,其中包括可选的文本和背景色。可以使用-BackgroundColor参数为输出文本设置背景色,用-ForegroundColor参数设置文本颜色。可用的颜色如下:l 黑色、深蓝色、深绿色、深青色l 深红色、深品红色、深黄色、灰色l 深灰色、蓝色、绿色、青色l 红色、品红色、黄色、白色在下面的例子中,指定了黑色的文本和黄色的背景:write-host backgroundcolor yellow foregroundcolor black This is text!注意Write-Host写输出到承载PowerShell的应用程序。典型的有PowerShell控制台(powershell.exe)或PowerShell ISE(powershell_ise.exe)。其他应用程序也能承载PowerShell引擎,那些应用程序可以用不同的方式处理Write-Host输出。表示只有知道哪个宿主应用被使用并且这个应用如何处理Write-Host输出,才会使用Write-Host。Write-Output也能写到标准输出流。与Write-Host不接受输入对象不同,Write-Output接受对象作为输入。Write-Output的作用只是在管道中发送指定对象到下一个命令。如果该命令是管道中的最后一条命令,那么对象在控制台上显示。Write-Output适用于需要明确地指明写到输出的内容的情况,如下例所示:get-process | write-output这里,发送Get-Process的输出到Write-Output以表示正在写输出。使用变量时,Write-Output在显示输出时也很有用。考虑下面的例子:$p = get-process; $p这里,创建了$p变量以存储进程对象,然后把那些对象写到输出。要明确表示写操作,可以修改先前的代码,如下例所示:$p = get-process; write-output $p2. 使用其他输出流要使用除标准输出流以外的输出流,可以使用下面的cmdlet。l Write-Debug 从一个脚本或命令将调试信息写到控制台。默认情况下,调试信息不显示在控制台中,也不引起执行的中止。使用-Debug参数(所有cmdlet的常用参数)或者$DebugPreference变量显示调试消息。-Debug参数覆盖当前命令的$DebugPreference变量值。Write-Debug -message DebugMessagel Write-Error 从一个脚本或命令将错误信息写到控制台。默认情况下,错误信息不显示在控制台中,也不引起执行的中止。使用-ErrorAction参数(所有cmdlet的常用参数)或者$ErrorActionPreference变量可以修改它的行为。-ErrorAction参数覆盖当前命令的$ErrorActionPreference变量值。Write-Error -ErrorRecord ErrorRecord AddtlParamsWrite-Error -TargetObject Object -Message String-ErrorId String AddtlParamsWrite-Error -Exception Exception -Category String AddtlParamsAddtlParams=-CategoryTargetName String -CategoryTargetType String-CategoryReason String -CategoryActivity String-RecommendedAction Stringl Write-Warning 从一个脚本或命令将警告信息写到控制台。默认情况下,警告信息不显示在控制台中,也不引起执行的中止。使用-WarningAction参数(所有cmdlet的常用参数)或者$WarningPreference变量可以修改它的行为。-WarningAction参数覆盖当前命令的$WarningPreference变量值。Write-Warning -message WarningMessagel Write-Verbose 从一个脚本或
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深度解析(2026)《GBT 35678-2017公共安全 人脸识别应用 图像技术要求》
- 深度解析(2026)《GBT 35536-2017酵母浸出粉检测方法》
- 《DAT 11-1994文件用纸耐久性测试法》(2026年)合规红线与避坑实操手册
- 幼儿园保健医准入制度
- 卫生间保洁员职责
- 笛子独奏曲题库及解析
- 导演基础题目及详解
- 全国导游证导游业务题目及分析
- 2025-2026学年辽宁沈阳二中高一下学期4月月考生物试题含答案
- DB34-T 4818-2024 地名信息采集规范
- 2026年中考复习必背初中英语单词词汇表(精校打印)
- 生物安全培训考试题目含答案
- 集体备课培训课件
- 建筑机电安装知识点课件
- DB11T945.1-2023建设工程施工现场安全防护场容卫生及消防保卫标准第1部分
- 老年康复护理培训教育课件
- 人教部编版七年级语文下册全册教案(附课后反思)
- 2025年四川省攀枝花市仁和区人才引进33人历年高频重点提升(共500题)附带答案详解
- 企业建筑施工安全生产管理制度汇编
- 2024年河北高中学业水平合格性考试地理试题(含答案)
- 女生穿搭技巧学习通超星期末考试答案章节答案2024年
评论
0/150
提交评论