在Powershell中没有换行的写输出?

时间:2016-11-08 03:27:34

标签: powershell

我正在编写一个检查目录是否存在的小脚本,如果存在则删除它们。我正在尝试提供信息输出,因此我想在删除文件夹时输出确认信息:

foreach ($e in $directoriesToRemove)
    {
        Write-Output "Deleting $e`..."
        Remove-Item $e -recurse
        Write-Output "Done"
    }

这个的输出是:

Deleting C:\wherever\folder1...
Done
Deleting C:\wherever\folder2...
Done

我的目标是:

Deleting C:\wherever\folder1... Done
Deleting C:\wherever\folder2... Done

我知道Write-Host可以用-nonewline参数来实现,但我想尽可能避免使用Write-Host。

除了等到文件夹正在删除并立即写入整行之外,还有其他解决方法吗? 我发现这条线有效,但我不知道在写输出命令中放一个删除命令是安全/最佳实践:

Write-Output "Deleting $e`... $(Remove-Item $e -recurse) Done"

1 个答案:

答案 0 :(得分:3)

这是两个CmdLets之间的区别

当您想要创建一个在管道中发送数据的对象时,应该使用

Write-Output,但不一定要在屏幕上显示它。如果没有其他人首先使用它,管道最终会将其写入out-default。

当你想做相反的事情时,应该使用

Write-Host。 [console] :: WriteLine本质上就是Write-Host在幕后所做的事情

在我的理解中你的要求可以被翻译为试图连接管道中的两个字符串,它可以完成,但为什么不在这里使用Write-host?

$(foreach ($a in $animals){Write-Output "buying a $a"; Write-Output " ... done"}) | % {$action="";$i=0}{if(($i%2) -eq 0){$action=$_}else{Write-Output "$action $_"};$i++}