2017-07-27 71 views
1

我需要從回收站中恢復超過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

我認爲您的箱子中有一個空白對象或者名稱不正確。我上面試過你的代碼,事實證明我有一個沒有名字的文件夾(不知道它來自哪裏),但是因爲連接路徑函數的運行方式而崩潰了。它找到了舊的路徑,試圖連接一個空白名稱,然後試圖將其移到基礎文件夾。不知道這是否也是您的問題,但值得檢查垃圾箱的內容以確保您沒有任何空白。 –

+0

您可以使用該項目的屬性來確定目的地。 '$ item.getfolder.title' – TheMadTechnician

回答

2

您正在使用位置參數,未命名。 Move-Item將位置0處的參數作爲參數Path,該參數受殼shell匹配的影響。

無論如何,您通常應該使用命名參數,在這種情況下,您確實需要使用-LiteralPath而不是-Path

Move-Item -LiteralPath $item.Path -DestinationPath $CaminhoCompleto -Force -Verbose 
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