Powershell中的多个管道

4 powershell

如何在同一个项目上处理多个命令; 采取这个例子,我想显示两个文件名,最后写日期,但只有文件名显示为:

PS C:\Users\demo> ls *.zip | % { Write-Host $_.FullName }  | % { Write-Host $_.LastTimeWrite }
C:\Users\demo\archive.zip
Run Code Online (Sandbox Code Playgroud)

Mar*_*ndl 5

首先,该FileInfo财产被称为LastWriteTime- 不是LastTimeWrite.

您可以使用格式字符串,例如:

ls *.zip | % { Write-Host ("{0} {1}" -f $_.FullName, $_.LastWriteTime) }
Run Code Online (Sandbox Code Playgroud)

或者使用分号分隔命令:

ls *.zip | % { Write-Host $_.FullName; Write-Host $_.LastWriteTime }
Run Code Online (Sandbox Code Playgroud)

如果是Write-Host,您也可以编写

ls *.zip | % { Write-Host $_.FullName $_.LastWriteTime }
Run Code Online (Sandbox Code Playgroud)

您的管道无法按预期工作的原因有两方面:

  • Write-Host将输出写入主机环境(即控制台),因此没有什么可以进入下一个管道步骤.如果您需要进一步处理结果,请使用Write-OutputSelect-Object代替Write-Host.
  • 即使您没有将输出写入主机环境,管道中的下一步也不会与当前步骤相同,因为您在当前步骤中将FileInfo对象转换为字符串.