none
Import-mailbox из списка pst файлов. RRS feed

  • Вопрос

  • Долго практики не было, опять трудно дается, даже старые работы - гляжу и ничего не понимаю, надеюсь теперь все исправится! :)

    Задача:

    Есть 500 файлов .PST, называнные в честь пользователей другого домена -

    n1.lastname1.pst

    n2.lastname2.pst

    ...

    Есть пользователи текущего домена, среди которых есть и созданные от мигрируемого домена.

    Нужно сравнить имена pst с аккаунтами AD, в случае нахождения импортировать в mailbox, в другом случае - выписывать не найденные имена .pst в текстовый файл, например.

    До чего дошел:

    $users=(get-aduser -Filter *)
    $pst=Get-ChildItem d:\pst\ -file
    foreach($p in $pst)
    {$p.Name -replace ".pst", "" |Out-File d:\users.txt -Append}
    $ps= Get-Content d:\users.txt
    Start-Sleep -s 5
    foreach ($u in $users){
    foreach ($p in $ps)
    {
    if ($u.sAMAccountName -eq $p)
    #Сдесь для теста, пока просто отображаю найденные имена
    {
    Write-Host "$u.sAMAccountName"
    }
    }
    {
    #Тут совсем мрак, но логика ясна...
    else {
    write-host "$p not found" |out-file d:\notfound.txt -append}}}
    

    В итоге, совсем уже запутался... :)

    $users=(get-aduser -Filter *)
    $pst=Get-ChildItem d:\pst\ -file
    foreach($p in $pst)
    {$p.Name -replace ".pst", "" |Out-File d:\users.txt -Append}
    $ps= Get-Content d:\users.txt
    Start-Sleep -s 5
    foreach ($u in $users){
    foreach ($p in $ps)
    {
    if ($u.sAMAccountName -eq $p)
    
    {
    New-MailboxImportRequest -Mailbox $u.sAMAccountName -FilePath d:\pst\$u.sAMAccountName.PST
    }
    }
    {
    else {
    write-host "$p not found" |out-file d:\notfound.txt -append}}}

    Хочу поговорить об этом! :)

    21 февраля 2017 г. 15:59

Ответы

  • PS (STA) > gi e.ivanov.pst | ft name,basename
    
    Name         BaseName
    ----         --------
    e.ivanov.pst e.ivanov

    BaseName - имя объекта без расширения

    if($user) - тут это типа not $null? - Да

    Замените строчку:

    New-MailboxImportRequest -Mailbox $user -FilePath $path

    на

    New-MailboxImportRequest -Mailbox $user[0] -FilePath $path

    • Помечено в качестве ответа Oleg.A 22 февраля 2017 г. 8:10
    22 февраля 2017 г. 7:01
    Отвечающий

Все ответы

  • С учетом, что файлы формата SamAccountName.pst и SamAccountName = Alias. Пользователь обладает ролью Mailbox Import Export и путь к файлу формата UNC.

    $users = Get-ADUser -Filter * | Foreach {$_.SamAccountName}
    Get-ChildItem d:\pst\*.pst -file | Foreach {
    	$path = "\\$env:ComputerName\" + ($_.FullName -replace ":","$")
    	$user = $users -match $_.BaseName
    	if($user) {
    		New-MailboxImportRequest -Mailbox $user -FilePath $path
    	}
    	else {
    		$_.FullName | Out-File missing.txt -Append
    	}
    }

    21 февраля 2017 г. 16:19
    Отвечающий
  • >>SamAccountName.pst и SamAccountName = Alias

    Да, я так попытался объяснить, что:

    name(1букв).lastname(фамилия).pst

    >>ролью Mailbox Import Export

    Абсолютно!

    >>и путь к файлу формата UNC.

    Вы Казун, сделали его ДА! :)

    Cannot process argument transformation on parameter 'Mailbox'. Cannot convert the "System.Collections.ArrayList" value
    of type "System.Collections.ArrayList" to type "Microsoft.Exchange.Configuration.Tasks.MailboxOrMailUserIdParameter".
        + CategoryInfo          : InvalidData: (:) [New-MailboxImportRequest], ParameterBindin...mationException
        + FullyQualifiedErrorId : ParameterArgumentTransformationError,New-MailboxImportRequest
        + PSComputerName        : mx01

    Все более менее, понятно, кроме-

    $user = $users -match $_.BaseName
    Откуда $_.BaseName? 

    В Get-Child нет такого параметра, в Adusers так же?!

    if($user) - тут это типа not $null?


    22 февраля 2017 г. 6:45
  • PS (STA) > gi e.ivanov.pst | ft name,basename
    
    Name         BaseName
    ----         --------
    e.ivanov.pst e.ivanov

    BaseName - имя объекта без расширения

    if($user) - тут это типа not $null? - Да

    Замените строчку:

    New-MailboxImportRequest -Mailbox $user -FilePath $path

    на

    New-MailboxImportRequest -Mailbox $user[0] -FilePath $path

    • Помечено в качестве ответа Oleg.A 22 февраля 2017 г. 8:10
    22 февраля 2017 г. 7:01
    Отвечающий
  • >>BaseName - имя объекта без расширения

    Вообще провал, я полдня пытался Split`ануть все до .pst... :)

    Большое Вам спасибо Козун, только Вы! 

     

    22 февраля 2017 г. 8:09