为什么$ _不返回完整的对象

Bun*_*Guy 3 oop powershell

我是powershell的初学者,我已经使用了几个星期,当我看到这个时,我正在考虑$ _:

Get-ChildItem应该返回目录上的文件

PS C:\Users\Edu-mat\Powershell> Get-ChildItem


    Diretório: C:\Users\Edu-mat\Powershell


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       10/08/2018     13:38              7 Test0.txt
-a----       10/08/2018     13:42              5 Test1.txt
-a----       10/08/2018     13:42              7 Test2.txt
-a----       10/08/2018     13:43              8 Test3.txt
Run Code Online (Sandbox Code Playgroud)

$ _表示管道中的当前对象.

但是当我这样做时Get-ChildItem | %{write-host $_},输出并不像预期的那样

PS C:\Users\Edu-mat\Powershell> Get-ChildItem | %{write-host $_}
Test0.txt
Test1.txt
Test2.txt
Test3.txt
Run Code Online (Sandbox Code Playgroud)

为什么$ _不返回整个对象,它只是打印文件的名称?

请有人请解释我.

And*_*ndy 7

$_返回整个对象,但是Write-Host需要一个字符串,因此.ToString()在该对象上调用该方法.在的情况下,System.IO.FileInfoToString()被覆盖到输出文件的名称.

试试看,亲眼看看:

Get-ChildItem | %{Write-Host $_.ToString()}

Get-ChildItem | %{Write-Host $_.GetType()}

Get-ChildItem | %{Write-Host $_.Mode}