【问题标题】:How to limit recursive verbose output?如何限制递归详细输出?
【发布时间】:2019-04-05 14:50:31
【问题描述】:

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

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

对于每一个项目,我都会收到大量冗长的消息

VERBOSE:对目标执行“删除目录”操作 \name1\子项

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

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

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

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

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

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

【问题讨论】:

    标签: powershell


    【解决方案1】:

    -Verbose 添加到Remove-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
    

    【讨论】:

    • 这很好:D
    猜你喜欢
    • 2021-02-24
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2015-05-20
    相关资源
    最近更新 更多