2015-01-26 1 views
1

수행 할 작업 : 프로파일을 삭제하기 전에 사용자 프로필의 내용을 백업과 다른 위치로 복사하십시오. 파일 복사에서 연결 지점을 제외하십시오.

어떻게 그것을 할 노력하고있어 : 연결 지점을 제외하는 방법은 어떤 종류가 있습니까 -path 프로파일 이름

-recurse 복사 항목을 가지고있는 PowerShell을 사용합니까?

물론 연결 지점에서 이상한 물건을 얻습니다. 나는 최선의 일은 접합점을 포함한 모든 것을 복사하는 것이라고 생각하지만, 이것을 작동시키기 위해 그들을 제외시켜야한다고하더라도, 나는 자주 그렇게하지 않을 것이기 때문에 프로필을 복원 할 때 조심스럽게 그 자리에 남겨 둘 수있다. 잘하면 결코). 어쨌든, 필자는 프로파일의 루트에서 찾을 수있는 모든 연결 지점을 제외하고 이름을 지정하지만 appdata \ local \ application 데이터와 같은 하위 연결 지점이 있습니다. 폴더 이름이 너무 커질 때까지 루프에서 복사하는 것이 실제로 성공합니다. 큰 실패. 어쨌든 -filter {$ _. attributes -notmatch "ReparsePoint"}와 같은 일을 할 수 있다면 정말 좋겠지 만 필터는 파일/폴더 이름에 대한 문자열로만 작동합니다. Get-ChildItem -path profileLocation을 사용하면 -force를 사용해야하거나 숨겨진/시스템 파일을 놓치게됩니다. 그러나 그것은 또한이 명령으로 읽을 수없는 동일한 접합 점을 얻고 오류가 발생하기 전에 내가 Where-Object 파이프와 pipe to copy-item으로 필터링 할 수 있다는 것을 의미합니다. 또한, 나는 그 방법이 정말로 느릴 것이라고 생각하고있다. 그래서, 유일한 옵션처럼 보이는 것은 -exclude를 사용하고 모든 하위 폴더 접합점을 입력하는 것입니다. 더 간단하지 않은가?

Powershell 명령을 포기하고 Robocopy.exe를 사용해야합니까?

+0

예, 이런 종류의 작업에 대해 'robocopy'가 더 나은 도구입니다. –

답변

0

확실히 robocopy로 간단합니다. PS로 할 수있는 일은 win32_volume (드라이브 문자가없는 볼륨 검색)에서 마운트 포인트 목록을 얻는 것입니다. 그런 다음 해당 이름과 일치하는 경로가있는 파일을 제외 할 수 있습니다. 다음과 같은 것이 있습니다 :

$exclude=gwmi win32_volume |?{$_.driveletter -eq $null} |select -expand name 
ls C:\mountpoints\ -Recurse |%{ 
    if($_.PSIscontainer -eq $true) {$dir=$_.fullname} 
    else {$dir=$_.directoryname} 
    if ($exclude.trim('\') -notcontains $dir){ #copy here}} 
+0

좋아요, 우리가 말하는 마운트 포인트가 아닙니다. 나는 "c : \ users \ someuser \ appdata \ local \ application data"와 다른 폴더 (이 경우에는 "C : \ Users \ someuser \ AppData \ Local")를 가리키는 유사한 폴더를 말한다. 너희들이 제안한대로, 나는 Robocopy를 사용하고있는 것처럼 보인다. – Roman

관련 문제