powershell_3 管道:连接命令
这章其实讲来讲去的就一个意思,在原生的“-参数”以外,可以进行一些额外的操作,例如“ | explorer-files c:\temp”就可以导出文件到C盘的temp文件夹
另外可以做一下类似四则运算的控制,例如先括号后外边,然后总的再来一个大的框架的执行。
另外就是执行导出的命令不同,导出或者导入的信息也不一样,对比出来的结果也不一样
示例练习
1.导出当前进程到xml文件,并在另一台机器导入
1 2 3 4
| # 1.导出当前进程到xml文件 Get-Process | Export-Clixml -Path C:\temp\process.xml # 2.导入xml文件到其他机器 Import-Clixml -Path C:\temp\process.xml
|
结果显示

对比不不同机器的进程
1 2
| #对比不同的机器的进程 diff -referenceobject (import-clixml C:\temp\process.xml) -differenceobject (get-process) -property name
|
结果显示

通过对比我们可以看出来,第一个里面有但是第二个里面没有的用小于号表示,第二个里面有的但是第一个里面没有的用大于号表示。有点像excel里面的vlookup。
比较 “ | out-file “和 “| export-files”的区别
在PowerShell中,“| out-file” 是一个命令,用于将管道(|)传递过来的数据流重定向写入到一个文件中。当你想要将命令执行的结果保存到一个文本文件时,会经常用到 Out-File 命令。例如:
Powershell
Get-Process | Out-File -FilePath “process_list.txt”
而“| export-files”并不是PowerShell的内置命令或cmdlet。在标准PowerShell环境中,并没有名为“export-files”的命令。
如果你看到或使用了类似“export-files”的命令,那可能是某个自定义脚本或第三方模块提供的功能,它可能提供了一种特定格式的数据导出方式,比如导出为CSV、JSON或其他格式。但在原生PowerShell中,若要进行类似操作,通常会使用如 Export-Csv、Export-Clixml 或 Export-PSSession 这样的cmdlet来导出数据到特定格式的文件中。
总结:
Out-File 主要是将输出的内容以文本形式保存到指定文件。
“| export-files” 并非PowerShell标准命令,若存在可能是自定义或第三方模块提供的用于导出数据的功能。在标准PowerShell中应使用具体的导出cmdlet来完成类似任务。
练习

练习答案
1.创建两个类,但是不同的文本文件,使用diff对比他们
1 2 3 4 5 6 7 8 9
| #创建文件1 "test1" | out-file C:\temp\test1.txt #创建文件2 "test2" | out-file C:\temp\test2.txt #获取两个文件内容 $test1 = Get-Content C:\temp\test1.txt $test2 = Get-Content C:\temp\test2.txt 比较两个文件内容 diff -referenceobject $test1 -differenceobject $test2
|

2.在控制台运行“get-service | export-csv services.csv | out-file”会发生什么?
1 2 3
| #在控制台运行“get-service | export-csv services.csv | out-file"会发生什么? get-service | export-csv services.csv | out-file
|

3.除了获取一个或多个服务及以管道方式传输到”stop-service”之外,“stop-service”服务还提供了其他什么方式让你指定服务或停止服务?有什么方式可以在不使用“get-service”的前提下停止一个服务?
1 2 3 4
| #查询stop-service命令的参数 get-help stop-service -full #停止服务 stop-service -name "winlogon"
|

4.如何创建一个竖线分割符文件替代一个都好分隔符(CSV)文件?你可以依旧使用“export-CSV”命令,但是应该使用什么参数?
1
| get-service | export-csv c:\temp\services.csv -delimiter "|"
|

这里需要使用管理员来运行powershell,使用参数“-delimiter”来控制使用竖线分割符
5.可以在已导出的CSV文件头部忽略#命令行吗?这一行通常包含了类型信息,但是如果你想从一个特定文件中获取并忽略时要怎么做?
1 2
| #使用带有-notypeinformation参数的export-csv命令。 get-service | export-csv c:\temp\services.csv -notypeinformation
|

6.“export-clixml”和“export-csv”都可以通过创建并覆盖文件来修改系统,你可以用什么参数来阻止他们覆盖现有文件?还有什么参数可以在你输出文件前提醒并请求确认?
1 2 3 4
| #阻止导出文件覆盖现有文件 get-service | export-clixml c:\temp\services.xml -noclobber #输出文件前请求确认 get-service | export-csv c:\temp\services.csv -confirm
|


7.windows维护少数局部配置,包括一个默认分隔符列表。在美国系统中,分隔符是逗号。你如何让“export-csv”使用当前系统默认的分隔符而不是逗号?
1 2
| #使用当前系统默认的分隔符 get-service | export-csv c:\temp\services.csv -useCulture
|
