2016-03-03 5 views
0

Я собрал сценарий Robocopy для резервного копирования данных, но проблема, с которой я столкнулась, - это чтение родительской папки и попытка выполнить фильтры robocopy и ошибку. то, что я хотел бы сделать, это сделать отступ один и начать копировать подпапку и использовать фильтр там. структура файлаPowershell Чтение внутренней папки

Users \ тим Джоунс, сэм Адамс

Я просто хочу папка тима Джоунса и пользовательские папки Адамса с сэм фильтром Robocopy добавили к нему. любая помощь приветствуется

$Comp = Read-Host 'Please enter a computer name or IP' 

do{ 
If (Test-Connection $Comp -quiet -Count 1) { 
Write-host 'The host responded' -ForegroundColor "yellow" 
Read-Host 'Press any key to continue...' | Out-Null 
$ping = "ture" 
Clear-Host 

Get-WmiObject -ComputerName $Comp -class Win32_NetworkLoginProfile | Select- Object Name,@{label='LastLogon';expression={$_.ConvertToDateTime($_.LastLogon)}} 

New-Item -Path \\skyzone\t$\sky\ -ItemType directory 

$SourcePath = "\\$Comp\C$\Users\"; 

$TargetPath = "\\skyzone\t$\sky"; 

#Users libraries 
$PicturesLibrary = ("\Pictures"); 
$Downloads = ("\Downloads"); 
$Favorites = ("\Favorites"); 
$Documents = ("\Documents"); 
$Desktop = ("\Desktop"); 
$Video = ("\Videos"); 

#User Outlook files and logs 
$Outlook = ("\AppData\Local\Microsoft\Outlook") 

$argsFromFolders = ("$SourcePath\$PicturesLibrary","$SourcePath\$Downloads","$SourcePath\$Favorites","$SourcePath\$Documents","$SourcePath\$Desktop","$SourcePath\$Video" ,"$SourcePath\$Outlook"); 
$argsToFolders = ("$TargetPath\Pictures","$TargetPath\Downloads","$TargetPath\Favorites","$TargetPath\Documents","$TargetPath\Desktop","$TargetPath\Videos","$TargetPath\Outlook"); 


For ($i=0; $i -lt $argsFromFolders.Length; $i++) { 
Write-Host -ForegroundColor Green "Processing" $argsFromFolders[$i] "To" $argsToFolders[$i]; 


robocopy $argsFromFolders[$i] $argsToFolders[$i] *.* /MT:16 /XJ *.pst /R:3 /W:1 /NP /e /xf *.vmdk *.vmem *.iso *.exe *.ost desktop.ini /tee /Log+: 

} 

ответ

0

Ваш вопрос непонятен и образец неполный. Вы ссылаетесь на $user, который никогда не был создан и здесь нет robocopy. Из-за этого я не могу дать вам полное решение.

Взгляните на этот пример исходного тропу в вашем коде:

$SourcePath = "\\localhost\C$\Users\"; 
$PicturesLibrary = ("\Pictures"); 
"$SourcePath\$PicturesLibrary" 

#Output 
\\localhost\C$\Users\\\Pictures 
  1. Есть слишком много обратных слэша в месте, где вы присоединились две строки. Удалите их из переменных или использовать Join-Path

    $SourcePath = "\\localhost\C$\Users\" 
    $PicturesLibrary = "\Pictures" 
    Join-Path $SourcePath $PicturesLibrary 
    
    #Output 
    \\localhost\C$\Users\Pictures 
    

    Или

    $SourcePath = "\\localhost\C$\Users" 
    $PicturesLibrary = "Pictures" 
    "$SourcePath\$PicturesLibrary" 
    
    #Output 
    \\localhost\C$\Users\Pictures 
    
  2. Имя пользователя, отсутствует. Вы должны использовать Get-Childitem на $sourcePath, чтобы получить список пользователей на первом месте и пропустить их.

    Пример:

    $SourcePath = "\\localhost\C$\Users\" 
    Get-ChildItem -Path $SourcePath | 
    #Get folders only... And exlude public? 
    Where-Object { $_.PSIsContainer -and $_.Name -ne 'Public' } | 
    ForEach-Object { 
        #Code to run for each user-folder 
        $PicturesLibrary = ("Pictures") 
        Join-Path $_.FullName $PicturesLibrary 
    } 
    \\localhost\C$\Users\Default.migrated\Pictures 
    \\localhost\C$\Users\defaultuser0\Pictures 
    \\localhost\C$\Users\frode\Pictures 
    

Обновление: Попробуйте что-то вроде этого (непроверенные).

$Comp = Read-Host 'Please enter a computer name or IP' 

If (Test-Connection $Comp -quiet -Count 1) { 

    Write-host 'The host responded' -ForegroundColor "yellow" 
    Read-Host 'Press any key to continue...' | Out-Null 
    Clear-Host 

    Get-WmiObject -ComputerName $Comp -class Win32_NetworkLoginProfile | Select- Object Name,@{label='LastLogon';expression={$_.ConvertToDateTime($_.LastLogon)}} 

    $TargetPath = '\\skyzone\t$\sky' 
    if(-not (Test-Path -Path $TargetPath -PathType Container)) { New-Item -Path $TargetPath -ItemType Directory | Out-Null } 

    $Folderlist = ("Pictures","Downloads","Favorites","Documents","Desktop","Videos","Outlook"); 

    Get-ChildItem -Path "\\$Comp\C$\Users\" | 
    #Get folders only... And exclude public? 
    Where-Object { $_.PSIsContainer -and $_.Name -ne 'Public' } | 
    ForEach-Object { 
     $user = $_.Name 

     foreach ($folder in $Folderlist) { 
      $from = Join-Path $_.FullName $folder 
      $to = Join-Path $TargetPath "$user\$folder" 

      Write-Host -ForegroundColor Green "Processing '$from' To '$to'" 
      robocopy $from $to *.* /MT:16 /XJ *.pst /R:3 /W:1 /NP /e /xf *.vmdk *.vmem *.iso *.exe *.ost desktop.ini /tee /Log+:\\apgrwkate1090f\t$\dren\$user\backup.txt 
     } 
    } 
} 
+0

благодарит за ответ. У меня возникли проблемы с получением полного кода для публикации, поэтому я всего лишь половину кода. позвольте мне попробовать еще раз – user2457713

+0

Я добавил сброс кода. пример 2 идет по линии того, что я пытаюсь сделать в этот момент. Я хотел бы, чтобы сценарий пересекал всех пользователей в «папке пользователей», применяя фильтр robocopy и помещая результат на сервер. – user2457713

+0

Образец еще не завершен. '$ user' и' $ outlook' до сих пор не определены, а ваши скриптовые блоки не закрыты. Этот вопрос также слишком широк. См. Обновление. Это последнее обновление от меня, поскольку этот вопрос должен был быть закрыт. –

Смежные вопросы