我需要从回收站中恢复超过40000个项目,通过GUI,它使用大量内存并且系统几乎挂起,即使我一次制作100个项目。因此,我在PowerShell中编写了以下脚本,但是我有以下错误:
VERBOSE: Performing the operation "Move Directory" on target "Item: E:\$RECYCLE.BIN\S-1-5-21-45987200-1508583899-68119131-500\$R2FXY9E Destination: E:\OneDrive - MHG - Brasil\Admin_Fin\Silvia\Silvia\Clientes\Miller Heiman Group\Embraer\Fase I\ARIBA\Embraer - Evento - Resumo_arquivos".
Move-Item : Could not find a part of the path.
At E:\Scripts\ListaRecycled.ps1:7 char:6
+ Move-Item $item.Path $CaminhoCompleto -Force -Verbose
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : WriteError: (E:\$RECYCLE.BIN...31-500\$R2FXY9E:DirectoryInfo) [Move-Item],
DirectoryNotFoundException
+ FullyQualifiedErrorId : MoveDirectoryItemIOError,Microsoft.PowerShell.Commands.MoveItemCommand
在我的代码中,我正在执行以下操作:
$Shell = New-Object -ComObject Shell.Application
$Global:Recycler = $Shell.NameSpace(0xa)
$Excluidos = $Recycler.Items()
foreach ($item in $Excluidos)
{
$CaminhoCompleto = Join-Path $Recycler.GetDetailsOf($item,1) $Recycler.GetDetailsOf($item,0)
Move-Item $item.Path $CaminhoCompleto -Force -Verbose
}
感谢。
答案 0 :(得分:2)
您正在使用未命名的位置参数。 Move-Item
将位置0的参数作为Path
参数,该参数受shell散列影响。
您通常应该使用命名参数,在这种情况下,您确实要使用-LiteralPath
而不是-Path
。
Move-Item -LiteralPath $item.Path -DestinationPath $CaminhoCompleto -Force -Verbose
答案 1 :(得分:0)
Move-Item
cmdlet不会创建文件夹路径,因此我在脚本中添加了以下内容:
if(!(Test-Path $Recycler.GetDetailsOf($item,1)))
{
New-Item -Path $Recycler.GetDetailsOf($item,1) -ItemType Directory -Force -Verbose -OutVariable +Dir
}
我发现也缺少DACL项目。然后我添加了以下内容:
$permissoes = Get-Acl $item.Path -Verbose
Move-Item -LiteralPath $item.Path -Destination $CaminhoCompleto -Verbose -ErrorVariable +Err
Set-Acl -Path $CaminhoCompleto -AclObject $permissoes -Verbose