2012-07-27 4 views
0

가상 서버의 휴지통에서 모든 내용을 삭제하는 Powershell 스크립트를 작성합니다. 어떤 이유로 Windows 2003 휴지통에 대한 경로를 찾는 중 오류가 발생하여 저장소의 모든 항목을 삭제하기 위해 휴지통을 찾을 수 없습니다. 나는 한 번 제대로 나는 코드가 작동해야 제대로 있도록 W2K8 휴지통에 이르기까지 모든 것을 삭제할 수있어W2K3 휴지통 내용 삭제

if($serverVersion.name -like '*2003*'){ 
$dir = "\\$server" + '\C$\recycled' 
} 
elseif($serverVersion.name -like '*2008*'){ 
$dir = "\\$server" + '\C$\$recycle.bin' 
} 

$recycleArray = @() 
foreach ($item in get-childitem -path $dir){ 
    $recycleArray += $item 
} 

for ($i = 0; $i -le $recycleArray.length; $i++){ 
    $removal = $dir + "\" + $recycleArray[$i] 
    remove-item $removal -force -recurse 
    } 

: 여기 사람이 나에게 나는이 코드 조각으로 잘못하고있는 무슨에 대한 몇 가지 조언을 줄 수 있는지 궁금 해서요 휴지통으로가는 경로를 찾을 수 있습니다.

enter image description here 또한

, 호기심,이 모든 코드를 잘라 모두 2003 년과 2 일 - 라이너를 만들 수있는 방법이 : 여기에 보는 내가 그 호기심에 대한 나타나는 오류 메시지의 사진입니다 2008 년? 이 글을 작성한 현재의 방법이 Powershell의 cmdlet을 이용하지 않고 W2K3 휴지통의 문제점을 파악한 후에는이를 개선하려고합니다.

답변

2

문제는 휴지통이 widows 서버 2003 c : \ recycler의 c : \ recycled에있는이 위치에서 발견되어 jsut 코드가 변경되어 작동해야한다는 것입니다.

이 코드를 시도하고 볼이

if($serverVersion.name -like '*2003*'){ 
$dir = "\\$server" + '\C$\recycled' 
} 
elseif($serverVersion.name -like '*2008*'){ 
$dir = "\\$server" + '\C$\$recycle.bin' 
} 


foreach ($item in get-childitem -path $dir){ 
    remove-item $item.FullName -Force -Recurse 
} 
+0

나는 코드를 업데이트했는데, 그게 경로 문제였던 것 같지만, 이제는 지정된 경로 이름이 너무 길다는 새로운 오류가 발생합니다. 왜 이런 현상이 발생했는지에 대한 아이디어가 없습니다 (이 예외가 존재하는지조차 알지 못했습니다) – Valrok

+0

코드를 편집 해보십시오. 내 게시물 – justinf

+0

에 추가 할 때마다 코드를 편집 할 때마다 경로를 다시 찾을 수없는 오래된 오류가 발생합니다. – Valrok

0

그래서 내가 호출-명령 또는 대신 UNC 경로를 사용하는 지역의 예약 된 작업과 같은 PowerShell 원격을 통해 광산을 실행하여 문제가 해결되는지, 난 그냥 모든 드라이브를 확인 2003/2008 스타일의 휴지통은 폴더가 데이터가 삭제 된 드라이브에 표시되기 때문에 휴지통에 저장됩니다.이 파일은 찾고자하는 파일과 정확히 일치하지 않을 수도 있지만 어쩌면 도움이 될 수도 있습니다.

$local_drives = Get-WmiObject Win32_LogicalDisk | Where-Object {$_.DriveType -eq 3} 
foreach ($drive in $local_drives) 
{ 
    $drive_letter = $drive.DeviceID 
    $recycle_bins_03 = $drive_letter + '\RECYCLER' 
    if (Test-Path $recycle_bins_03) 
    { 
     Get-ChildItem $recycle_bins_03 -Force | Remove-Item -Force -Recurse 
    } 
    $recycle_bins_08 = $drive_letter + '\$RECYCLE.BIN' 
    if (Test-Path $recycle_bins_08) 
    { 
     Get-ChildItem $recycle_bins_08 -Force | Remove-Item -Force -Recurse 
    } 
}