在PowerShell中,我相信你一定看到过PassThru参数但是这个参数主要是做什么用的呢?其实很多人没有完全搞明白,今天我们就来看看主要是做什么用的。
在进一步了解之前,首先要让大家知道的是并不是所有的cmdlet命令都有这个PassThru参数,因为这并不是一个公共参数。
我们先来看看,在PowerShell中有哪些命令是支持PassThru这参数的,我们可以用如下命令行查看:
PS C:\windows\system32> Get-Command -CommandType cmdlet|?{$_.Definition -match 'PassThru'}
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Add-Computer 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Add-Content 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Add-History 3.0.0.0 Microsoft.PowerShell.Core
Cmdlet Add-PSSnapin 3.0.0.0 Microsoft.PowerShell.Core
Cmdlet Clear-ItemProperty 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Copy-Item 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Copy-ItemProperty 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Import-Module 3.0.0.0 Microsoft.PowerShell.Core
Cmdlet Move-Item 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Move-ItemProperty 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet New-ModuleManifest 3.0.0.0 Microsoft.PowerShell.Core
Cmdlet Pop-Location 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Push-Location 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Remove-Computer 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Remove-PSSnapin 3.0.0.0 Microsoft.PowerShell.Core
Cmdlet Rename-Computer 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Rename-Item 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Rename-ItemProperty 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Restart-Service 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Resume-Service 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Set-Content 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Set-Item 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Set-ItemProperty 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Set-Location 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Set-Service 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Start-Process 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Start-Service 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Stop-Job 3.0.0.0 Microsoft.PowerShell.Core
Cmdlet Stop-Process 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Stop-Service 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Suspend-Service 3.1.0.0 Microsoft.PowerShell.Management
PS C:\windows\system32> Rename-Item -Path D:\test.txt -NewName D:\test2.txt
如上命令我们使用Rename-Item cmdlet将D盘下的一个test文本文件重命名为test2,但是当你按回车,顺利执行完后并没有出现任何信息,除非是报错。
现在我们添加上PassThru参数试一下,你会发现该参数其实就是把执行后原本隐藏的对象信息又显示出来了。
PS C:\windows\system32> Rename-Item -Path D:\test2.txt -NewName D:\test.txt -PassThru
Directory: D:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2016/6/12 23:00 0 test.txt
我们可以在换一个命令来测试下区别,下面我们用Move-Item来删除指定路径下的文件,当我们不指定PassThru参数的时候我们会发现当命令成功顺利执行完后,并没有显示任何信息。但是,当我们添加了PassThru你会发现Console界面输出了所删除的文件的相关对象信息。
PS C:\windows\system32> Move-Item -Path D:\test.txt
PS C:\windows\system32> Move-Item -Path D:\test2.txt -PassThru
Directory: C:\windows\system32
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2016/6/12 23:05 0 test2.txt