Копирование скрипта, нужен совет по добавлению al oop назад - PullRequest
0 голосов
/ 09 марта 2020

Я создал следующий скрипт, чтобы моим коллегам было проще копировать данные, но я хочу создать обратно al oop, чтобы он спросил моих коллег, если они sh скопируют данные другого профиля пользователя. Какие команды помогут мне достичь этого?

$Start = Read-Host "Do you have the relevant information for the migration? {Y/N)"
if ($Start -match "[Yy]") {
    $Source = Read-Host "Source Location"
    $Destination = Read-Host "Destination Location" 
    $SourceUser = Read-Host "Source Username"
    $DestinationUser = Read-Host "Destination Username"

    Robocopy.exe $Source\Users\$SourceUser\Desktop $Destination\Users\$DestinationUser\Desktop /E
    Robocopy.exe $Source\Users\$SourceUser\Documents $Destination\Users\$DestinationUser\Documents /E
    Robocopy.exe $Source\Users\$SourceUser\Downloads $Destination\Users\$DestinationUser\Downloads /E
    Robocopy.exe $Source\Users\$SourceUser\Favourites $Destination\Users\$DestinationUser\Favourites /E
    Robocopy.exe $Source\Users\$SourceUser\Pictures $Destination\Users\$DestinationUser\Pictures /E
    Robocopy.exe $Source\Users\$SourceUser\Videos $Destination\Users\$DestinationUser\Videos /E
    Robocopy.exe $Source\Users\$SourceUser\Appdata\Local\Google $Destination\Users\$DestinationUser\Appdata\Local\Google /E
    Robocopy.exe $Source\Users\$SourceUser\Appdata\Roaming\Microsoft\Signitures $Destination\Users\$DestinationUser\Appdata\Roaming\Microsoft\Signitures /E
}

#Copying the Sage data including Backups
$reply = Read-Host -Prompt "Does the user use Sage? [Y/N]"
if ( $reply -match "[yY]" ) { 
     Robocopy.exe $Source\SageBackups $Destination\SageBackups /E
        Robocopy.exe $Source\ProgramData\Sage $Destination\ProgramData\Sage /E
} 

$EndScript = Read-Host -Prompt "Do you want to close this screen? [Y/N]"
if ( $EndScript -match "[nN]" ) {
    Exit
}

Спасибо!

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Вы можете использовать while вместо if и назначить $Start в конце вашего оператора while:

$Start = Read-Host "Do you have the relevant information for the migration? {Y/N)"
while ($Start -match "[Yy]") {
    $Source = Read-Host "Source Location"
    :
    :
    $Start = Read-Host "Do you want to copy another user profile?"
}

Кроме того, рассмотрите возможность сохранения своих местоположений в виде массива и использования Join-Path - делает вещи более читабельными и простыми в обслуживании:

$Locations = @(
    'Desktop'
    'Documents'
    'Favourites'
    'Pictures'
    'Videos'
    'Appdata\Local\Google'
    '\Appdata\Roaming\Microsoft\Signitures'
)

$Start = Read-Host "Do you have the relevant information for the migration? {Y/N)"
while ($Start -match "[Yy]") {
    $Source = Read-Host "Source Location"
    $Destination = Read-Host "Destination Location"
    $SourceUser = Read-Host "Source Username"
    $DestinationUser = Read-Host "Destination Username"

    foreach ($Location in $Locations) {
        Robocopy.exe (Join-Path $Source\Users\$SourceUser\ $Location) (Join-Path $Destination\Users\$DestinationUser\ $Location) /E
    }

    $Start = Read-Host "Do you want to copy another user profile?"
}
0 голосов
/ 09 марта 2020

Я использовал do until и поместил то, что у вас было в функцию. Функция вызывается, если пользователь говорит «Y», и программа завершает работу, если они говорят «N». После каждой копии он будет спрашивать снова и снова, хотите ли вы запустить другую копию.

function CopyProfile(){
    $Start = Read-Host "Do you have the relevant information for the migration? {Y/N)"

    if ($Start -match "[Yy]") {
    $Source = Read-Host "Source Location"
    $Destination = Read-Host "Destination Location" 
    $SourceUser = Read-Host "Source Username"
    $DestinationUser = Read-Host "Destination Username"

    Robocopy.exe $Source\Users\$SourceUser\Desktop $Destination\Users\$DestinationUser\Desktop /E
    Robocopy.exe $Source\Users\$SourceUser\Documents $Destination\Users\$DestinationUser\Documents /E
    Robocopy.exe $Source\Users\$SourceUser\Downloads $Destination\Users\$DestinationUser\Downloads /E
    Robocopy.exe $Source\Users\$SourceUser\Favourites $Destination\Users\$DestinationUser\Favourites /E
    Robocopy.exe $Source\Users\$SourceUser\Pictures $Destination\Users\$DestinationUser\Pictures /E
    Robocopy.exe $Source\Users\$SourceUser\Videos $Destination\Users\$DestinationUser\Videos /E
    Robocopy.exe $Source\Users\$SourceUser\Appdata\Local\Google $Destination\Users\$DestinationUser\Appdata\Local\Google /E
    Robocopy.exe $Source\Users\$SourceUser\Appdata\Roaming\Microsoft\Signitures $Destination\Users\$DestinationUser\Appdata\Roaming\Microsoft\Signitures /E
            }

    #Copying the Sage data including Backups
    $reply = Read-Host -Prompt "Does the user use Sage? [Y/N]"
    if ( $reply -match "[yY]" ) { 
         Robocopy.exe $Source\SageBackups $Destination\SageBackups /E
            Robocopy.exe $Source\ProgramData\Sage $Destination\ProgramData\Sage /E
    } 
}


DO{
    Write-host "Would you like to copy a profile?" -NoNewline; $run = read-host

    If($run -match '[yY]'){
        CopyProfile
    }
    else{
        exit
    }
}until($run -match '[nN]')

Я подозреваю, что вы вошли в систему как администратор и копируете "другие" профили, однако, если вы этого не сделаете, вы могли бы также используйте $env:USERPROFILE для вашего источника и имени пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...