function Obter-Usuarios { $caminhoUsuarios = "C:\Users" Get-ChildItem $caminhoUsuarios -Directory | ForEach-Object { $nome = $_.Name $perfil = (Get-WmiObject -Class Win32_UserProfile | Where-Object { $_.LocalPath -eq "$caminhoUsuarios\$nome" }) if ($perfil) { [PSCustomObject]@{ Nome = $nome Caminho = $perfil.LocalPath SID = $perfil.SID Tipo = if ($perfil.RoamingConfigured) { "Roaming" } else { "Local" } } } } } function Obter-Discos { Get-PSDrive -PSProvider FileSystem | Where-Object { $_.Free -gt 0 } | ForEach-Object { [PSCustomObject]@{ Nome = $_.Name Caminho = "$($_.Root)" } } } function Mostrar-BarraProgresso($activity, $percentComplete) { Write-Progress -Activity $activity -PercentComplete $percentComplete } function Mover-PerfilUsuario($usuario, $destino) { $origem = $usuario.Caminho $destinoCompleto = Join-Path $destino "Users\$($usuario.Nome)" Write-Host "`n🚚 Movendo perfil de $($usuario.Nome) para $destinoCompleto..." robocopy $origem $destinoCompleto /MIR /COPYALL /XJ /R:0 /W:0 | Out-Null Mostrar-BarraProgresso "Copiando arquivos..." 70 Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$($usuario.SID)" -Name "ProfileImagePath" -Value $destinoCompleto Mostrar-BarraProgresso "Atualizando registro..." 90 Corrigir-VariaveisAmbiente $usuario $destinoCompleto Mostrar-BarraProgresso "Finalizando..." 100 Start-Sleep 1 Write-Progress -Activity "ConcluĆ­do" -Completed } function Corrigir-VariaveisAmbiente($usuario, $novoCaminho) { $antigoCaminho = $usuario.Caminho Write-Host "`nšŸ” Verificando variĆ”veis de ambiente..." $userVars = [System.Environment]::GetEnvironmentVariables("User") $sysVars = [System.Environment]::GetEnvironmentVariables("Machine") foreach ($var in $userVars.Keys) { if ($userVars[$var] -like "$antigoCaminho*") { $novoValor = $userVars[$var] -replace [regex]::Escape($antigoCaminho), $novoCaminho [System.Environment]::SetEnvironmentVariable($var, $novoValor, "User") Write-Host "šŸ” VariĆ”vel de usuĆ”rio '$var' atualizada." } } foreach ($var in $sysVars.Keys) { if ($sysVars[$var] -like "$antigoCaminho*") { $novoValor = $sysVars[$var] -replace [regex]::Escape($antigoCaminho), $novoCaminho [System.Environment]::SetEnvironmentVariable($var, $novoValor, "Machine") Write-Host "šŸ” VariĆ”vel de sistema '$var' atualizada." } } Write-Host "āœ… Verificação de variĆ”veis concluĆ­da." } # Loop principal do { Clear-Host Write-Host "šŸ§‘ā€šŸ’» Seleção de UsuĆ”rio" $usuarios = Obter-Usuarios for ($i = 0; $i -lt $usuarios.Count; $i++) { Write-Host "[$i] $($usuarios[$i].Nome) ($($usuarios[$i].Tipo))" } $idUsuario = Read-Host "`nDigite o nĆŗmero do usuĆ”rio desejado" if ($usuarios[$idUsuario].Tipo -eq "Roaming") { Write-Host "`nāŒ O usuĆ”rio selecionado Ć© do tipo Roaming e nĆ£o pode ser movido automaticamente." Pause continue } $usuarioSelecionado = $usuarios[$idUsuario] Clear-Host Write-Host "šŸ’½ Seleção de Disco" $discos = Obter-Discos for ($j = 0; $j -lt $discos.Count; $j++) { Write-Host "[$j] $($discos[$j].Caminho)" } $idDisco = Read-Host "`nDigite o nĆŗmero do disco desejado" $discoSelecionado = $discos[$idDisco] Clear-Host Write-Host "āš™ļø Resumo da Ação:" Write-Host "UsuĆ”rio: $($usuarioSelecionado.Nome)" Write-Host "Tipo: $($usuarioSelecionado.Tipo)" Write-Host "Origem: $($usuarioSelecionado.Caminho)" Write-Host "Destino: $($discoSelecionado.Caminho)Users\$($usuarioSelecionado.Nome)" $confirmar = Read-Host "`nDeseja mover o usuĆ”rio para o novo disco? (Y/N)" if ($confirmar -eq "Y") { Mover-PerfilUsuario $usuarioSelecionado $discoSelecionado.Caminho Write-Host "`nāœ… Perfil movido com sucesso para $($discoSelecionado.Caminho)Users\$($usuarioSelecionado.Nome)" } else { Write-Host "āŒ Ação cancelada pelo usuĆ”rio." } $repetir = Read-Host "`nDeseja mover outro perfil? (Y/N)" } while ($repetir -eq "Y") Write-Host "`n🟢 Script finalizado."