正在复制脚本,需要关于添加循环的建议



我创建了以下脚本,以使我的同事更容易复制数据,但我想创建一个循环,这样它就会询问我的同事是否希望复制另一个用户配置文件数据。什么命令可以帮助我实现这一点?

$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 $SourceUsers$SourceUserDesktop $DestinationUsers$DestinationUserDesktop /E
Robocopy.exe $SourceUsers$SourceUserDocuments $DestinationUsers$DestinationUserDocuments /E
Robocopy.exe $SourceUsers$SourceUserDownloads $DestinationUsers$DestinationUserDownloads /E
Robocopy.exe $SourceUsers$SourceUserFavourites $DestinationUsers$DestinationUserFavourites /E
Robocopy.exe $SourceUsers$SourceUserPictures $DestinationUsers$DestinationUserPictures /E
Robocopy.exe $SourceUsers$SourceUserVideos $DestinationUsers$DestinationUserVideos /E
Robocopy.exe $SourceUsers$SourceUserAppdataLocalGoogle $DestinationUsers$DestinationUserAppdataLocalGoogle /E
Robocopy.exe $SourceUsers$SourceUserAppdataRoamingMicrosoftSignitures $DestinationUsers$DestinationUserAppdataRoamingMicrosoftSignitures /E
}
#Copying the Sage data including Backups
$reply = Read-Host -Prompt "Does the user use Sage? [Y/N]"
if ( $reply -match "[yY]" ) { 
Robocopy.exe $SourceSageBackups $DestinationSageBackups /E
Robocopy.exe $SourceProgramDataSage $DestinationProgramDataSage /E
} 
$EndScript = Read-Host -Prompt "Do you want to close this screen? [Y/N]"
if ( $EndScript -match "[nN]" ) {
Exit
}

谢谢!

您可以使用while而不是if,并在while语句末尾分配$Start

$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'
'AppdataLocalGoogle'
'AppdataRoamingMicrosoftSignitures'
)
$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 $SourceUsers$SourceUser $Location) (Join-Path $DestinationUsers$DestinationUser $Location) /E
}
$Start = Read-Host "Do you want to copy another user profile?"
}

我使用了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 $SourceUsers$SourceUserDesktop $DestinationUsers$DestinationUserDesktop /E
Robocopy.exe $SourceUsers$SourceUserDocuments $DestinationUsers$DestinationUserDocuments /E
Robocopy.exe $SourceUsers$SourceUserDownloads $DestinationUsers$DestinationUserDownloads /E
Robocopy.exe $SourceUsers$SourceUserFavourites $DestinationUsers$DestinationUserFavourites /E
Robocopy.exe $SourceUsers$SourceUserPictures $DestinationUsers$DestinationUserPictures /E
Robocopy.exe $SourceUsers$SourceUserVideos $DestinationUsers$DestinationUserVideos /E
Robocopy.exe $SourceUsers$SourceUserAppdataLocalGoogle $DestinationUsers$DestinationUserAppdataLocalGoogle /E
Robocopy.exe $SourceUsers$SourceUserAppdataRoamingMicrosoftSignitures $DestinationUsers$DestinationUserAppdataRoamingMicrosoftSignitures /E
}
#Copying the Sage data including Backups
$reply = Read-Host -Prompt "Does the user use Sage? [Y/N]"
if ( $reply -match "[yY]" ) { 
Robocopy.exe $SourceSageBackups $DestinationSageBackups /E
Robocopy.exe $SourceProgramDataSage $DestinationProgramDataSage /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作为你的源和用户名。

最新更新