我正在编写一个检查目录是否存在的小脚本,如果存在则删除它们。我正在尝试提供信息输出,因此我想在删除文件夹时输出确认信息:
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"
答案 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++}