tray-park
Goto Top

PowerShell Inhalt in Textdatei umlenken

Windows Server 2008 Enterprise R2
Exchange 2010

Hi,

ich importiere gerade ein paar PST Dateieien in ein Postfach.

 Import-Mailbox -Identity Migration -PSTFolderPath "D:\PST-Import\PST01.pst" -AllowDuplicates   

Dann holt unsere E-Mail Archivierungssoftware die Mails ab und löscht sie.

Danach wird wieder eine PST imporiert . . . usw. . . .


Nun möchte, dass die PowerShell mir ein Logfile ausgibt.

Als Batch würde ich einfach in eine Datei umlenken

Ping 10.10.10.10 >> "test-ext"  

aber in der Shell bekomm ich das Ergebnis des Imports nicht in eine Textdatei umgelenkt.

Wie kann ich mir so ein Logfile von der Shell erstellen lassen?

Freue mich über jede Rückmledung.

Grüße


Tray

Content-Key: 144791

Url: https://administrator.de/contentid/144791

Printed on: April 24, 2024 at 20:04 o'clock

Member: Miyamoto
Miyamoto Jun 14, 2010 at 12:26:10 (UTC)
Goto Top
Hi,

Das kannst du so machen
Ping 10.10.10.10 | out-file -filepath "d:\ping.txt" -encoding Default -Append  

Gruß Miyamoto
Member: tray-park
tray-park Jun 14, 2010 at 12:38:04 (UTC)
Goto Top
Cool. Dankeschön.

Gibt es auch eine Möglichkei für jede importierte PST ein Logfile zu erstellen?

Oder kann man vielleicht sogar eine Logdatei erstellen, welche erweitert wird?

Ich möchte den PST Import nämlich etwas automatisieren, da es mir zu lästig ist jede der knapp 1000 einzeln zu importieren.

Grüße

Tray
Member: Miyamoto
Miyamoto Jun 14, 2010 at 13:50:47 (UTC)
Goto Top
Hi,
mit dem Befehl den ich dir oben gegeben habe wir automatisch die Datei erweitert.


Du importierst doch die PST Dateien mit einer Schleife oder ????
Innerhalb der Schleife musst du dann einfach die Log Datei erstellen, das machst du wie oben nur das du im Dateinamen eine Variable drin hast (z.B. ein Zahler),
so wird pro importierte PST Datei ein Log Datei erstellt.

In diesem Beispiel werden 5 Dateien angelegt in der das Ergebnis von ping an heise.de hineingeschrieben werden.
for($i=1;$i -le 5;$i++){

Ping www.heise.de | out-file -filepath "d:\ping$i.txt" -encoding Default -Append  

}
Du müsstest es nur so umbauen das die liste der zu importierenden Dateien durchlaufen wird.

Gruß Miyamoto
Member: tray-park
tray-park Jun 14, 2010 at 14:02:29 (UTC)
Goto Top
Ne Schleife zu schreiben ist ne gute Idee.

Das Problem dabei ist, dass unsere Entwickler noch mit Java dazwischen funken.

Die Schritte des Import-Vorangs sollen so sein.

1. Import des Postfachs mit PowerShell
2. Erstellen des Logfiles mit PowerShell

3. Import der Mails mit Java-Programm in Archivierungssystem
4. Löschen der Mails mit Java-Programm

5. Deaktivieren des Postfachs mit PowerShell
6. Erstellen eines neuen Postfachs mit PowerShell

Und weil ich bloß Schritt 1,2,4 und 6 mit der PowerShell realisieren kann, ist das Automatisieren des Vorgangs noch etwas problematisch.

Zu all dem sollen auch die XML Files die in den Loggin-Ordner des Exchange geschrieben werden kopiert werden.

Das sollte ja ein xcopy reichen?
Member: Miyamoto
Miyamoto Jun 14, 2010 at 14:25:20 (UTC)
Goto Top
wie läuft den das JAVA Programm ab???
muss man da eingaben machen oder werden nur Parameter übergeben??
Member: tray-park
tray-park Jun 14, 2010 at 14:50:07 (UTC)
Goto Top
Es werden nur Parameter an das ShellSkript übergeben

# Auto-Migration.ps1
Disable-Mailbox -Identity "Migration"  
Enable-Mailbox -Identity "Migration"  
# Hier übergibt später das Java-Programm den Dateinamen
set /P w=
Import-Mailbox -Identity "Migration" -PSTFolderPath "D:\PST-Import\%w% -AllowDuplicates  
Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -destination "D:\PST-Import\XML"  

So sieht es bisher aus.

Variablen scheint man nicht mehr so zu setzen wie zu Batch-Zeiten. Ich möchte hier erst einmal, dass eine Eingabe von der Shell verlangt wird,
in welche ich dann den Dateinamen der PST-Datei angebe.

Später übernimmt das das Java-Programm.

Wie setz ich denn hier die Variable?
Member: Miyamoto
Miyamoto Jun 14, 2010, updated at Oct 18, 2012 at 16:42:31 (UTC)
Goto Top
eine frage hast du schon mal mit Powershell gearbeitet????
du kannst dir mal diesen Artikel durchlesen in dem findest du die Grund legenden Sachen von Powershell
Klick mich

Eine Variable erstellst du so:
$var = "Inhalt"  
Member: tray-park
tray-park Jun 14, 2010 at 15:07:28 (UTC)
Goto Top
Mit Cmdlets hab ich viel zu tun.

Aber ein PowerShell-Skript hab ich noch nicht erstellt.
Member: Miyamoto
Miyamoto Jun 14, 2010 at 15:38:53 (UTC)
Goto Top
Da ich ein netter Mensch bin habe ich dir schon mal den Anfang gebastelt face-smile
Du musst nur die Dateiendung in Zeile 10 ändern, damit deine PST-Dateien aufgelistest werden.
Wichtig ist bei der Eingabe des Pfades das du immer ein "\" (natürlich ohne "") eingibst.
Du musst das Skript nur noch um deinen Code erweitern, dein Code kommt in die "foreach" Schleife

#Variablen
$pfad=""  


$pfad = Read-Host "Bitte geben Sie den Dateipfad ein, wo die PST-Dateien liegen:"   

if ((test-path $pfad) -and (($pfad.Chars($pfad.Length-1) -eq '\') -or ($pfad.Chars($pfad.Length-1) -eq '/') )){  
    Write-Host "Der Pfad ist ok"  
    
    $pst_daten=Get-ChildItem -Path $pfad -Name -Include *.txt
    
    foreach ($i in $pst_daten){
            Write-Host $i
            
            
            
		}
    
} else{
	Write-Host 'Ungültiger Pfad' -ForegroundColor Red  
}
Bei fragen frag einfach face-smile
Member: tray-park
tray-park Jun 15, 2010 at 10:51:51 (UTC)
Goto Top
Hi,

danke für das Skript. Aber wie du sicher vermutet hast....Ich versteh´s nicht so ganz.

Zum Verständnis:

Du setzt die Variable $path.
In diese wird der Inhalt eingelesen, den der Benutzer eingibt z. B. C:\Import.pst

Was überprüfst du dann? Ob der Inhalt der Variable mit dem Pfad übereinstimmt? Sprich, ob die Datei vorhanden ist?
Und was bedeutet hier (test-path $pfad)? Muss hier der Pfad zu den PST-Dateien statt test-path hin?

Dann setzt du eine weitere Variable mit der ich nix anfangen kann. Ist die nur für die Schleife da?

In die Schleife hab ich meine CMDlets gesetzt.

foreach ($i in $pst_daten)
	{
		Write-Host $i
		# Disable-Mailbox -Identity "Migration" 
		# Enable-Mailbox -Identity "Migration" 
		Import-Mailbox -Identity "Migration" -PSTFolderPath $pfad -AllowDuplicates  
		Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -destination "D:\PST-Import\Logs"  
	}	

Nun bekomm ich beim Ausführen immer "ungültiger Pfad" angezeigt. Was mach ich noch verkehrt?
Member: Miyamoto
Miyamoto Jun 15, 2010 at 12:00:45 (UTC)
Goto Top
Hi,
ja in der Variable $pfad steht der Pfad den man eingeben muss.
Du brauchst nicht den ganzen Pfad (z.B. d:\Test\Import.pst ) angeben sondern nur das Verzeichnis in der die Datei sich befindet (z.B. d:\Test\ ).
So brauch man nicht jede Datei Einzelt angeben.
Die abfrage die ich gemacht habe prüft als erstes ob der Pfad auch wirklich existiert dann wird geschaut ob eine / oder ein \ das letzte Zeichen ist.
Wenn das alles zu trifft, wird ein dir gemacht, das Ergebnis wird in die Variable $pst_daten gepackt.
Die schleife läuft so oft durch wie es Dateien, in dem Verzeichnis gibt die die Endung pst haben.
Und dann kommen ja auch schon deine Anweisungen.

#Variablen
$pfad = Read-Host "Bitte geben Sie den Dateipfad ein, wo die PST-Dateien liegen:"   

if ((test-path $pfad) -and (($pfad.Chars($pfad.Length-1) -eq '\') -or ($pfad.Chars($pfad.Length-1) -eq '/') )){  
    Write-Host "Der Pfad ist ok"  
    
    $pst_daten=Get-ChildItem -Path $pfad -Name -Include *.pst
    
    foreach ($i in $pst_daten){
        Write-Host "$pfad$i"  
		# Disable-Mailbox -Identity "Migration" 
		# Enable-Mailbox -Identity "Migration" 
                Import-Mailbox -Identity "Migration" -PSTFolderPath "$pfad$i" -AllowDuplicates  
		Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -destination "D:\PST-Import\Logs"  

		}
} else{
	Write-Host 'Ungültiger Pfad' -ForegroundColor Red  
}
Member: tray-park
tray-park Jun 15, 2010 at 12:10:44 (UTC)
Goto Top
Okay.

Nun taucht aber bei der Import-Mailbox Anweisung ein Problem auf. Die Shell sagt nach dem Ausführen des Skripts:

PS D:\PST-Import> .\Auto-Migration.ps1
Bitte geben Sie den Dateipfad ein: D:\PST-Import
Der Pfad ist okay
Die Benennung "Import-Mailbox" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführb  
aren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), un
d wiederholen Sie den Vorgang.
Bei D:\PST-Import\Auto-Migration.ps1:28 Zeichen:17
+         Import-Mailbox <<<<  -Identity "Migration" -PSTFolderPath "D:\PST-Import\$pstdaten" -AllowDuplicates  
    + CategoryInfo          : ObjectNotFound: (Import-Mailbox:String) , CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Das heißt wohl, dass der Import-Mailbox Befehl nicht in einem Skript funktioniert.

Außerdem zeigt er mir den Inhalt der Variablen nicht im Pfad des Import-Befehls an.
Import-Mailbox <<<<  -Identity "Migration" -PSTFolderPath "D:\PST-Import\$pstdaten" -AllowDuplicates  
Siehst du. Statt
"D:\PST-Import\PST01.pst"  
zeigt er die Variable
"D:\PST-Import\$pfad  
und nicht den Inhalt.

Oder hab ich was falsch gemacht?
Member: Miyamoto
Miyamoto Jun 15, 2010 at 13:31:50 (UTC)
Goto Top
Poste mal kurz den Code den du bis jetzt hast,
auch mit den ganzen Veränderungen die du gemacht hast.

Edit: Funktioniert den überhaupt der Befehl wenn du ihn direkt in die Eingabe eingibst ( in die "Exchange Management Shell (EMS)" )???
Member: tray-park
tray-park Jun 15, 2010 at 14:05:50 (UTC)
Goto Top
Hi,

wir haben es erst einmal geschafft. Vielen Dank für deine großartige Unterstützung. Ohne dich hätte ich das niemals hinbekommen.

# Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010 << Aufruf von der PowerShell zur Exchange Management Shell

#########################################
# Ausgangspunkt ist ein leeres Postfach #
#########################################

# 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 $pfad -Name -Include $datei

		# PST-Datei wird importiert
		Import-Mailbox -Identity "Migration" -PSTFolderPath "D:\PST-Import\$pstdaten" -AllowDuplicates  
		
		# Log-Datei wird kopiert
		Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -destination "D:\PST-Import\Logs"	  
		
		# Postfach wird deaktiviert
		Disable-Mailbox -Identity "Migration"  
		
		# Postfach wird aktiviert
		Enable-Mailbox -Identity "Migration"  
		
# Stimmt der Pfad nicht überein, gibts ne Fehlermeldung
}
else
{ 
 Write-Host "Ungültiger Pfad" -ForegroundColor Red  
}

Dankesehr.

Grüße Tray
Member: Miyamoto
Miyamoto Jun 15, 2010 at 14:33:29 (UTC)
Goto Top
Hi,
Funktioniert das ganze jetzt oder nicht???

Edit: Wer lesen kann ist klar im Vorteil face-big-smile
und als erledigt Markieren

Gruß Miyamoto
Member: tray-park
tray-park Jun 15, 2010 at 15:04:03 (UTC)
Goto Top
Soweit schon.

Jetzt müsste ich nur noch wissen, wie ich den Inhalt einer Variablen %%i aus einer Batch-Datei in das ShellScript übergebe.

So in der Art wie $bat=%%i.

geht das irgendwie?
Member: Miyamoto
Miyamoto Jun 16, 2010 at 07:19:49 (UTC)
Goto Top
Hi,
du meinst wie du einen oder mehrere Parameter an das Powershell Skript übergibst oder???

Das machst du so, Skript Aufruf:
./Skript_Name.ps1 param1 param2
Code Beispiel:
$param1 =$Args
$param2 =$Args[1]

Write-Host $param1
Write-Host $param2

Gruß Miyamoto
Member: tray-park
tray-park Jun 16, 2010 at 13:53:08 (UTC)
Goto Top
Okay.

Und wie würde es in umgekehrter Reihenfolge, sprich von einer PowerShell Variablen in eine Batch-Variable, funktionieren?
Member: tray-park
tray-park Jun 16, 2010 at 13:54:29 (UTC)
Goto Top
Also ich weiß mittlerweile wie man Programme aus dem Script aufruft.

Dann einfach auch die Parameter mitgeben?

Invoke-Expression -Command "D:\PST-Import\archivieren.jar -$param"  
Member: Miyamoto
Miyamoto Jun 16, 2010 at 14:11:50 (UTC)
Goto Top
Hi,
eine Batch File über gibt man so einen Parameter:

Aufruf:
file.bat param1 param2

Quelltest von file.bat:
echo %1
echo %2

Batch File Starten aus Powershell:
powershell.exe -noexit .\zzzz.bat hallo du
Das Batch File wird innerhalb der PowerShell ausgeführt

Gruß Miyamoto
Member: tray-park
tray-park Jun 16, 2010 at 14:48:54 (UTC)
Goto Top
Cool.

Und wenn ich jetzt noch rausbekomme, wie ich Logdateien so umbennen kann, dass sie den selben Dateinamen haben wie meine PST-Files bin ich glücklich.

In dem Skript läuft es bisher so:

# Log-Datei wird kopiert.
Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -Destination "D:\PST-Import\PST-Files"  
Write-Host "|    Log-File wurde geschrieben   |" -ForegroundColor Yellow  

Nun hätte ich aber gerne, dass der Inhalt der Variablen

$pstdaten=Get-ChildItem -Path $pfad -Name -Include *.pst
	
# Schleife führt den Importvorgang durch und startet das Archivierungsprogramm.
foreach ($i in $pstdaten)

nicht nur für den Import genutzt wird

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

sondern auch im Move-Item

Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -Destination "D:\PST-Import\PST-Files\$i.*"  

geht das auch?
Member: Miyamoto
Miyamoto Jun 16, 2010 at 15:09:29 (UTC)
Goto Top
irgend wie versteh ich Grade deine Frage nicht face-smile
Kannst du sie noch mal ausführlicher stellen?

So viel habe ich verstanden du möchtest die foreach Schleife noch für was anderes benutzen oder??
Member: tray-park
tray-park Jun 17, 2010 at 08:02:30 (UTC)
Goto Top
Bei der Import-Anweisung übergebe ich ja den Inhalt der Variablen $i an die PSTFolderPath Anweisung und diese löst den Inhalt dann auf.

Import-Mailbox -Identity "Migration" -PSTFolderPath "D:\PST-Import\PST-Files\$i" -AllowDuplicates  

Wenn das jetzt auch in der Rename- oder der Move-Item-Anweisung funktionieren würde wäre das klasse.

Rename-Item -Path "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -NewName "D:\PST-Import\PST-Files\$i.*  

Sodass die Logfiles dann ihre Endungen behalten und den Dateinamen der importierten PST-Datei erhalten.
Member: Miyamoto
Miyamoto Jun 17, 2010 at 12:04:56 (UTC)
Goto Top
Klar geht das du musst das nur innerhalb der "foreach" Schleife machen.
Ich würde es den so machen
mit Copy:
Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -Destination "D:\PST-Import\PST-Files\$i.txt"   
oder Rename:
Rename-Item -Path "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -NewName "$i.text"  

Gruß Miyamoto
Member: tray-park
tray-park Jun 17, 2010 at 15:34:44 (UTC)
Goto Top
Hi,

hab es nun auch so gelöst. Einziges Problem war eben, dass die genannten Anweisungen mit dem * nichts anfangen konnten. Deshalb hab ich nen kleinen Umweg gemacht.
Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.xml" -Destination "D:\PST-Import\PST-Files\$i.xml"  
Get-ChildItem D:\PST-Import\PST-Files\ *.pst.xml | Rename-Item -NewName { $_.name -replace '\.pst.xml','.xml' }  
die Move-Item Anweisung alleine macht aus der Logdatei nämlich eine "Migration.pst.xml". Deshalb noch die zusätzliche Rename Anweisung die dann die Dateiendung umbenennt.

Coole Sache, was aus dem Thema "PowerShell Inhalt in Textdatei umlenken" nun geworden ist oder?

Dann kann man das Thema ja schließen.

Danke für die großartige Hilfe Miyamoto. Ich hab nun richtig Spaß an der PowerShell bekommen.

Grüße Tray
Member: tray-park
tray-park Jun 18, 2010 at 08:13:37 (UTC)
Goto Top
Hi,

vielleicht doch noch eine Sache.

Ich rufe in dem Skript ja eine Batch Datei auf
Invoke-Expression -Command "D:\PST-Import\Start-MMImport.bat -$i"  
Die Batch-Datei gibt dann den Inhalt der Variablen an das Java-Programm.
@echo OFF
"C:\\Program Files (x86)\\Java\\jdk1.5.0_14\\bin\\java.exe" -jar D:\\PST-Import\\Dialog.jar %1  
Das musste ich so machen, da das Skript den java.exe Prozess nicht erkannt hat und weitergelaufen ist.
Der Prozess wird so anhalten:
$p = Get-Process java.exe # Hier steht der Prozessname
if ($p)
{
$p.WaitForExit()
Write-Host "|   Der Mail-Import wurde beendet!  |" -ForegroundColor Yellow  
}
else
{
Write-Host "| Der Mail-Import wurde nicht gestartet |" -ForegroundColor Yellow  
}
Hinter dem Prozess-namen im Task-Manager steht noch ein *32. Gebe ich das zusätzlich an, geschieht auch nix. Was kann ich hier noch tun?

Grüßle
Member: Miyamoto
Miyamoto Jun 18, 2010 at 09:37:47 (UTC)
Goto Top
Hi,
du möchtest doch schauen ob der Prozess läuft oder gar nicht gelaufen ist oder???
wenn du dir sicher bist das der Prozess läuft, davon gehe ich mal aus, den du kannst das so machen:
$p = Get-Process java* # Hier steht der Prozessname
if ($p)
{
$p.WaitForExit()
Write-Host "|   Der Mail-Import wurde beendet!  |" -ForegroundColor Yellow  
}
else
{
Write-Host "| Der Mail-Import wurde nicht gestartet |" -ForegroundColor Yellow  
}
so musst du nicht zu 100% den Richtigen Prozess Namen angeben.
Mann muss nur drauf achten das es wirklich nur ein Prozess gibt mit den Namen ansonsten könnte es Probleme geben.

Edit: es ist egal was der Task-Manager anzeigt, wichtig ist nur was Get-Process anzeigt face-smile

Gruß Miyamoto
Member: tray-park
tray-park Jun 18, 2010 at 10:05:41 (UTC)
Goto Top
Cool. Hat funktioniert.

Wir haben zum Testen des Java-Programms einfach nur ne Dialog-Box genommen, die den Pfad der PST-Datei ausgeben soll und auf einen Klick auf "OK" wartet.

Das komische ist nur, dass mir das Java-Programm nicht den vollständigen Pfad, sondern 2 Dialogboxen in Folge anzeigt.

In der ersten bekomme ich den Dateinamen, in der zweiten die Dateiendung. Von dem kompletten Pfad keine Spur.

Da stimmt doch was nicht face-sad
Member: Miyamoto
Miyamoto Jun 18, 2010 at 10:32:08 (UTC)
Goto Top
Zeig mal Bitte den ganzen Code den du bis jetzt hast.
habe eine Vermutung ^^

Gruß Miyamoto
Member: tray-park
tray-park Jun 18, 2010 at 10:38:55 (UTC)
Goto Top
Habs hinbekommen. Hab die Pfad-Variable vergessen zu setzen.

Ich wette deine Vermutung hat sich bestätigt face-wink

Aber trotzdem mal der komplette Code. Verbesserungswünsche sind gern gesehen face-smile

#
# Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010 << Aufruf von der PowerShell zur Exchange Management Shell
#

#################################################
# Ausgangspunkt ist ein User mit einem Postfach #
#################################################

# Variablen werden definiert.
$pfad=""  
# $datei=""  

# Benutzer wird aufgefordert die Variable mit dem Pfad zu füllen.
$pfad = Read-Host "Bitte geben Sie den Dateipfad ein"  
# Benutzer wird aufgefordert die Variable mit dem Dateinamen zu füllen.
# $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)

# Überprüfung ob der Dateiname im Filesystem mit dem eingegebenen übereinstimmt.
# if ((test-path $datei) -and . . .)

{
	Write-Host ""  
	Write-Host "-------------------------------------" -ForegroundColor Blue  
	Write-Host "|        Der Pfad ist okay!         |" -ForegroundColor Yellow  
	Write-Host "-------------------------------------" -ForegroundColor Blue  
	Write-Host ""  
#$pause = Read-Host "PAUSE"  
	# Inhalt des Ordners und Name der PST-Datei im Filesystem werden ausgelesen und in eine weitere Variable geschrieben.
	$pstdaten=Get-ChildItem -Path $pfad -Name -Include *.pst
	
		# Schleife führt den Importvorgang durch und startet das Archivierungsprogramm.
		foreach ($i in $pstdaten)
		{		
		# Postfach wird deaktiviert.
		Disable-Mailbox -Identity "Migration" -Confirm:$false  
		Write-Host "|    Postfach wurde deaktiviert   |" -ForegroundColor Yellow  
		
		#$pause = Read-Host "PAUSE"		  
		
		# Postfach wird aktiviert.
		Enable-Mailbox -Identity "Migration" -Confirm:$false  
		Write-Host "|    Postfach wurde aktiviert     |" -ForegroundColor Yellow  
		
		#$pause = Read-Host "PAUSE"		  
		
		# PST-Datei wird importiert.
		# Import-Mailbox -Identity "Migration" -PSTFolderPath "D:\PST-Import\PST-Files\$pfad$i" #-AllowDuplicates  
		
		Import-Mailbox -Identity "Migration" -PSTFolderPath "$pfad$i" #-AllowDuplicates  
		Write-Host "|     Mailbox wurde importiert    |" -ForegroundColor Yellow  
		
		#$pause = Read-Host "PAUSE"  
		
# Log-Datei wird kopiert.
# Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -Destination "D:\PST-Import\PST-Files\$i.*"  
		
Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.xml" -Destination "D:\PST-Import\PST-Files\$i.xml"  
Get-ChildItem D:\PST-Import\PST-Files\ *.pst.xml | Rename-Item -NewName { $_.name -replace '\.pst.xml','.xml' }  
Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.log" -Destination "D:\PST-Import\PST-Files\$i.log"  
Get-ChildItem D:\PST-Import\PST-Files\ *.pst.log | Rename-Item -NewName { $_.name -replace '\.pst.log','.log' }  
		
	Write-Host "|    Log-File wurde geschrieben   |" -ForegroundColor Yellow  
		
# $pause = Read-Host "PAUSE"  
# Java-Programm wird aufgerufen.
		Invoke-Expression -Command "D:\PST-Import\Dialog.jar -$pfad$i"  
		
					# Es wird gewartet, bis das Java-Programm den Mail-Import beendet hat.
			$p = Get-Process java* # Hier muss der Prozessname eingetragen werden.
			if ($p)
			{
				$p.WaitForExit()
				Write-Host ""  
				Write-Host "-------------------------------------" -ForegroundColor Blue  
				Write-Host "|   Der Mail-Import wurde beendet!  |" -ForegroundColor Yellow  
				Write-Host "-------------------------------------" -ForegroundColor Blue  
				Write-Host ""   
			}
			else
			{
					Write-Host ""  
					Write-Host "-----------------------------------------" -ForegroundColor Red  
					Write-Host "| Der Mail-Import wurde nicht gestartet |" -ForegroundColor Yellow  
					Write-Host "-----------------------------------------" -ForegroundColor Red  
					Write-Host ""  
			}

		#$pause = Read-Host "PAUSE"  
		}
# Stimmt der Pfad nicht überein, gibts ne Fehlermeldung.
}
else
{
	Write-Host ""  
	Write-Host "-------------------------------------" -ForegroundColor Red  
	Write-Host "|         Ungültiger Pfad!          |" -ForegroundColor Yellow  
	Write-Host "-------------------------------------" -ForegroundColor Red  
	Write-Host ""  
}
Member: Miyamoto
Miyamoto Jun 18, 2010 at 10:52:48 (UTC)
Goto Top
Ja das war auch meine Vermutung face-smile

Der Rest sieht doch gut aus, auf die schnelle ist mir nix aufgefallen was man noch anders machen kann.
Du solltest vielleicht aber die Zeilen löschen wo Code drin steht den du nicht benutzt, sprich den du auskommentiert hast.

Gruß Miyamoto
Member: tray-park
tray-park Jun 18, 2010 at 10:57:24 (UTC)
Goto Top
Hat das Auswirkungen auf die Funktionalität des Skripts?

Mir ist nun aber noch eine Lücke aufgefallen, die ich nicht bedacht habe.

Die User können ja 1:n PST-Files haben. Dazu bekommen wir die in Ordnern geliefert, die wie der User heißen. In dem Ordner sind dann alle PST-Files.
Nun muss ja ne zweite Schleife dazu, die die Ordner durchwühlt. Oder?
Member: Miyamoto
Miyamoto Jun 18, 2010 at 11:30:34 (UTC)
Goto Top
Also, nein es hat keine Auswirkungen auf den Code, wenn du Zeilen löscht die du eh auskommentiert hast.
Es ist einfach nur schöner, wenn man nach einiger zeit sich das Skript anschaut. Es kommen sonst zu solchen Gedanken wie, warum habe ich das mal geändert, wenn nun die Zeilen nicht mehr drine stehen den kommt man nicht auf die Gedanken. face-smile

Das was du nicht bedacht hast, das habe ich doch schon bedacht. face-smile
Du gibst ja bei Start ein Verzeichnis ein, die Schleife läuft so lange wie Dateien existieren mit der Endung .pst
z.B. wenn 2 Dateien(a.pst und b.pst) im Verzeichnis liegen den wird die Schleife genau 2 mal durchlaufen einmal für Datei 1 (a.pst) und einmal für Datei 2 (b.pst)
die Variable $i beinhaltet beim schleifen Durchlauf 1 a.pst und beim schleifen Durchlauf 2 b.pst

Oder habe ich dein Problem nicht richtig verstanden???

Gruß Miyamoto
Member: tray-park
tray-park Jun 18, 2010 at 12:32:51 (UTC)
Goto Top
Genau. Die Schleife durchläuft aber nur einen Ordner. Den, der als Pfad angegeben wird.

Nun bekommen wir aber nicht nur einen Ordner mit vielen PST-Files, sondern viele Ordner mit vielen PST-Files.

So:

--Ordner1
PST1
PST2
--Ordner2
PST1
PST2

D.H. die Schleife müsste einen Ordner durchlaufen, dort die PST-Files abarbeiten, dann in den nächsten Ordner .....

Dann müsste ich doch noch ne übergeordnete Schleife einbauen, die die darunterstehende quasi in die Ordner führt. Oder?
Member: Miyamoto
Miyamoto Jun 18, 2010 at 12:47:49 (UTC)
Goto Top
Jap oder du arbeitest mit einem rekursive Durchlauf.
Das würde den so aussehen:
#
# Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010 << Aufruf von der PowerShell zur Exchange Management Shell
#

#################################################
# Ausgangspunkt ist ein User mit einem Postfach #
#################################################

# Variablen werden definiert.
$pfad=""  
# $datei=""  

# Benutzer wird aufgefordert die Variable mit dem Pfad zu füllen.
$pfad = Read-Host "Bitte geben Sie den Dateipfad ein"  
# Benutzer wird aufgefordert die Variable mit dem Dateinamen zu füllen.
# $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)

# Überprüfung ob der Dateiname im Filesystem mit dem eingegebenen übereinstimmt.
# if ((test-path $datei) -and . . .)

{
	Write-Host ""  
	Write-Host "-------------------------------------" -ForegroundColor Blue  
	Write-Host "|        Der Pfad ist okay!         |" -ForegroundColor Yellow  
	Write-Host "-------------------------------------" -ForegroundColor Blue  
	Write-Host ""  
#$pause = Read-Host "PAUSE"  
	# Inhalt des Ordners und Name der PST-Datei im Filesystem werden ausgelesen und in eine weitere Variable geschrieben.
	$pstdaten=Get-ChildItem -Path $pfad -Name -Include *.pst -Recurse
	
		# Schleife führt den Importvorgang durch und startet das Archivierungsprogramm.
		foreach ($i in $pstdaten)
		{		
		# Postfach wird deaktiviert.
		Disable-Mailbox -Identity "Migration" -Confirm:$false  
		Write-Host "|    Postfach wurde deaktiviert   |" -ForegroundColor Yellow  
		
		#$pause = Read-Host "PAUSE"		  
		
		# Postfach wird aktiviert.
		Enable-Mailbox -Identity "Migration" -Confirm:$false  
		Write-Host "|    Postfach wurde aktiviert     |" -ForegroundColor Yellow  
		
		#$pause = Read-Host "PAUSE"		  
		
		# PST-Datei wird importiert.
		# Import-Mailbox -Identity "Migration" -PSTFolderPath "D:\PST-Import\PST-Files\$pfad$i" #-AllowDuplicates  
		
		Import-Mailbox -Identity "Migration" -PSTFolderPath "$pfad$i" #-AllowDuplicates  
		Write-Host "|     Mailbox wurde importiert    |" -ForegroundColor Yellow  
		
		#$pause = Read-Host "PAUSE"  
		
# Log-Datei wird kopiert.
# Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -Destination "D:\PST-Import\PST-Files\$i.*"  
		
Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.xml" -Destination "D:\PST-Import\PST-Files\$i.xml"  
Get-ChildItem D:\PST-Import\PST-Files\ *.pst.xml | Rename-Item -NewName { $_.name -replace '\.pst.xml','.xml' }  
Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.log" -Destination "D:\PST-Import\PST-Files\$i.log"  
Get-ChildItem D:\PST-Import\PST-Files\ *.pst.log | Rename-Item -NewName { $_.name -replace '\.pst.log','.log' }  
		
	Write-Host "|    Log-File wurde geschrieben   |" -ForegroundColor Yellow  
		
# $pause = Read-Host "PAUSE"  
# Java-Programm wird aufgerufen.
		Invoke-Expression -Command "D:\PST-Import\Dialog.jar -$pfad$i"  
		
					# Es wird gewartet, bis das Java-Programm den Mail-Import beendet hat.
			$p = Get-Process java* # Hier muss der Prozessname eingetragen werden.
			if ($p)
			{
				$p.WaitForExit()
				Write-Host ""  
				Write-Host "-------------------------------------" -ForegroundColor Blue  
				Write-Host "|   Der Mail-Import wurde beendet!  |" -ForegroundColor Yellow  
				Write-Host "-------------------------------------" -ForegroundColor Blue  
				Write-Host ""   
			}
			else
			{
					Write-Host ""  
					Write-Host "-----------------------------------------" -ForegroundColor Red  
					Write-Host "| Der Mail-Import wurde nicht gestartet |" -ForegroundColor Yellow  
					Write-Host "-----------------------------------------" -ForegroundColor Red  
					Write-Host ""  
			}

		#$pause = Read-Host "PAUSE"  
		}
# Stimmt der Pfad nicht überein, gibts ne Fehlermeldung.
}
else
{
	Write-Host ""  
	Write-Host "-------------------------------------" -ForegroundColor Red  
	Write-Host "|         Ungültiger Pfad!          |" -ForegroundColor Yellow  
	Write-Host "-------------------------------------" -ForegroundColor Red  
	Write-Host ""  
}

Ich habe in Zeile 32 Folgendes angehängt
-Recurse
nun muss man nur noch den Obersten Ordner angeben.

Edit: sprich
Ordner #den muss ich angeben
|-Ordner
|  |-Datei
|  |-...
|
|-Ordner
|  |-Datei
|  |-...
Member: tray-park
tray-park Jun 21, 2010 at 07:03:03 (UTC)
Goto Top
Hi,

du weist nicht zufällig noch, wie ich eine Zeichenkette verändern kann? Ich habe es mit -replace versucht, aber irgendwie klappt es nicht so ganz.

$slash = "\"  
$match = "\$"  
$slash -replace $match,"/"  

Es geht darum, dass das Javaprogramm mit den regulären Dateipfaden "D:\PST-Import\ nix anfangen kann. Das muss so übergeben werden "D:/PST-Import/"
Member: Miyamoto
Miyamoto Jun 21, 2010 at 07:37:15 (UTC)
Goto Top
Hi,
klar weiß ich wie es geht face-smile
und zwar so:
$var="D:\test\zzz\datei.pst"  
$var_neu=$var.Replace("\","/")  

Write-Host "alter Pfad: " $var  
Write-Host "neuer Pfad: " $var_neu  

Gruß Miyamoto
Member: tray-park
tray-park Jun 21, 2010 at 07:53:47 (UTC)
Goto Top
Hi, werd ich gleich mal ausprobieren.

Nun ist es leider so, dass meine Get-Child Anweisung die Logdateien nicht mehr umbenennt.
Get-ChildItem D:\PST-Import\PST-Files\ *.pst.xml | Rename-Item -NewName { $_.name -replace '\.pst.xml','.xml' }   
Schätze weil der Pfad nicht gefunden wird. Ich bekomm keine Meldung. Die Logdateien heißen aber *.pst.log und *.pst.xml

Wenn ich $i nach dem Get-Child anhänge, heißt es
Rename-Item : Das Argument kann nicht an den Parameter "NewName" gebunden werden, da es sich um eine leere Zeichenfolge handelt.  

Aber die Variable anzuhängen, ist doch die einzige Möglichkeit, dass die Rename Anweisung den Pfad und die darin enthaltenen Dateien umbennen kann. Oder?
Wie soll ich sonst den variablen Inhalt übergeben?
Member: tray-park
tray-park Jun 21, 2010 at 09:07:45 (UTC)
Goto Top
Sorry, hab nicht nachdacht.

Hab einfach ein -Recurse an die Get-Child Anweisung angehängt face-smile
Member: Miyamoto
Miyamoto Jun 21, 2010 at 09:12:53 (UTC)
Goto Top
Hi,
geht denn mittlerweile alles oder gibt es immer noch ein paar Probleme?

Gruß Miyamoto
Member: tray-park
tray-park Jun 21, 2010 at 09:22:58 (UTC)
Goto Top
Das Einzige was momentan noch fehlt ist, dass das Skript den Inhalt einer *.ini Datei an das Java-Programm übergeben soll.

Da bin ich gerade dran.
Member: Miyamoto
Miyamoto Jun 21, 2010 at 09:53:44 (UTC)
Goto Top
Wenn du Hilfe braust sag beschied face-smile
oder wen du fertig bist mit deinem Skript, den weiß ich wann ich den Beitrag nicht mehr anschauen muss face-smile

Gruß Miyamoto
Member: tray-park
tray-park Jun 21, 2010 at 10:16:37 (UTC)
Goto Top
So hat es funktioniert:

$ini = Get-Content D:\PST-Import\test.ini
Invoke-Expression -Command "D:\PST-Import\Dialog.jar -$ini"

Nun geht das Skript in die Testphase. Dankeschön!
Member: tray-park
tray-park Jun 21, 2010 at 10:31:39 (UTC)
Goto Top
Eines wäre da noch.

Ich möchte nicht jedes mal die Pfade im kompletten Skript ändern. Sondern nur in den Variablen-Definitionen.

$ini=D:\PST-Import\
Invoke-Expression -Command "$ini""Dialog.jar -$ini"  

Das gefällt der Shell aber nicht. Wie kann ich bei dieser Anweisung die Pfadangabe auflösen?
Member: Miyamoto
Miyamoto Jun 21, 2010 at 11:42:13 (UTC)
Goto Top
Hi,
also ich würde es mal so probieren:
$ini="D:\PST-Import\"   
Invoke-Expression -Command $ini"Dialog.jar -$ini"  

Gruß Miyamoto
Member: tray-park
tray-park Jun 21, 2010 at 11:52:31 (UTC)
Goto Top
Mach ich.

Nun kommt der Knaller:

Die Sache ist die. Das Skript soll zwischenzeitlich immer mal wieder angehalten und zu einem anderen Zeitpunkt gestartet werden.

Bisher funktioniert das so, dass die PST-Datei in TSP umbenannt wird
Get-ChildItem $pfad$i *.pst | Rename-Item -NewName { $_.name -replace '\.pst','.tsp' }  
Das Skript arbeitet ja nur mit den PST Dateien.

Eleganter wäre es, wenn das Skript nach den Logfiles schauen würde.

Ist eine XML Datei im Ordner vorhanden, die den gleichen Dateinamen wie die PST hat , dann soll die PST ausgelassen werden.

Ich habe es mit der Exclude Anweisung versucht.
$pstdaten=Get-ChildItem -Path $pfad -Name -Include *.pst -Recurse -Exclude *.xml
Aber leider erfolgslos.
Member: Miyamoto
Miyamoto Jun 21, 2010 at 12:39:54 (UTC)
Goto Top
Hi,
du kannst folgendes machen:
$pfad_pst="d:\zzz\datei.pst"  

$pfad_xml=$pfad_pst.Replace(".pst",".xml")  

if(test-path $pfad_xml){
    Write-Host "Ja eine xml Datei ist vorhanden"  
}else{
    Write-Host "Keine xml Datei Vorhanden"  
}
der Teil muss nur innerhalb deiner forech Schleife eingebaut werden.
Und alles was innerhalb der bisherigen forech Schleife gemacht worden ist muss innerhalb der IF Anweisung geschehen.

Gruß Miyamoto
Member: tray-park
tray-park Jun 21, 2010 at 12:54:29 (UTC)
Goto Top
Versuch ich mal.

Aber ändere ich mit der Replace Methode nicht im Variableninhalt Zeichen?
So wie du es oben beschrieben hast?
$var="D:\test\zzz\datei.pst"   
$var_neu=$var.Replace("\","/")   
Member: tray-park
tray-park Jun 21, 2010 at 13:12:29 (UTC)
Goto Top
Das geht leider nicht, da in einem Ordner ja mehrere PST Dateien sein können.
Das Skript würde dann den ganzen Ordner auslassen, sobald eine XML Datei gefunden wurde.

Es soll aber dort weiter machen, wo es zuletzt aufgehört hat. Die einzige Möglichkeit die ich sehe ist, dass die PST´s ausgelassen werden, die keine gleichnamige XML im Ordner haben.

Ich versuche gerade die Dateinamen zu vergleichen, ohne die Dateiendung in Betracht zu ziehen. Aber ich glaube ich laufe ins Nirvana . . .
Member: Miyamoto
Miyamoto Jun 21, 2010 at 13:17:23 (UTC)
Goto Top
Du hast recht, mit der Replace Methode veränderst du den Inhalt einer Variable.
Das kann man doch so oft machen wie man will^^
und wenn du das Ergebnis immer in eine Neue Variable packst, den hast du sogar immer noch die Ursprungs Wert in der ersten Variable.

Gruß Miyamoto
Member: tray-park
tray-park Jun 21, 2010 at 13:29:23 (UTC)
Goto Top
Ich verstehs aber nicht so ganz....

Egal. Auf jeden Fall funktioniert es. Ist eine XML Datei vorhanden wird die Meldung "Ja eine XML Datei ist vorhanden" ausgegeben, wenn nicht, dann gibts ne negative Meldugn.

Woher weiß das Skript aber nun, dass es die PST auslassen soll, welche eine gleichnamige XML im Ordner hat?
Member: Miyamoto
Miyamoto Jun 21, 2010 at 14:02:19 (UTC)
Goto Top
Ganz einfach, mit dem Code den ich dir gegeben habe:
$pfad_pst="d:\zzz\datei.pst"  

$pfad_xml=$pfad_pst.Replace(".pst",".xml")  

if(test-path $pfad_xml){
    Write-Host "Ja eine xml Datei ist vorhanden"  
}else{
    Write-Host "Keine xml Datei Vorhanden"  
}
du übergibst deinen Pfad an die Replace Methode (Zeile 3) da wird die Endung pst zu ein xml, das Ergebnis wird in einen neue Variable gepackt.
jetzt wird die neue Variable an die IF Anweisung übergeben, die überprüft ob die Datei vorhanden ist.
Gehen wir mal davon aus das die Datei vorhanden ist. Nun musst du mit den Original Pfad weiter arbeiten, sprich in Zeile 6, wo auch dein andere Code hinein kommt.

Edit: Der Code kommt in deine "forech" Schleife

Gruß Miyamoto
Member: tray-park
tray-park Jun 21, 2010 at 14:06:32 (UTC)
Goto Top
Ich hab ihn in Zeile 8 eingefügt. In Zeile 6 eine Ausgabe, die zeigt, welche PST´s schon importiert wurden. Ist das ein Fehler?
Denn es scheint als würde es auch im else-Zweig funktionieren.
Member: Miyamoto
Miyamoto Jun 21, 2010 at 14:19:07 (UTC)
Goto Top
Es kommt drauf an was du machen willst,
wenn du deinen Code Ausführen möchtest wen noch Keine XML Datei vorhanden ist den macht man es im "else" Zweig.
Aber wen dein Code ausgeführt werden soll wen eine XML Datei vorhanden ist den muss es in den "If" Zweig.
Member: tray-park
tray-park Jun 21, 2010 at 14:43:00 (UTC)
Goto Top
Das Skript ausführen ohne, die Exchange Management Console zu öffnen kann ich doch mit einer Batch machen oder?
powershell.exe -noexit .\Auto-Migration.ps1
Dann öffnet sich aber nicht die Management Shell sondern der Command.

Deshalb hab ich vorsichtigerweise mal
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
hinzugefügt. Geht aber trotzdem nicht über die Management Shell.

Wie kann ich das Skript denn am einfachsten, quasi per Doppelklick, ausführen?
Member: Miyamoto
Miyamoto Jun 22, 2010 at 07:08:01 (UTC)
Goto Top
Hi,
mit dem Batch Befehl,
powershell.exe -noexit .\Auto-Migration.ps1
startest du eine PowerShell und führst anschließend das Skript aus was du angegeben hast.

Keine Ahnung wie man ein Skript mit einem Doppelklick ausführen,
ich glaube aber mich zu erinnern das ich mal gelesen habe das man es mit Absicht so gemacht hat,
damit man nicht die verkehrten Skript ausführt.

Ich würde mir eine Batch schreiben und dann immer die starten, das geht mit den oben genannten Befehl.

Gruß Miyamoto
Member: tray-park
tray-park Jun 22, 2010 at 07:26:47 (UTC)
Goto Top
Okay! So hatte ich es vor.

Das Java-Programm wird ja wie folgt ausgeführt:
Invoke-Expression -Command D:\PST-Import\Dialog.jar $var1 $var2"  

Nun versuche ich vergebens dem Java-Programm die Speicheradressierung zuzuweisen.

Über ne Batch-Datei funktioniert das, indem man die Parameter andhängt

"C:\Program Files (x86)\Java\jdk1.5.0_14\bin\java.exe -Xms512m -Xmx512m -jar" D:\PST-Import\Dialog.jar  
Wie kann ich denn die Speicherzuweisung in der Invoke Anweisung angeben?

Ich bekomme schöne Fehlermeldungen wenn ich es so mache:
Invoke-Expression -Command "C:\Program Files (x86)\Java\jdk1.5.0_14\bin\java.exe -Xms512m -Xmx512m -jar" "D:\PST-Import\Dialog.jar $var1 $var2"  
Hab nun schon mehrere Kombinationen probiert. Leider erfolglos!
Member: Miyamoto
Miyamoto Jun 22, 2010 at 08:15:11 (UTC)
Goto Top
Also eine frage vor weg,
ist Java in den Umgebungsvariablen gesetzt?

Wenn ja, den kannst du folgendes machen
Invoke-Expression -Command "java -Xms256m -Xmx512m -jar" "D:\PST-Import\Dialog.jar $var1 $var2"  
in der PowerShell geht es auch
Member: tray-park
tray-park Jun 22, 2010 at 09:14:47 (UTC)
Goto Top
Die JAVA_HOME Umgebungsvariable über die Systemeigenschaften zu setzen sollte doch genügen oder?

Wenn ja, dann funktioniert es auch so leider nicht.
Member: tray-park
tray-park Jun 22, 2010 at 12:38:30 (UTC)
Goto Top
Diese Antwort bekomm ich von der PowerShell
Invoke-Expression : Es wurde kein Positionsparameter gefunden, der das Argument "D:\PST-Import\Dialog.jar" akzeptiert.  
Bei Zeile:1 Zeichen:18
+ Invoke-Expression <<<<  -Command "java -Xms256m -Xmx512m -jar" "D:\PST-Import\Dialog.jar"  
    + CategoryInfo          : InvalidArgument: (:) [Invoke-Expression], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeExpressionCommand
Die kann wohl nix mit der Speicherreservierung anfangen.
Gibts ne andere Möglichkeit über das Shell Skript Speicher zu reservieren?
Member: Miyamoto
Miyamoto Jun 23, 2010 at 14:21:06 (UTC)
Goto Top
Was du mal bitte ausprobieren kannst ist:
java -Xms256m -Xmx512m -jar "D:\PST-Import\Dialog.jar"   
so geht es bei mir.
Ansonsten fehlt mir in Moment nix mehr ein.

Gruß Miyamoto
Member: tray-park
tray-park Jun 24, 2010 at 07:39:11 (UTC)
Goto Top
Hi,

das hatte auch nicht funktioniert. Ich hab nen kleinen Umweg über ne Batch-Datei gemacht:
Start-Process $inipfad"Import-Starten.bat" $inineu$inidatei, $pfadneuneu$ineuneu  
In der übergebe läuft dann die Speicherreservierung und das Java-Programm wird aufgerufen.

Du hattest mir ja erklärt, wie ich den Inhalt einer Variablen ändern kann.
$inineu=$inipfad.Replace("\","/")  
Nun versuch ich das auch mit den Dateinamen.
Get-ChildItem $path*.pst -Recurse | Rename-Item -NewName { $_.name -replace ' ','' }  
Die PST-Dateien sollen vor dem Import keine Leerzeichen mehr enthalten. Aber irgendwie... Naja, du weißt schon face-smile
Member: tray-park
tray-park Jun 24, 2010 at 10:54:52 (UTC)
Goto Top
Hi,

mal kurz zurück zum eigentlichen "umlenken"
Mit
Start-Transcript
Kann man ein Logfile von der Shell erstellen lassen.
Member: tray-park
tray-park Jun 24, 2010 at 11:38:09 (UTC)
Goto Top
Haha.

Leerzeichen hinter $path vergessen!
Get-ChildItem $path *.pst -Recurse | Rename-Item -NewName { $_.name -replace ' ','' }