关于PowerShell中PassThru的实际作用

时间:2022-06-01 12:38:32

在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


在我当前的环境中,如上cmdlets是支持PassThru参数的,那么这个到底有什么用呢?接下来我们可以找几个cmdlet看看用于不用的区别就清楚了。

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