如何限制递归详细输出?

时间:2019-04-05 14:50:31

标签: powershell

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

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 \ subitem

     

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

     

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

     

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

我能做到这一点,以便它只在文件夹级别上打印详细信息,而不是为每个子项目打印吗?本质上,我只想要这样的输出:

  

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

     

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

1 个答案:

答案 0 :(得分:1)

-Verbose添加到Remove-Item总是会导致它列出要删除的每个项目(即,这是Verbose输出的要点。这是打开或关闭的消防水带)。

如果需要(不一定要减少日志记录,但要过滤日志记录),那么唯一的实际选择是删除-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