我有以下脚本远程删除文件夹/文件
$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
您可以在本地调试所有这些并查看问题。主要是,您还需要使用-ExpandProperty
选择FullName。
$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
,因为这对我没有意义......但是你可以把它添加回我的测试代码当然。
由此,我认为您可以使您的最终解决方案正常运行。