, 만일 oldname과 NewName으로의 헤더는 당신이 할 수 있습니다 :
이
$NameMap = import-csv .\namemap.csv
gci \\server1\profiles|?{$_.PSIsContainer}|%{
$source = $_.name
$dest = ($NameMap|?{$_.newname -match $source}|select -expandproperty oldname)
$_.MoveTo("\\Server2\Profiles\$dest")
}
를로드 할 것이다 CSV, 이전 서버 프로필의 폴더 목록을 가져오고, 각각에 대해 새 프로필 이름으로 새 서버로 이동하십시오.
CSV가 없으면 가정을해야하기 때문에 훨씬 복잡해지고 오류가 발생하기 쉽습니다. 수동으로 할 수 있습니다. 나는 모든 이전 이름이 성이며 첫 번째 이니셜이 이어지고 새 이름이 성 (도트) 성이라고 가정합니다. 그러면 목록이로드되고 새 이름을 반복하며 이전 가정에 따라 새 이름을 이전 이름과 연결하는 해시 테이블을 만듭니다. 그런 다음 이전 프로필의 폴더 목록을 가져와 해시 테이블에서 제공 한 새 프로필 이름으로 새 서버로 이동합니다.
$NameMap = @{}
$OldNames = gc oldnames.txt
$NewNames = gc newnames.txt
ForEach($Name in $NewNames){
$FindIt = "$($Name.Substring($Name.Length-1,1)).*?\.$($Name.Substring(0,$Name.Length-1))"
$NewName = $NewNames|?{$_ -match $FindIt}
$NameMap.Add($NewName,$Name)
}
GCI "\\Server1\Profiles"|?{$_.PSIsContainer}|%{$Dest = $NameMap[$_.Name];$_.MoveTo("\\Server1\Profiles\$Dest")}
편집 : 좋아, 당신은 정말 당신이 CSV로드 매핑을 일단 당신이 할 수있는, ROBOCOPY를 사용할 필요가 있다고 생각하는 경우 :
$NameMap|%{Robocopy "\\server1\profiles\$($_.oldname)","\\server2\profiles\$($_.newname)","/E","/COPYALL"}
을 아니면 만들기 - 네 - Own_Hashtable를 사용하는 경우 방법을 사용하면 다음과 같이 할 수 있습니다.
GCI "\\Server1\Profiles"|?{$_.PSIsContainer}|%{$Dest = $NameMap[$_.Name];RoboCopy $_.FullName,"\\Server1\Profiles\$Dest","/E","/COPYALL"}
이전 이름을 새 이름으로 매핑하는 것이 있습니까? 2 열 또는 일부 CSV? – TheMadTechnician