powershell 中文技术网
今天, 我将为您介绍如何使用格式化和输出命令. 在PowerShell中,负责进行格式化和输出的是三类cmdlet。他们分别是:Format-*、Out-*和 Write-* 。顾名思义,Format-* 主要是用来对信息进行格式化操作,Out-*用于指定输出设备,而 Write-* 为 PowerShell 宿主(Host)输出的更多有用信息提供了快捷访问接口。
我们要将对象输出到控制台或打印机等位置前,我们首先必须将对象格式化成为字符串的形式。一个对象可能包含几十种属性信息,PowerShell的开发者已经考虑到我们在日常使用时,不会使用一个对象的所有信息,因此默认情况下只保留该对象上最主要的几种属性。让我们来看看进程对象默认会显示哪些属性。首先看看进程对象究竟有多少个属性:
PS C:\> (Get-Process Idle | Get-Member -MemberType Property).Count
51
在上面例子,首先使用Get-Process命令返回表示Idle进程的对象,并通过Get-Member命令返回该对象上所有属性,最后我们给出该对象的属性个数(打印这些属性太占地方了,你可以把Count去掉,检查返回的结果)。让我们看看PowerShell默认情况下会输出哪些属性吧:
PS C:\> Get-Process Idle
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
0 0 0 16 0 0 Idle
正如前面所介绍的,PowerShell默认只会返回对象上一部分属性信息,究竟显示哪些属性是通过定义在ETS系统中的信息决定的。
Format族包含了:Format-Custom、Format-List、Format-Table和Format-Wide四个命令。在大多数情况下,Format-Table是PowerShell默认使用的格式器。Format-List的输出类似上面输出进程属性的格式,每个对象将会占一行。一行内包括该对象的多个主要属性,如果该属性信息太长,PowerShell就会将该信息截断。让我们看几个管理PowerShell最常用的例子:
PS C:\> Get-EventLog -LogName 'Windows PowerShell' -Newest 10 | Format-Table
Index Time Type Source InstanceID Message
----- ---- ---- ------ ---------- -------
1029 五月 31 21:38 Information PowerShell 400 Engine state is changed from None to Available....
1028 五月 31 21:38 Information PowerShell 400 Engine state is changed from None to Available....
1027 五月 31 21:38 Information PowerShell 600 Provider "Certificate" is Started. ...
1026 五月 31 21:38 Information PowerShell 600 Provider "Variable" is Started. ...
1025 五月 31 21:38 Information PowerShell 600 Provider "Registry" is Started. ...
1024 五月 31 21:38 Information PowerShell 600 Provider "Function" is Started. ...
1023 五月 31 21:38 Information PowerShell 600 Provider "FileSystem" is Started. ...
1022 五月 31 21:38 Information PowerShell 600 Provider "Environment" is Started. ...
1021 五月 31 21:38 Information PowerShell 600 Provider "Alias" is Started. ...
1020 五月 31 15:43 Information PowerShell 403 Engine state is changed from Available to Stopp...
这个例子显示PowerShell最近10个日志的日志信息. Format-Table为了保证每个对象只输出一行,只会输出那些较重要的信息,一般对对象的检索,使用Format-Table就是最好的办法。
其他几个命令, 您可以参照PowerShell的帮助, 或我翻译的帮助信息详细学习.
看完了负责格式化对象输出信息的cmdlet,我们需要考虑该把这些信息输出到什么位置了。Out族包括了:Out-Default、Out-File、Out-Host、Out-Null、Out-Printer、Out-GridView和Out-String。
Out-Host命令,就是将显示结果返回给宿主程序,由宿主程序展现给使用者。Out-Default默认就是使用Out-Host进行输出,但是根据PowerShell文档的描述,Out-Default用来提供一种占位符的特性,你可以在脚本完成后,重新修改Out-Default来控制整个程序的输出。
Out-Null的作用就是将输出丢弃,在很多时候,如果我们不关心命令的返回结果,而只关一条命令产生的某些影响时,我们可以将该命令的输出通过管道发送给Out-Null。例如:
PS C:\> New-Item TestIt -Type dir
Directory: Microsoft.PowerShell.Core\FileSystem::C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2007-9-16 21:10 TestIt
PS C:\> New-Item TestIt -Type dir | Out-Null
New-Item : Item with specified name C:\TestIt already exists.
At line:1 char:9
+ New-Item <<<< TestIt -Type dir | Out-Null
PS C:\> Remove-Item TestIt
PS C:\> New-Item TestIt -Type dir | Out-Null
PS C:\>
我们首先创建了TestIt的目录,默认情况下,New-Item返回新创建的目录,该对象被输出到控制台上。我们接下来试图再创建一次该目录,并将输出信息丢弃。然而,由于该目录已经存在,因此创建失败,命令给出了错误提示。这里我们需要注意错误信息并没有被丢弃!接下来我们删除目录TestIt,再次执行创建命令,这次,屏幕上没有显示创建的目录信息。
最后,我们来看看Out-File。很多时候,我们需要将某种编码的字符串存储为其他编码形式。我们可以简单的使用Out-File的参数Encoding来设置输出信息的编码格式。这些编码包括了:“Unicode”、“UTF7”、“UTF8”、“UTF32”、“ASCII”等等。有时候,我们还会遇到如果将信息写入文件中。如果该文件已经存在,我们可能希望信息继续追加到文件的末尾,或者当文件已经存在时,我们希望覆盖这个文件。通过参数Append,我们可以告诉Out-File究竟是覆盖文件,还是在文件的末尾进行追加。让我们看看简单的例子:
PS C:\> "我是第一行!" | Out-File append.txt
PS C:\> Get-Content C:\append.txt
我是第一行!
PS C:\> "我是第二行,但是我要试试覆盖第一个行!!" | Out-File append.txt
PS C:\> Get-Content C:\append.txt
我是第二行,但是我要试试覆盖第一个行!!
PS C:\> "我是第三行,让我跟在第二行后面吧!!!" | Out-File -Append append.txt
PS C:\> Get-Content C:\append.txt
我是第二行,但是我要试试覆盖第一个行!!
我是第三行,让我跟在第二行后面吧!!!
分享到:
相关推荐
PowerShell中的Cmdlet通常被设计成可以相互结合使用,比如“get”Cmdlet用于提取数据,而“set”Cmdlet用于创建或修改数据,“format”Cmdlet用于数据格式化,而“out”Cmdlet将输出导向到指定的目的地。PowerShell...
Windows PowerShell是一种由微软公司开发的命令行外壳程序及脚本环境,它为Windows命令提示符和Windows脚本宿主提供了更为强大和灵活的编程能力。PowerShell构建于.NET Framework之上,允许用户通过其丰富的命令和...
模块是组织和重用PowerShell代码的有效方式,可以包含Cmdlets、脚本、提供程序、类型扩展和格式化文件。它们允许你封装相关功能,并在需要时导入到PowerShell环境中。 7. PowerShell远程管理: 通过WinRM...
通过上述内容,我们可以看到PowerShell的强大之处在于其丰富的命令集和灵活的脚本编写能力,使得系统管理和自动化任务变得简单而高效。无论是日常的系统监控,还是复杂的环境配置,PowerShell都能提供有效的解决方案...
- **处理控制台输入和显示**:Windows PowerShell 支持标准的输入/输出操作,同时也提供了更为灵活的输出格式化选项。 - **使用某些 C# 语法**:为了增强功能性和灵活性,Windows PowerShell 引入了部分 C# 语言特性...
2. **模块和脚本包**: PowerShell模块是可重用的代码单元,包含Cmdlets、提供者、类型和格式化文件,方便共享和组织功能。 3. **PowerShell ISE**: PowerShell集成脚本环境(ISE)是官方提供的开发和测试工具,具有...
以上只是PowerShell命令大全中的一部分,实际PowerShell中包含更多的Cmdlet和功能,可以用于自动化任务、系统管理、脚本编写等多个领域。熟练掌握PowerShell能极大地提高工作效率,是IT管理员和开发者的必备技能。
通过格式化命令,可以控制变量输出的样式和格式。 字符串在PowerShell中是基本的数据类型,支持各种字符串操作。PowerShell还引入了Here-Strings这一概念,它允许创建多行字符串,非常适合编写复杂的文本或脚本。...
PowerShell中的管道符号(|)是另一个关键特性,它允许将一个命令的输出作为另一个命令的输入,实现命令间的串联。例如,`ls | sort -Descending Name | Format-Table Name,Mode` 将列出当前目录的文件,按名称降序...
在Windows操作系统中,PowerShell是一种强大的命令行工具,用于管理和自动化系统任务。它提供了一种交互式的、基于对象的shell,以及一种强大的脚本语言,能够处理复杂的系统管理任务。在处理某些信息时,尤其是查询...
- **格式化输出**: `Format-Wide`, `Format-List`, `Format-Table`等命令可以帮助调整输出格式,使其更易阅读。 #### 导航 - **管理当前位置**: 使用`Get-Location`和`Set-Location`来查看和改变当前工作目录。 - *...
Cmdlet设计简洁,易于组合使用,它们专注于特定任务,如获取、设置、格式化或输出数据。每个Cmdlet都有详细的帮助文档,可以通过`get-help 名称> -detailed`命令查看。 PowerShell引入了一种新的脚本语言,它专为...
Windows PowerShell 3.0 是一个由微软开发的基于任务自动化和配置管理的命令行shell和脚本语言。它最初是作为Windows操作系统的附加组件发布的,后续版本集成在Windows中,比如Windows 7和Windows Server 2008 R2...
- **设置命令输出格式**:Windows PowerShell 提供了多种方法来设置输出格式,以提高可读性和可用性。例如使用 `Format-Table` 或 `Format-List` 可以以表格或列表形式展示输出结果。 - **使用别名**:为了方便用户...
- **脚本支持**:除了单个命令外,PowerShell还支持脚本文件的编写和执行,可以用来实现复杂的自动化任务。 #### 二、基本概念 - **Cmdlet**:PowerShell中的命令称为cmdlet,这些命令通常以动词-名词的形式命名...
该压缩包中的主要文件是 "PowerShell_Setup_x86.msi",这是一个Microsoft Installer(MSI)格式的安装程序,用于指导和执行PowerShell的安装过程。 PowerShell的核心功能包括: 1. **命令行工具**:PowerShell提供...
2. **Pipeline**:PowerShell中的Pipeline概念类似于Unix Shell的管道,允许用户将一个Cmdlet的输出作为另一个Cmdlet的输入,实现数据的流式处理。 3. **提供者(Providers)**:PowerShell提供了一组提供者,允许...
- **管道**:PowerShell的管道与Unix中的管道类似,但更强大,可以将一个命令的输出作为另一个命令的输入,支持链式操作。 - **Cmdlets**:PowerShell的命令是预定义的小型工具,以动词-名词格式命名,如`Get-...
- **管道**:PowerShell中的管道机制允许用户将一个命令的输出直接作为下一个命令的输入,从而实现高效的数据处理流程。 - **对象**:PowerShell处理的是对象而非简单的文本,这使得它能够更智能地处理数据,例如从...