0

我需要从服务器列表(computer-list.txt)中删除文件列表(在 remove-files.txt 中)。我已经尝试了以下方法,但没有成功,我希望有人可以帮助我纠正我的错误。

$SOURCE = "C:\powershell\copy\data"
$DESTINATION = "d$\copy"
$LOG = "C:\powershell\copy\logsremote_copy.log"
$REMOVE = Get-Content C:\powershell\copy\remove-list.txt

Remove-Item $LOG -ErrorAction SilentlyContinue
$computerlist = Get-Content C:\powershell\copy\computer-list.txt

foreach ($computer in $computerlist) {
Remove-Item \\$computer\$DESTINATION\$REMOVE -Recurse}

错误


Remove-Item : Cannot find path '\\NT-xxxx-xxxx\d$\copy\File1.msi, File2.msi, File3.exe,          File4, File5.msi,' because it does not exist.
At C:\powershell\copy\REMOVE_DATA_x.ps1:13 char:12
+ Remove-Item <<<<  \\$computer\$DESTINATION\$REMOVE -Recurse}
+ CategoryInfo          : ObjectNotFound: (\\NT-xxxx-xxxxx\...-file1.msi,:String)     [Remove-Item], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand
4

1 回答 1

1

$REMOVE 是一个数组,其元素是 remove-list.txt 的每一行。在\\$computer\$DESTINATION\$REMOVE中,$REMOVE 扩展为数组元素的列表。您的代码中没有任何内容告诉 PowerShell 遍历 $REMOVE 的元素。你需要一个内循环:

foreach ($computer in $computerlist) {
  foreach ($file in $REMOVE) {
    Remove-Item "\\$computer\$DESTINATION\$file" -Recurse
  }
}

顺便说一句,究竟-Recurse打算完成什么?您是否认为这会使 Remove-Item 遍历路径末尾的文件名数组?那不是它的作用。-Recurse 开关告诉 Remove-Item 不仅要删除路径指定的项,还要删除它的所有子项。如果您在文件系统上调用 Remove-Item,您将使用 -Recurse 与目录,以删除整个子树(所有文件、子目录和子目录中的文件)。如果(如您的示例所暗示的)$REMOVE 仅包含文件而不包含目录,则不需要-Recurse。

此外,最好用双引号括起路径,以防任何文件名包含空格或特殊字符。

于 2013-06-24T17:18:24.530 回答