Beiträge von tray-park

    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.

    Ü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.

    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>

    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.

    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?

    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?

    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>

    Okay,


    wenn ich das Skript ausführe, bekomm ich einen Fehler angezeigt, weil alle Dateinamen hintereinander ausgegeben werden. Also so sieht die Meldung aus:


    <code>
    Fehler: Parameter 'PSTFolderPath'. Der Pfad 'D:\PST-Import\PST-Files\Migration - Kopie (2).pst Mi
    gration - Kopie (3).pst Migration - Kopie (4).pst Migration - Kopie.pst Migration-fehler.pst Migration.pst Notes Testmi
    g-1.pst Notes Testmig.pst' ist nicht vorhanden. Bei dem Pfad muss es sich um einen vorhandenen Ordner oder um eine PST-
    Datei handeln.
    + CategoryInfo : ObjectNotFound: (:) [], RecipientTaskException
    + FullyQualifiedErrorId : 62827C7A
    </code>
    Ist ja auch klar. Woher soll er wissen, dass er nach jeder abgearbeiteten Datei die nächste nehmen soll?


    Für ihn ist das doch nur eine Auflistung oder?


    Wie sag ich ihm das?

    Ich möchte eine Datei nach der anderen in dem Ordner abarbeiten. Also dachte ich, dass ich der "Dateinamen-Variable" eine PST nach der anderen mitgebe.


    Also.. Alle in einem Ordner.


    Dann brauch ich die Frage nach dem Dateinamen nicht mehr?
    <code>
    $pstdaten=Get-ChildItem -Path "D:\PST-Import\PST-Files" -Name -Include *.pst
    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\$datei" -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>
    wie gebe ich dann aber der Import-Anweisung nacheinander die ermittelten Dateinamen aus dem Ordner mit?

    Hi,


    Cool! Das funktioniert! Das Java-Programm wird aufgerufen. Nun muss nur noch meine Schleife funktionieren, die dann jede PST-Datei Stück für Stück abarbeitet.


    <code>
    # Variablen werden definiert
    $pfad=""
    $datei=""


    # Benutzer wird aufgefordert die Variable zu füllen
    $pfad = Read-Host "Bitte geben Sie den Dateipfad ein"
    $datei = Read-Host "Bitte geben Sie den Dateinamen ein"


    # Überprüfung ob der Pfad im Filesystem mit dem eingegebenen Pfad übereinstimmt
    if ((test-path $pfad))
    {
    Write-Host "Der Pfad ist okay"


    # Inhalt des Ordners und Name der PST-Datei im Filesystem werden ausgelesen und in eine weitere Variable geschrieben
    $pstdaten=Get-ChildItem -Path "D:\PST-Import\PST-Files" -Name -Include $datei
    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\$datei" -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"
    }
    # Stimmt der Pfad nicht überein, gibts ne Fehlermeldung
    }
    else
    {
    Write-Host "Ungültiger Pfad" -ForegroundColor Red
    }
    </code>


    Es muss ein Fehler in der Schleife sein. Ich kann auch nicht jedes mal den Dateinamen der PST in die Variable $datei setzen. Kann die Shell nicht irgendwie eine PST-Nach der anderen auslesen und den Dateinamen in die Variable setzen?