Import-Skript

  • Hier


    <code>
    $pstdaten=Get-ChildItem -Path "D:\PST-Import\PST-Files" -Name -Include *.pst

    # Schleife führt den Importvorgang durch und startet das Archivierungsprogramm
    foreach ($i in $pstdaten)
    {
    # Postfach wird deaktiviert
    Disable-Mailbox -Identity "Migration"

    # Postfach wird aktiviert
    Enable-Mailbox -Identity "Migration"

    # PST-Datei wird importiert
    Import-Mailbox -Identity "Migration" -PSTFolderPath "D:\PST-Import\PST-Files\$pstdaten" -AllowDuplicates

    # Log-Datei wird kopiert
    Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -destination "D:\PST-Import\Logs"

    # Java-Programm wird aufgerufen
    invoke-expression -command "D:\PST-Import\archivieren.jar"
    }
    </code>

  • Hab meinen Fehler gefunden.


    Wie du sagtest, nicht die Variable $pstdaten sondern die Variable $i muss hinter -PSTFolderPath D.\PST-Import\PST-Files\


    Nun werde ich halt noch jedes Mal gefragt, ob ich die Aktion auch wirklich ausführen möchte. Kann man das umgehen, bzw immer mit Ja bestätigen?

  • Problem ist dann aber, dass das Skript nicht wartet, bis das Java-Programm fertig archiviert hat.


    Also komme ich um eine Bestätigung pro PST Datei nicht rum?

  • Das funktioniert nur mit 64Bit Versionen der PowerShell. Ich könnte es über die CMD versuchen.


    Zuerst den Teil des Skritps aufrufen der den Import-Vorgang in die Hand nimmt. Dann das Java-Programm und dann wieder von vorne.


    Die CMD wartet ja, bis ein Task geschlossen wird.

  • Hi,


    so funktionierts


    <code>
    # Java-Programm wird aufgerufen

    Invoke-Expression -Command "D:\PST-Import\archivieren.jar -$i"

    $p = Get-Process rundll32
    if ($p)
    {
    $p.WaitForExit()
    Write-Host "Der Mail-Import wurde beendet!" -ForegroundColor Yellow
    }
    else
    {
    Write-Host "Der Mail-Import wurde nicht gestartet!" -ForegroundColor Red
    }

    }
    </code>

  • Übrigens dazu:


    <code>
    # Java-Programm wird aufgerufen

    Invoke-Expression -Command "D:\PST-Import\archivieren.jar -$i"
    </code>


    Ich möchte so dem Java-Programm per Parameter den Variableninhalt mitliefern.


    Kann das funktionieren?


    Zudem wäre es noch cool, wenn man die Logdateien beim Verschiebungsvorgang, sei es vorher oder nachher, so umbenennen könnte, dass sie den selben Dateinamen wie die PST, aber eben ihre ursprüngliche Dateierweiterung beibehalten.


    Exchange legt beim Import-Vorgang 2 Dateien an. Eine XML und eine LOG. Die kopiere ich dann in einen anderen Ordner.

    • Offizieller Beitrag


    Das kann nicht nur, dass wird. Durch die doppelten Anführungszeichen werden alle Variablen mit ihrem Wert ersetzt. Dann muss nur noch das Java-Programm damit was anfangen können.


    Zitat


    Zudem wäre es noch cool, wenn man die Logdateien beim Verschiebungsvorgang, sei es vorher oder nachher, so umbenennen könnte, dass sie den selben Dateinamen wie die PST, aber eben ihre ursprüngliche Dateierweiterung beibehalten.


    Exchange legt beim Import-Vorgang 2 Dateien an. Eine XML und eine LOG. Die kopiere ich dann in einen anderen Ordner.


    -> rename-item benennt um

  • Hi,


    genau. Das weiß ich, dass man mit Rename-Item Dateien umbennen kann.


    Aber wie kann ich den Inhalt einer Variablen in den Dateinamen einbinden.


    Bei der Import-Anweisung übergebe ich ja den Inhalt der Variablen $i an die PSTFolderPath Anweisung und diese löst den Inhalt dann auf.
    <code>
    Import-Mailbox -Identity "Migration" -PSTFolderPath "D:\\PST-Import\\PST-Files\\$i" -AllowDuplicates
    </code>
    Wenn das jetzt auch in der Rename-Anweisung funktionieren würde wäre das klasse.
    <code>
    Rename-Item -Path "D:\\Microsoft\\Exchange Server\\V14\\Logging\\MigrationLogs\\*.*" -NewName "D:\\PST-Import\\PST-Files\\$i.*
    </code>
    Sodass die Logfiles dann ihre Endungen behalten und den Dateinamen der importierten PST-Datei erhalten.