我有以下脚本可以远程删除文件夹/文件
$Directory = "E:\Data"
Invoke-Command -Computer $Server -ScriptBlock {
param ($dir, $name)
$f = Get-ChildItem -Path $dir | Where {$_.Name -Match "$name"}
If ($f) {
$f | Foreach {
Remove-Item $_ -confirm:$false -Recurse -Verbose
}
}
else {
Write-Verbose "No file found"
}
} -ArgumentList $Directory, $DB
由于某种原因,它尝试在C:\users\documents
中查找文件……尽管我在E:\Data
处明确定义了目录参数
找不到路径'C:\ Users \ Documents \ file.3.db',因为它没有 存在。
因此file.3.db
实际上存在于E:\Data
上……但是以某种方式将其与C:\
目录合并了……该文件不存在并且输出了该错误消息。我很困惑那是怎么回事
编辑: 下面的代码工作正常,但是我将其更新为上面的代码,因为我想要文件检查...尽管现在这使代码不再起作用:
Invoke-Command -Computer $Server -ScriptBlock {
param ($dir, $name)
Get-ChildItem -Path $dir |
Where {$_.Name -Match "$name"} |
Remove-Item -confirm:$false -Recurse -Verbose
} -ArgumentList $Directory, $DB
答案 0 :(得分:2)
您可以在本地调试所有调试程序,然后查看问题。通常,您还需要选择带有-ExpandProperty
的全名。
$Directory = "d:\temp"
Invoke-Command -Computer $Server -ScriptBlock {
param ($dir, $name)
Write-Output "dir='$dir', name='$name'"
$f = Get-ChildItem -Path $dir | Where {$_.Name -Match $name} | Select -ExpandProperty FullName
if ($f) {
$f | Foreach {
Remove-Item $_ -confirm:$false -Verbose -WhatIf
}
}
else {
Write-Verbose "No file found"
}
} -ArgumentList $Directory, "test*"
注意:我在Remove-Item调用中添加了-WhatIf
进行测试,因此没有删除计算机中的任何数据。我还删除了-Recurse
,因为这对我来说毫无意义...但是您当然可以将其重新添加到我的测试代码中。
据此,我认为您可以使最终解决方案正常工作。