首页 > 解决方案 > 如何限制递归详细输出?

问题描述

我有以下脚本可以删除与名称匹配的文件和任何文件夹。需要递归以避免确认提示。

Invoke-Command -Computer $Server -ScriptBlock { 
    param ($dir, $name)

    $f = Get-ChildItem -Path $dir | Where {$_.Name -Match "$name"}
    If ($f) {
        $f | Foreach {
            Remove-Item $_.fullname -confirm:$false -Recurse -Verbose 
        }
    }
    else {
        Write-Verbose "No file found"
    }
} -ArgumentList $Directory, $DB

我收到大量冗长的消息,其中每一项都说

详细:对目标 \name1\subitem 执行“删除目录”操作

详细:对目标 \name1\subitem1 执行“删除目录”操作

详细:对目标 \name1\subitem2 执行“删除目录”操作

详细:对目标 \name1.db 执行“删除目录”操作

我可以让它只在文件夹级别打印详细信息,而不是为每个子项打印吗?基本上我只想要这样的输出:

详细:对目标 \name1 执行“删除目录”操作

详细:对目标 \name1.db 执行“删除目录”操作

标签: powershell

解决方案


添加-VerboseRemove-Item将始终导致它列出它正在删除的每个项目(即,这是详细输出的重点。它是一个打开或关闭的消防水带)。

如果您愿意,不一定要减少日志记录,而是过滤日志记录,那么唯一真正的选择是删除-Verbose并自己做。

例如:

Invoke-Command -Computer $Server -ScriptBlock { 
    param ($dir, $name)

    $f = Get-ChildItem -Path $dir | Where {$_.Name -Match "$name"}
    If ($f) {
        $f | Foreach {
            #Check to see if it is a folder
            if($_.PSIsContainer)
            {
                Write-Host "Removing Directory: $($_.FullName)"
            }
            Remove-Item $_.fullname -confirm:$false -Recurse
        }
    }
    else {
        Write-Verbose "No file found"
    }
} -ArgumentList $Directory, $DB

推荐阅读