我有以下脚本,该脚本删除文件和与该名称匹配的所有文件夹。需要递归以避免确认提示。
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
答案 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