Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PowerShell Inhalt in Textdatei umlenken

Frage Entwicklung Batch & Shell

Mitglied: tray-park

tray-park (Level 1) - Jetzt verbinden

14.06.2010, aktualisiert 18.10.2012, 6186 Aufrufe, 64 Kommentare

Windows Server 2008 Enterprise R2
Exchange 2010

Hi,

ich importiere gerade ein paar PST Dateieien in ein Postfach.

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

01.
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
64 Antworten
Mitglied: Miyamoto
14.06.2010 um 14:26 Uhr
Hi,

Das kannst du so machen
01.
Ping 10.10.10.10 | out-file -filepath "d:\ping.txt" -encoding Default -Append
Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
14.06.2010 um 14:38 Uhr
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
Bitte warten ..
Mitglied: Miyamoto
14.06.2010 um 15:50 Uhr
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.
01.
for($i=1;$i -le 5;$i++){ 
02.
 
03.
Ping www.heise.de | out-file -filepath "d:\ping$i.txt" -encoding Default -Append 
04.
 
05.
}
Du müsstest es nur so umbauen das die liste der zu importierenden Dateien durchlaufen wird.

Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
14.06.2010 um 16:02 Uhr
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?
Bitte warten ..
Mitglied: Miyamoto
14.06.2010 um 16:25 Uhr
wie läuft den das JAVA Programm ab???
muss man da eingaben machen oder werden nur Parameter übergeben??
Bitte warten ..
Mitglied: tray-park
14.06.2010 um 16:50 Uhr
Es werden nur Parameter an das ShellSkript übergeben

01.
# Auto-Migration.ps1 
02.
Disable-Mailbox -Identity "Migration" 
03.
Enable-Mailbox -Identity "Migration" 
04.
# Hier übergibt später das Java-Programm den Dateinamen 
05.
set /P w= 
06.
Import-Mailbox -Identity "Migration" -PSTFolderPath "D:\PST-Import\%w% -AllowDuplicates 
07.
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?
Bitte warten ..
Mitglied: Miyamoto
14.06.2010, aktualisiert 18.10.2012
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:
01.
$var = "Inhalt"
Bitte warten ..
Mitglied: tray-park
14.06.2010 um 17:07 Uhr
Mit Cmdlets hab ich viel zu tun.

Aber ein PowerShell-Skript hab ich noch nicht erstellt.
Bitte warten ..
Mitglied: Miyamoto
14.06.2010 um 17:38 Uhr
Da ich ein netter Mensch bin habe ich dir schon mal den Anfang gebastelt
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

01.
#Variablen 
02.
$pfad="" 
03.
 
04.
 
05.
$pfad = Read-Host "Bitte geben Sie den Dateipfad ein, wo die PST-Dateien liegen:"  
06.
 
07.
if ((test-path $pfad) -and (($pfad.Chars($pfad.Length-1) -eq '\') -or ($pfad.Chars($pfad.Length-1) -eq '/') )){ 
08.
    Write-Host "Der Pfad ist ok" 
09.
     
10.
    $pst_daten=Get-ChildItem -Path $pfad -Name -Include *.txt 
11.
     
12.
    foreach ($i in $pst_daten){ 
13.
            Write-Host $i 
14.
             
15.
             
16.
             
17.
18.
     
19.
} else{ 
20.
	Write-Host 'Ungültiger Pfad' -ForegroundColor Red 
21.
}
Bei fragen frag einfach
Bitte warten ..
Mitglied: tray-park
15.06.2010 um 12:51 Uhr
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.

01.
foreach ($i in $pst_daten) 
02.
03.
		Write-Host $i 
04.
		# Disable-Mailbox -Identity "Migration" 
05.
		# Enable-Mailbox -Identity "Migration" 
06.
		Import-Mailbox -Identity "Migration" -PSTFolderPath $pfad -AllowDuplicates 
07.
		Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -destination "D:\PST-Import\Logs" 
08.
	}	
Nun bekomm ich beim Ausführen immer "ungültiger Pfad" angezeigt. Was mach ich noch verkehrt?
Bitte warten ..
Mitglied: Miyamoto
15.06.2010 um 14:00 Uhr
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.

01.
#Variablen 
02.
$pfad = Read-Host "Bitte geben Sie den Dateipfad ein, wo die PST-Dateien liegen:"  
03.
 
04.
if ((test-path $pfad) -and (($pfad.Chars($pfad.Length-1) -eq '\') -or ($pfad.Chars($pfad.Length-1) -eq '/') )){ 
05.
    Write-Host "Der Pfad ist ok" 
06.
     
07.
    $pst_daten=Get-ChildItem -Path $pfad -Name -Include *.pst 
08.
     
09.
    foreach ($i in $pst_daten){ 
10.
        Write-Host "$pfad$i" 
11.
		# Disable-Mailbox -Identity "Migration" 
12.
		# Enable-Mailbox -Identity "Migration" 
13.
                Import-Mailbox -Identity "Migration" -PSTFolderPath "$pfad$i" -AllowDuplicates 
14.
		Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -destination "D:\PST-Import\Logs" 
15.
 
16.
17.
} else{ 
18.
	Write-Host 'Ungültiger Pfad' -ForegroundColor Red 
19.
}
Bitte warten ..
Mitglied: tray-park
15.06.2010 um 14:10 Uhr
Okay.

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

01.
PS D:\PST-Import> .\Auto-Migration.ps1 
02.
Bitte geben Sie den Dateipfad ein: D:\PST-Import 
03.
Der Pfad ist okay 
04.
Die Benennung "Import-Mailbox" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführb 
05.
aren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), un 
06.
d wiederholen Sie den Vorgang. 
07.
Bei D:\PST-Import\Auto-Migration.ps1:28 Zeichen:17 
08.
+         Import-Mailbox <<<<  -Identity "Migration" -PSTFolderPath "D:\PST-Import\$pstdaten" -AllowDuplicates 
09.
    + CategoryInfo          : ObjectNotFound: (Import-Mailbox:String) [], CommandNotFoundException 
10.
    + 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.
01.
Import-Mailbox <<<<  -Identity "Migration" -PSTFolderPath "D:\PST-Import\$pstdaten" -AllowDuplicates
Siehst du. Statt
01.
"D:\PST-Import\PST01.pst"
zeigt er die Variable
01.
"D:\PST-Import\$pfad
und nicht den Inhalt.

Oder hab ich was falsch gemacht?
Bitte warten ..
Mitglied: Miyamoto
15.06.2010 um 15:31 Uhr
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)" )???
Bitte warten ..
Mitglied: tray-park
15.06.2010 um 16:05 Uhr
Hi,

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

01.
# Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010 << Aufruf von der PowerShell zur Exchange Management Shell 
02.
 
03.
######################################### 
04.
# Ausgangspunkt ist ein leeres Postfach # 
05.
######################################### 
06.
 
07.
# Variablen werden definiert 
08.
$pfad="" 
09.
$datei="" 
10.
 
11.
# Benutzer wird aufgefordert die Variable zu füllen 
12.
$pfad = Read-Host "Bitte geben Sie den Dateipfad ein" 
13.
$datei = Read-Host "Bitte geben Sie den Dateinamen ein" 
14.
 
15.
# Überprüfung ob der Pfad im Filesystem mit dem eingegebenen Pfad übereinstimmt 
16.
if ((test-path $pfad)) 
17.
18.
	Write-Host "Der Pfad ist okay" 
19.
 
20.
# Inhalt des Ordners und Name der PST-Datei im Filesystem werden ausgelesen und in eine weitere Variable geschrieben	 
21.
	$pstdaten=Get-ChildItem -Path $pfad -Name -Include $datei 
22.
 
23.
		# PST-Datei wird importiert 
24.
		Import-Mailbox -Identity "Migration" -PSTFolderPath "D:\PST-Import\$pstdaten" -AllowDuplicates 
25.
		 
26.
		# Log-Datei wird kopiert 
27.
		Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -destination "D:\PST-Import\Logs"	 
28.
		 
29.
		# Postfach wird deaktiviert 
30.
		Disable-Mailbox -Identity "Migration" 
31.
		 
32.
		# Postfach wird aktiviert 
33.
		Enable-Mailbox -Identity "Migration" 
34.
		 
35.
# Stimmt der Pfad nicht überein, gibts ne Fehlermeldung 
36.
37.
else 
38.
{  
39.
 Write-Host "Ungültiger Pfad" -ForegroundColor Red 
40.
}
Dankesehr.

Grüße Tray
Bitte warten ..
Mitglied: Miyamoto
15.06.2010 um 16:33 Uhr
Hi,
Funktioniert das ganze jetzt oder nicht???

Edit: Wer lesen kann ist klar im Vorteil
und als erledigt Markieren

Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
15.06.2010 um 17:04 Uhr
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?
Bitte warten ..
Mitglied: Miyamoto
16.06.2010 um 09:19 Uhr
Hi,
du meinst wie du einen oder mehrere Parameter an das Powershell Skript übergibst oder???

Das machst du so, Skript Aufruf:
01.
./Skript_Name.ps1 param1 param2
Code Beispiel:
01.
$param1 =$Args[0] 
02.
$param2 =$Args[1] 
03.
 
04.
Write-Host $param1 
05.
Write-Host $param2
Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
16.06.2010 um 15:53 Uhr
Okay.

Und wie würde es in umgekehrter Reihenfolge, sprich von einer PowerShell Variablen in eine Batch-Variable, funktionieren?
Bitte warten ..
Mitglied: tray-park
16.06.2010 um 15:54 Uhr
Also ich weiß mittlerweile wie man Programme aus dem Script aufruft.

Dann einfach auch die Parameter mitgeben?

01.
Invoke-Expression -Command "D:\PST-Import\archivieren.jar -$param"
Bitte warten ..
Mitglied: Miyamoto
16.06.2010 um 16:11 Uhr
Hi,
eine Batch File über gibt man so einen Parameter:

Aufruf:
01.
file.bat param1 param2
Quelltest von file.bat:
01.
echo %1 
02.
echo %2
Batch File Starten aus Powershell:
01.
powershell.exe -noexit .\zzzz.bat hallo du
Das Batch File wird innerhalb der PowerShell ausgeführt

Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
16.06.2010 um 16:48 Uhr
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:

01.
# Log-Datei wird kopiert. 
02.
Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -Destination "D:\PST-Import\PST-Files" 
03.
Write-Host "|    Log-File wurde geschrieben   |" -ForegroundColor Yellow
Nun hätte ich aber gerne, dass der Inhalt der Variablen

01.
$pstdaten=Get-ChildItem -Path $pfad -Name -Include *.pst 
02.
	 
03.
# Schleife führt den Importvorgang durch und startet das Archivierungsprogramm. 
04.
foreach ($i in $pstdaten)
nicht nur für den Import genutzt wird

01.
# PST-Datei wird importiert. 
02.
Import-Mailbox -Identity "Migration" -PSTFolderPath "D:\PST-Import\PST-Files\$i" -AllowDuplicates
sondern auch im Move-Item

01.
Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -Destination "D:\PST-Import\PST-Files\$i.*"
geht das auch?
Bitte warten ..
Mitglied: Miyamoto
16.06.2010 um 17:09 Uhr
irgend wie versteh ich Grade deine Frage nicht
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??
Bitte warten ..
Mitglied: tray-park
17.06.2010 um 10:02 Uhr
Bei der Import-Anweisung übergebe ich ja den Inhalt der Variablen $i an die PSTFolderPath Anweisung und diese löst den Inhalt dann auf.

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

01.
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.
Bitte warten ..
Mitglied: Miyamoto
17.06.2010 um 14:04 Uhr
Klar geht das du musst das nur innerhalb der "foreach" Schleife machen.
Ich würde es den so machen
mit Copy:
01.
Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -Destination "D:\PST-Import\PST-Files\$i.txt" 
oder Rename:
01.
Rename-Item -Path "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -NewName "$i.text"
Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
17.06.2010 um 17:34 Uhr
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.
01.
Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.xml" -Destination "D:\PST-Import\PST-Files\$i.xml" 
02.
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
Bitte warten ..
Mitglied: tray-park
18.06.2010 um 10:13 Uhr
Hi,

vielleicht doch noch eine Sache.

Ich rufe in dem Skript ja eine Batch Datei auf
01.
Invoke-Expression -Command "D:\PST-Import\Start-MMImport.bat -$i"
Die Batch-Datei gibt dann den Inhalt der Variablen an das Java-Programm.
01.
@echo OFF 
02.
"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:
01.
$p = Get-Process java.exe # Hier steht der Prozessname 
02.
if ($p) 
03.
04.
$p.WaitForExit() 
05.
Write-Host "|   Der Mail-Import wurde beendet!  |" -ForegroundColor Yellow 
06.
07.
else 
08.
09.
Write-Host "| Der Mail-Import wurde nicht gestartet |" -ForegroundColor Yellow 
10.
}
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
Bitte warten ..
Mitglied: Miyamoto
18.06.2010 um 11:37 Uhr
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:
01.
$p = Get-Process java* # Hier steht der Prozessname 
02.
if ($p) 
03.
04.
$p.WaitForExit() 
05.
Write-Host "|   Der Mail-Import wurde beendet!  |" -ForegroundColor Yellow 
06.
07.
else 
08.
09.
Write-Host "| Der Mail-Import wurde nicht gestartet |" -ForegroundColor Yellow 
10.
}
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

Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
18.06.2010 um 12:05 Uhr
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
Bitte warten ..
Mitglied: Miyamoto
18.06.2010 um 12:32 Uhr
Zeig mal Bitte den ganzen Code den du bis jetzt hast.
habe eine Vermutung ^^

Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
18.06.2010 um 12:38 Uhr
Habs hinbekommen. Hab die Pfad-Variable vergessen zu setzen.

Ich wette deine Vermutung hat sich bestätigt

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

01.
02.
# Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010 << Aufruf von der PowerShell zur Exchange Management Shell 
03.
04.
 
05.
################################################# 
06.
# Ausgangspunkt ist ein User mit einem Postfach # 
07.
################################################# 
08.
 
09.
# Variablen werden definiert. 
10.
$pfad="" 
11.
# $datei="" 
12.
 
13.
# Benutzer wird aufgefordert die Variable mit dem Pfad zu füllen. 
14.
$pfad = Read-Host "Bitte geben Sie den Dateipfad ein" 
15.
# Benutzer wird aufgefordert die Variable mit dem Dateinamen zu füllen. 
16.
# $datei = Read-Host "Bitte geben Sie den Dateinamen ein" 
17.
 
18.
# Überprüfung ob der Pfad im Filesystem mit dem eingegebenen Pfad übereinstimmt. 
19.
if (test-path $pfad) 
20.
 
21.
# Überprüfung ob der Dateiname im Filesystem mit dem eingegebenen übereinstimmt. 
22.
# if ((test-path $datei) -and . . .) 
23.
 
24.
25.
	Write-Host "" 
26.
	Write-Host "-------------------------------------" -ForegroundColor Blue 
27.
	Write-Host "|        Der Pfad ist okay!         |" -ForegroundColor Yellow 
28.
	Write-Host "-------------------------------------" -ForegroundColor Blue 
29.
	Write-Host "" 
30.
#$pause = Read-Host "PAUSE" 
31.
	# Inhalt des Ordners und Name der PST-Datei im Filesystem werden ausgelesen und in eine weitere Variable geschrieben. 
32.
	$pstdaten=Get-ChildItem -Path $pfad -Name -Include *.pst 
33.
	 
34.
		# Schleife führt den Importvorgang durch und startet das Archivierungsprogramm. 
35.
		foreach ($i in $pstdaten) 
36.
		{		 
37.
		# Postfach wird deaktiviert. 
38.
		Disable-Mailbox -Identity "Migration" -Confirm:$false 
39.
		Write-Host "|    Postfach wurde deaktiviert   |" -ForegroundColor Yellow 
40.
		 
41.
		#$pause = Read-Host "PAUSE"		 
42.
		 
43.
		# Postfach wird aktiviert. 
44.
		Enable-Mailbox -Identity "Migration" -Confirm:$false 
45.
		Write-Host "|    Postfach wurde aktiviert     |" -ForegroundColor Yellow 
46.
		 
47.
		#$pause = Read-Host "PAUSE"		 
48.
		 
49.
		# PST-Datei wird importiert. 
50.
		# Import-Mailbox -Identity "Migration" -PSTFolderPath "D:\PST-Import\PST-Files\$pfad$i" #-AllowDuplicates 
51.
		 
52.
		Import-Mailbox -Identity "Migration" -PSTFolderPath "$pfad$i" #-AllowDuplicates 
53.
		Write-Host "|     Mailbox wurde importiert    |" -ForegroundColor Yellow 
54.
		 
55.
		#$pause = Read-Host "PAUSE" 
56.
		 
57.
# Log-Datei wird kopiert. 
58.
# Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -Destination "D:\PST-Import\PST-Files\$i.*" 
59.
		 
60.
Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.xml" -Destination "D:\PST-Import\PST-Files\$i.xml" 
61.
Get-ChildItem D:\PST-Import\PST-Files\ *.pst.xml | Rename-Item -NewName { $_.name -replace '\.pst.xml','.xml' } 
62.
Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.log" -Destination "D:\PST-Import\PST-Files\$i.log" 
63.
Get-ChildItem D:\PST-Import\PST-Files\ *.pst.log | Rename-Item -NewName { $_.name -replace '\.pst.log','.log' } 
64.
		 
65.
	Write-Host "|    Log-File wurde geschrieben   |" -ForegroundColor Yellow 
66.
		 
67.
# $pause = Read-Host "PAUSE" 
68.
# Java-Programm wird aufgerufen. 
69.
		Invoke-Expression -Command "D:\PST-Import\Dialog.jar -$pfad$i" 
70.
		 
71.
					# Es wird gewartet, bis das Java-Programm den Mail-Import beendet hat. 
72.
			$p = Get-Process java* # Hier muss der Prozessname eingetragen werden. 
73.
			if ($p) 
74.
75.
				$p.WaitForExit() 
76.
				Write-Host "" 
77.
				Write-Host "-------------------------------------" -ForegroundColor Blue 
78.
				Write-Host "|   Der Mail-Import wurde beendet!  |" -ForegroundColor Yellow 
79.
				Write-Host "-------------------------------------" -ForegroundColor Blue 
80.
				Write-Host ""  
81.
82.
			else 
83.
84.
					Write-Host "" 
85.
					Write-Host "-----------------------------------------" -ForegroundColor Red 
86.
					Write-Host "| Der Mail-Import wurde nicht gestartet |" -ForegroundColor Yellow 
87.
					Write-Host "-----------------------------------------" -ForegroundColor Red 
88.
					Write-Host "" 
89.
90.
 
91.
		#$pause = Read-Host "PAUSE" 
92.
93.
# Stimmt der Pfad nicht überein, gibts ne Fehlermeldung. 
94.
95.
else 
96.
97.
	Write-Host "" 
98.
	Write-Host "-------------------------------------" -ForegroundColor Red 
99.
	Write-Host "|         Ungültiger Pfad!          |" -ForegroundColor Yellow 
100.
	Write-Host "-------------------------------------" -ForegroundColor Red 
101.
	Write-Host "" 
102.
}
Bitte warten ..
Mitglied: Miyamoto
18.06.2010 um 12:52 Uhr
Ja das war auch meine Vermutung

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
Bitte warten ..
Mitglied: tray-park
18.06.2010 um 12:57 Uhr
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?
Bitte warten ..
Mitglied: Miyamoto
18.06.2010 um 13:30 Uhr
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.

Das was du nicht bedacht hast, das habe ich doch schon bedacht.
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
Bitte warten ..
Mitglied: tray-park
18.06.2010 um 14:32 Uhr
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?
Bitte warten ..
Mitglied: Miyamoto
18.06.2010 um 14:47 Uhr
Jap oder du arbeitest mit einem rekursive Durchlauf.
Das würde den so aussehen:
01.
02.
# Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010 << Aufruf von der PowerShell zur Exchange Management Shell 
03.
04.
 
05.
################################################# 
06.
# Ausgangspunkt ist ein User mit einem Postfach # 
07.
################################################# 
08.
 
09.
# Variablen werden definiert. 
10.
$pfad="" 
11.
# $datei="" 
12.
 
13.
# Benutzer wird aufgefordert die Variable mit dem Pfad zu füllen. 
14.
$pfad = Read-Host "Bitte geben Sie den Dateipfad ein" 
15.
# Benutzer wird aufgefordert die Variable mit dem Dateinamen zu füllen. 
16.
# $datei = Read-Host "Bitte geben Sie den Dateinamen ein" 
17.
 
18.
# Überprüfung ob der Pfad im Filesystem mit dem eingegebenen Pfad übereinstimmt. 
19.
if (test-path $pfad) 
20.
 
21.
# Überprüfung ob der Dateiname im Filesystem mit dem eingegebenen übereinstimmt. 
22.
# if ((test-path $datei) -and . . .) 
23.
 
24.
25.
	Write-Host "" 
26.
	Write-Host "-------------------------------------" -ForegroundColor Blue 
27.
	Write-Host "|        Der Pfad ist okay!         |" -ForegroundColor Yellow 
28.
	Write-Host "-------------------------------------" -ForegroundColor Blue 
29.
	Write-Host "" 
30.
#$pause = Read-Host "PAUSE" 
31.
	# Inhalt des Ordners und Name der PST-Datei im Filesystem werden ausgelesen und in eine weitere Variable geschrieben. 
32.
	$pstdaten=Get-ChildItem -Path $pfad -Name -Include *.pst -Recurse 
33.
	 
34.
		# Schleife führt den Importvorgang durch und startet das Archivierungsprogramm. 
35.
		foreach ($i in $pstdaten) 
36.
		{		 
37.
		# Postfach wird deaktiviert. 
38.
		Disable-Mailbox -Identity "Migration" -Confirm:$false 
39.
		Write-Host "|    Postfach wurde deaktiviert   |" -ForegroundColor Yellow 
40.
		 
41.
		#$pause = Read-Host "PAUSE"		 
42.
		 
43.
		# Postfach wird aktiviert. 
44.
		Enable-Mailbox -Identity "Migration" -Confirm:$false 
45.
		Write-Host "|    Postfach wurde aktiviert     |" -ForegroundColor Yellow 
46.
		 
47.
		#$pause = Read-Host "PAUSE"		 
48.
		 
49.
		# PST-Datei wird importiert. 
50.
		# Import-Mailbox -Identity "Migration" -PSTFolderPath "D:\PST-Import\PST-Files\$pfad$i" #-AllowDuplicates 
51.
		 
52.
		Import-Mailbox -Identity "Migration" -PSTFolderPath "$pfad$i" #-AllowDuplicates 
53.
		Write-Host "|     Mailbox wurde importiert    |" -ForegroundColor Yellow 
54.
		 
55.
		#$pause = Read-Host "PAUSE" 
56.
		 
57.
# Log-Datei wird kopiert. 
58.
# Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.*" -Destination "D:\PST-Import\PST-Files\$i.*" 
59.
		 
60.
Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.xml" -Destination "D:\PST-Import\PST-Files\$i.xml" 
61.
Get-ChildItem D:\PST-Import\PST-Files\ *.pst.xml | Rename-Item -NewName { $_.name -replace '\.pst.xml','.xml' } 
62.
Move-Item "D:\Microsoft\Exchange Server\V14\Logging\MigrationLogs\*.log" -Destination "D:\PST-Import\PST-Files\$i.log" 
63.
Get-ChildItem D:\PST-Import\PST-Files\ *.pst.log | Rename-Item -NewName { $_.name -replace '\.pst.log','.log' } 
64.
		 
65.
	Write-Host "|    Log-File wurde geschrieben   |" -ForegroundColor Yellow 
66.
		 
67.
# $pause = Read-Host "PAUSE" 
68.
# Java-Programm wird aufgerufen. 
69.
		Invoke-Expression -Command "D:\PST-Import\Dialog.jar -$pfad$i" 
70.
		 
71.
					# Es wird gewartet, bis das Java-Programm den Mail-Import beendet hat. 
72.
			$p = Get-Process java* # Hier muss der Prozessname eingetragen werden. 
73.
			if ($p) 
74.
75.
				$p.WaitForExit() 
76.
				Write-Host "" 
77.
				Write-Host "-------------------------------------" -ForegroundColor Blue 
78.
				Write-Host "|   Der Mail-Import wurde beendet!  |" -ForegroundColor Yellow 
79.
				Write-Host "-------------------------------------" -ForegroundColor Blue 
80.
				Write-Host ""  
81.
82.
			else 
83.
84.
					Write-Host "" 
85.
					Write-Host "-----------------------------------------" -ForegroundColor Red 
86.
					Write-Host "| Der Mail-Import wurde nicht gestartet |" -ForegroundColor Yellow 
87.
					Write-Host "-----------------------------------------" -ForegroundColor Red 
88.
					Write-Host "" 
89.
90.
 
91.
		#$pause = Read-Host "PAUSE" 
92.
93.
# Stimmt der Pfad nicht überein, gibts ne Fehlermeldung. 
94.
95.
else 
96.
97.
	Write-Host "" 
98.
	Write-Host "-------------------------------------" -ForegroundColor Red 
99.
	Write-Host "|         Ungültiger Pfad!          |" -ForegroundColor Yellow 
100.
	Write-Host "-------------------------------------" -ForegroundColor Red 
101.
	Write-Host "" 
102.
}
Ich habe in Zeile 32 Folgendes angehängt
01.
-Recurse
nun muss man nur noch den Obersten Ordner angeben.

Edit: sprich
Ordner #den muss ich angeben 
|-Ordner 
|  |-Datei 
|  |-... 
|-Ordner 
|  |-Datei 
|  |-...
Bitte warten ..
Mitglied: tray-park
21.06.2010 um 09:03 Uhr
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.

01.
$slash = "\" 
02.
$match = "\$" 
03.
$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/"
Bitte warten ..
Mitglied: Miyamoto
21.06.2010 um 09:37 Uhr
Hi,
klar weiß ich wie es geht
und zwar so:
01.
$var="D:\test\zzz\datei.pst" 
02.
$var_neu=$var.Replace("\","/") 
03.
 
04.
Write-Host "alter Pfad: " $var 
05.
Write-Host "neuer Pfad: " $var_neu
Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
21.06.2010 um 09:53 Uhr
Hi, werd ich gleich mal ausprobieren.

Nun ist es leider so, dass meine Get-Child Anweisung die Logdateien nicht mehr umbenennt.
01.
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
01.
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?
Bitte warten ..
Mitglied: tray-park
21.06.2010 um 11:07 Uhr
Sorry, hab nicht nachdacht.

Hab einfach ein -Recurse an die Get-Child Anweisung angehängt
Bitte warten ..
Mitglied: Miyamoto
21.06.2010 um 11:12 Uhr
Hi,
geht denn mittlerweile alles oder gibt es immer noch ein paar Probleme?

Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
21.06.2010 um 11:22 Uhr
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.
Bitte warten ..
Mitglied: Miyamoto
21.06.2010 um 11:53 Uhr
Wenn du Hilfe braust sag beschied
oder wen du fertig bist mit deinem Skript, den weiß ich wann ich den Beitrag nicht mehr anschauen muss

Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
21.06.2010 um 12:16 Uhr
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!
Bitte warten ..
Mitglied: tray-park
21.06.2010 um 12:31 Uhr
Eines wäre da noch.

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

01.
$ini=D:\PST-Import\ 
02.
Invoke-Expression -Command "$ini""Dialog.jar -$ini"
Das gefällt der Shell aber nicht. Wie kann ich bei dieser Anweisung die Pfadangabe auflösen?
Bitte warten ..
Mitglied: Miyamoto
21.06.2010 um 13:42 Uhr
Hi,
also ich würde es mal so probieren:
01.
$ini="D:\PST-Import\"  
02.
Invoke-Expression -Command $ini"Dialog.jar -$ini"
Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
21.06.2010 um 13:52 Uhr
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
01.
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.
01.
$pstdaten=Get-ChildItem -Path $pfad -Name -Include *.pst -Recurse -Exclude *.xml
Aber leider erfolgslos.
Bitte warten ..
Mitglied: Miyamoto
21.06.2010 um 14:39 Uhr
Hi,
du kannst folgendes machen:
01.
$pfad_pst="d:\zzz\datei.pst" 
02.
 
03.
$pfad_xml=$pfad_pst.Replace(".pst",".xml") 
04.
 
05.
if(test-path $pfad_xml){ 
06.
    Write-Host "Ja eine xml Datei ist vorhanden" 
07.
}else{ 
08.
    Write-Host "Keine xml Datei Vorhanden" 
09.
}
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
Bitte warten ..
Mitglied: tray-park
21.06.2010 um 14:54 Uhr
Versuch ich mal.

Aber ändere ich mit der Replace Methode nicht im Variableninhalt Zeichen?
So wie du es oben beschrieben hast?
01.
$var="D:\test\zzz\datei.pst"  
02.
$var_neu=$var.Replace("\","/") 
Bitte warten ..
Mitglied: tray-park
21.06.2010 um 15:12 Uhr
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 . . .
Bitte warten ..
Mitglied: Miyamoto
21.06.2010 um 15:17 Uhr
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
Bitte warten ..
Mitglied: tray-park
21.06.2010 um 15:29 Uhr
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?
Bitte warten ..
Mitglied: Miyamoto
21.06.2010 um 16:02 Uhr
Ganz einfach, mit dem Code den ich dir gegeben habe:
01.
$pfad_pst="d:\zzz\datei.pst" 
02.
 
03.
$pfad_xml=$pfad_pst.Replace(".pst",".xml") 
04.
 
05.
if(test-path $pfad_xml){ 
06.
    Write-Host "Ja eine xml Datei ist vorhanden" 
07.
}else{ 
08.
    Write-Host "Keine xml Datei Vorhanden" 
09.
}
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
Bitte warten ..
Mitglied: tray-park
21.06.2010 um 16:06 Uhr
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.
Bitte warten ..
Mitglied: Miyamoto
21.06.2010 um 16:19 Uhr
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.
Bitte warten ..
Mitglied: tray-park
21.06.2010 um 16:43 Uhr
Das Skript ausführen ohne, die Exchange Management Console zu öffnen kann ich doch mit einer Batch machen oder?
01.
powershell.exe -noexit .\Auto-Migration.ps1
Dann öffnet sich aber nicht die Management Shell sondern der Command.

Deshalb hab ich vorsichtigerweise mal
01.
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?
Bitte warten ..
Mitglied: Miyamoto
22.06.2010 um 09:08 Uhr
Hi,
mit dem Batch Befehl,
01.
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
Bitte warten ..
Mitglied: tray-park
22.06.2010 um 09:26 Uhr
Okay! So hatte ich es vor.

Das Java-Programm wird ja wie folgt ausgeführt:
01.
Invoke-Expression -Command D:\PST-Import\Dialog.jar $var1 $var2" 
02.
<code> 
03.
Nun versuche ich vergebens dem Java-Programm die Speicheradressierung zuzuweisen. 
04.
 
05.
Über ne Batch-Datei funktioniert das, indem man die Parameter andhängt 
06.
<code> 
07.
"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:
01.
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!
Bitte warten ..
Mitglied: Miyamoto
22.06.2010 um 10:15 Uhr
Also eine frage vor weg,
ist Java in den Umgebungsvariablen gesetzt?

Wenn ja, den kannst du folgendes machen
01.
Invoke-Expression -Command "java -Xms256m -Xmx512m -jar" "D:\PST-Import\Dialog.jar $var1 $var2"
in der PowerShell geht es auch
Bitte warten ..
Mitglied: tray-park
22.06.2010 um 11:14 Uhr
Die JAVA_HOME Umgebungsvariable über die Systemeigenschaften zu setzen sollte doch genügen oder?

Wenn ja, dann funktioniert es auch so leider nicht.
Bitte warten ..
Mitglied: tray-park
22.06.2010 um 14:38 Uhr
Diese Antwort bekomm ich von der PowerShell
01.
Invoke-Expression : Es wurde kein Positionsparameter gefunden, der das Argument "D:\PST-Import\Dialog.jar" akzeptiert. 
02.
Bei Zeile:1 Zeichen:18 
03.
+ Invoke-Expression <<<<  -Command "java -Xms256m -Xmx512m -jar" "D:\PST-Import\Dialog.jar" 
04.
    + CategoryInfo          : InvalidArgument: (:) [Invoke-Expression], ParameterBindingException 
05.
    + 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?
Bitte warten ..
Mitglied: Miyamoto
23.06.2010 um 16:21 Uhr
Was du mal bitte ausprobieren kannst ist:
01.
java -Xms256m -Xmx512m -jar "D:\PST-Import\Dialog.jar" 
so geht es bei mir.
Ansonsten fehlt mir in Moment nix mehr ein.

Gruß Miyamoto
Bitte warten ..
Mitglied: tray-park
24.06.2010 um 09:39 Uhr
Hi,

das hatte auch nicht funktioniert. Ich hab nen kleinen Umweg über ne Batch-Datei gemacht:
01.
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.
01.
$inineu=$inipfad.Replace("\","/")
Nun versuch ich das auch mit den Dateinamen.
01.
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
Bitte warten ..
Mitglied: tray-park
24.06.2010 um 12:54 Uhr
Hi,

mal kurz zurück zum eigentlichen "umlenken"
Mit
01.
Start-Transcript
Kann man ein Logfile von der Shell erstellen lassen.
Bitte warten ..
Mitglied: tray-park
24.06.2010 um 13:38 Uhr
Haha.

Leerzeichen hinter $path vergessen!
01.
Get-ChildItem $path *.pst -Recurse | Rename-Item -NewName { $_.name -replace ' ','' }
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

Frage von Raaja89 zum Thema Batch & Shell ...

Windows Server
gelöst Powershell array zeilenweise in Textdatei ausgeben (6)

Frage von Peter0816 zum Thema Windows Server ...

Batch & Shell
gelöst Powershell: Verzeichnis auf hidden setzen (nicht Inhalt) (2)

Frage von DanielBodensee zum Thema Batch & Shell ...

Batch & Shell
Powershell Script um Inhalt von Dateien zu vergleichen (14)

Frage von zamsi7 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...