我是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)
为什么$ _不返回整个对象,它只是打印文件的名称?
请有人请解释我.
$_返回整个对象,但是Write-Host需要一个字符串,因此.ToString()在该对象上调用该方法.在的情况下,System.IO.FileInfo它ToString()被覆盖到输出文件的名称.
试试看,亲眼看看:
Get-ChildItem | %{Write-Host $_.ToString()}
Get-ChildItem | %{Write-Host $_.GetType()}
Get-ChildItem | %{Write-Host $_.Mode}