6.2 Exporting to a CSV or an XML file
6.2.1 Exporting to CSV
Get-Process | Export-CSV procs.csv
执行了以上命令后,我们也可以用 Import-CSV procs.csv
来将该文件导入到shell中阅读。
6.2.2 Exporting to XML
我们可以使用cmdlet Export-CliXML
以及 Import-CliXML
分别达到Export和Import的目的。
6.2.3 Comparing files
命令 Compare-Object
可以用来比较文本,其别名是 Diff
。
结果中的 <=
表明只有左边有, =>
表明只有右边有。
使用参数 -property
可以列出文件所有内容。
6.3 Piping to a file or a printer
我们可以使用符号 <
来重定向输出至其他地方,如:
Dir > DirectoryList.txt
但是,输入以上命令的时候,PowerShell实际上执行的是:
Dir | Out-File DirectoryList.txt
PowerShell有一系列以 Out-
开头的cmdlet。其中一个叫 Out-Default
,当你不指定任何不同的 Out-
cmdlet的时候,shell会默认使用该cmdlet,如:
Dir
实际上执行的是 Dir | Out-Default
使用 Dir | Out-Default | Out-Host
也可以达到同样的效果,其中 Out-Host
将信息显示在屏幕上。
Out-Printer
会将命令执行结果保存为pdf,如 Get-Service | Out-Printer
Out-GridView
会将结果以弹窗的形式展示,如Get-Service | Out-GridView
我们可以使用 Help Out*
、Get-Command Out*
或者 Get-Command -verb Out
来查询更多 Out-
cmdlet。
6.4 Converting to HTML
Pipe your command to ConvertTo-HTML
。如 Get-Service | ConvertTo-HTML
,不需要文件名,因为只是输出,并不存储。
如果想要将输出结果保存起来,可以使用 Get-Service | ConvertTo-HTML | Out-File services.html
同样,以 ConvertTo-
开头的cmdlet还有 ConvertTo-CSV
和 ConvertTo-XML
等,这些都不会在磁盘上创建文件。如果想要创建文件,我们可以将结果pipe到 Out-File
中。
6.5 Using cmdlets that modify the system: killing processes and stopping services
Get-Process | Stop-Process
会停止计算机中的每一个进程,所以不要在自己的电脑上运行这个命令。如果想尝试的话,可以在虚拟机中尝试。
我们可以通过 -name
参数指定停止进程的名字,如 Get-Process -name Notepad | Stop-Process
同样的 Get-Service
的输出结果可以被pipe到像 Stop-Service, Start-Service, Set-Service
这样的cmdlet中。
6.6 Common points of confusion
我们可以使用命令 Get-Content
或者其别名 Type
和 Cat
来读取文件到shell中,如:
PS C:\> get-eventlog -LogName security -newest 5 | export-csv events.csv
PS C:\> Get-Content .\events.csv
但是,这样读取的话,看起来会很乱。想要看的更舒服,就要使用对应的命令 Import-
来interpret和parse,如 PS C:\> import-csv .\events.csv
。
所以,只有当我们想要对原生文件进行处理而不是看的时候,才用 Get-Content
。