在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