《Learn Windows PowerShell in a Month of Lunches Third Edition》读书笔记——CHAPTER 6 The pipeline
6.2 Exporting to a CSV or an XML file
6.2.1 Exporting to CSV
通过调用GetProcess并执行ExportCSV命令将数据导出至procs.csv文件中,在完成上述操作后随后我们可以使用ImportCSV命令将该文件导入到shell环境中以便进一步查看。
6.2.2 Exporting to XML
通过cmdlet Export-CliXML 和 Import-CliXML 实现相应的功能。
6.2.3 Comparing files
该指令 Compare-Object 被用于对比文本内容,并也被称为 Diff 。在结果中显示:
- 使用符号 
<=表示左边存在而右边不存在; - 使用符号 
=>则表示右边存在而左边不存在。
通过指定参数-property能够实现列出文件所有内容的功能。 
6.3 Piping to a file or a printer
我们可以通过符号 < 来实现文件的重定向操作。例如: Dir > DirectoryList.txt 这样的指令会被PowerShell视为一种特定的操作方式。然而,在输入上述命令时,请注意PowerShell实际上会处理为 Dir | Out-File DirectoryList.txt 这样的指令序列
PowerShell包含一组以\texttt{Out-}开头的命令行工具。其中一个常见例子是\texttt{Out-Default}命令,在不指定其他\texttt{Out-}命令的情况下,默认会调用此命令。例如,在使用\texttt{Dir}命令时,默认行为等同于将命令与\texttt{Out-Default}结合使用。
通过将结果进一步 \texttt{piped} 到 \texttt{Out-Host} 命令(即直接在屏幕上显示),同样可以实现上述功能。
Out-Printer 负责处理命令执行结果并将其输出为PDF格式文件;例如 Get-Service | OutPrinter
OutGridView 负责处理命令执行结果并将其以窗口的形式呈现;例如 GetService | OutGridView
建议采用以下几种常用方法包括 Help and Info, Get-Command Out*, 和 ListOut 以获取更多 Out- 命令。
6.4 Converting to HTML
将命令管道到ConvertTo-HTML。例如Get-Service | ConvertTo-HTML$无需指定文件名因为只是输出并不存储。
如果希望保存输出结果可执行如下操作:将命令管道到ConvertTo-HTML$并随后执行以下操作即可完成保存任务
此外,在CMDlets中包含有ConvertTo-系列的命令类型之外,还有诸如ConvertTo-CSV和ConvertTo-XML等子命令类别;这类命令在执行过程中不会生成本地文件。然而,在需要生成本地文件的情况下,则应当将操作结果通过管道连接至Out-File路径处。
By utilizing cmdlets, we can affect the system to terminate all processes and halt all services.
运行 Get-Process | Stop-Process 命令将导致计算机中的所有进程被终止。因此,在您的本地设备上执行此命令并非推荐做法。如果您有兴趣进一步探索,则可以在虚拟环境中进行测试。
通过 -name 参数设置停止进程的名称,请问您会使用 Get-Process -name Notepad | Stop-Process 这一命令吗?
相同的 Get-Service 返回结果可以通过将其传递给类似于 Stop-Service, Start-Service, Set-Service 这类 cmdlets 来实现操作
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- ,例如运行以下命令:PS C:\> import-csv .\events.csv 。因此,在需要处理原始文件而非仅查看的情况下,请使用 Get-Content 命令完成任务
