Skript läuft unter win7 nicht aber unter win10
Moin.
Ich kriege bei meinem Script unter Win7 immer folgenden Fehler raus. Unter Win 10 läuft es ohne Probleme.
Im Anhang befindet sich der Fehlerext und das Script.
Vielleicht kann mir ja jemand helfen
MfG
Cedric
Fehlertext
Ich kriege bei meinem Script unter Win7 immer folgenden Fehler raus. Unter Win 10 läuft es ohne Probleme.
Im Anhang befindet sich der Fehlerext und das Script.
Vielleicht kann mir ja jemand helfen
MfG
Cedric
#
# Automatische Verarbeitung von Passwortgeschützen ZIP-Dateien
# Datei soll entpackt werden, danach in einen anderen Ordner überführt werden.
cd.. C:\Entpacken_LST_Mails_NICHT_VERSCHIEBEN_ODER_LÖSCHEN
$InputFolder = "C:\Entpacken_LST_Mails_NICHT_VERSCHIEBEN_ODER_LÖSCHEN\Input\"
$IntermediateFolder = "C:\Entpacken_LST_Mails_NICHT_VERSCHIEBEN_ODER_LÖSCHEN\Intermediate\"
$OutputFolder = "C:\Users\ELW\Desktop\Output enstschlüsselte LST Mails\"
$Password = "Passwort"
$ExePath7Zip = ".\Binary\7-Zip\7z.exe"
#General Functions
Function Open-7ZipFile{
Param(
[Parameter(Mandatory=$true)]
[string]$Source,
[Parameter(Mandatory=$true)]
[string]$Destination,
[string]$Password,
[Parameter(Mandatory=$true)]
[string]$ExePath7Zip,
[switch]$Silent
)
$Command = "& `"$ExePath7Zip`" e -o`"$Destination`" -y" + $(if($Password.Length -gt 0){" -p`"$Password`""}) + " `"$Source`""
If($Silent){
Invoke-Expression $Command | out-null
}else{
$Command
Invoke-Expression $Command
}
}
Function Process-ZipFile{
# Verarbeitung der ZIP-Dateien
foreach ($file in (gci -Path $InputFolder)){
Open-7ZipFile -ExePath7Zip "C:\Program Files\7-Zip\7z.exe" -Source $file.FullName -Destination $IntermediateFolder -Password $Password -Silent
Remove-Item -Path $file.FullName
}
Sleep -Seconds 2
# Öffnen und Verschieben der PDF-Datei
$file = $null
foreach ($file in (gci -Path $IntermediateFolder)){
# Dateien aus dem Intermediate-Ordner kopieren
Move-Item -Path $file.FullName -Destination $OutputFolder
# Datei löschen
Remove-Item -Path $file.FullName
#Datei im neuen Ordner öffnen
Start-Process -FilePath ($OutputFolder + "\" + $file.Name)
}
Start-Sleep 1
}
while ($true) {
Process-ZipFile
sleep 5}
Fehlertext
PS C:\> C:\Entpacken_LST_Mails_NICHT_VERSCHIEBEN_ODER_LÖSCHEN\Verarbeitung.ps1
Invoke-Expression : Der Zeichenfolge, beginnend mit:
Bei Zeile:1 Zeichen:231
+ & "C:\Program Files\7-Zip\7z.exe" e -o"C:\Entpacken_LST_Mails_NICHT_VERSCHIEBEN_ODER_LÖSCHEN\Intermediate\" -y -p"Passwort" "C:\Entpacken_LST_Mails_NICHT_VERSCHIEBEN_ODER_LÖSCHEN\Input\Abschlussbericht_ELR3103_1220407774.pdf.zip <<<< "
fehlt der Terminator: ".
Bei C:\Entpacken_LST_Mails_NICHT_VERSCHIEBEN_ODER_LÖSCHEN\Verarbeitung.ps1:39 Zeichen:26
+ Invoke-Expression <<<< $Command | out-null
+ CategoryInfo : ParserError: (:String) [Invoke-Expression], IncompleteParseException
+ FullyQualifiedErrorId : TerminatorExpectedAtEndOfString,Microsoft.PowerShell.Commands.InvokeExpressionCommand
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 5151088363
Url: https://administrator.de/contentid/5151088363
Ausgedruckt am: 23.11.2024 um 22:11 Uhr
4 Kommentare
Neuester Kommentar
Lass die Backslashes am Ende der Pfade in Zeilen 7-11 Weg. Die führen zu einem Escaping der folgenden Anführungszeichen im Konsolenaufruf und sind auch nicht nötig.
p.s. Warum ein Extra Invoke-Expression und nicht gleich Start-Process?
Die W7 Maschinen würde ich aber dringend mind. auf PS5.1 hochziehen, die PS 2.0 hat ja nicht wenige Macken.
Gruß S.
p.s. Warum ein Extra Invoke-Expression und nicht gleich Start-Process?
(gci -Path $InputFolder)
Sollte man auch noch auf ZIP-Dateien eingrenzen da ansonsten auch evt. Unterordner in die Liste kommen (Windows 7 PS 2.0 kompatibel da es dort keinen -File Parameter gibt)Get-ChildItem -Path $InputFolder -Filter *.zip | ?[!$_.PSIsContainer}
Gruß S.
Hi!
also zuerst würde ich Invoke-Expression mit Start-Process ersetzen. Invoke-Expression macht nur Sinn, wenn du einen String als Befehl absetzen willst. Zb so:
Der BackTick in deinem Invoke-Expression Aufruf ist genau wozu? Meistens wird er als "Word-Wrap-Operator" verwendet. Alle anderen Funktionen die er sonst noch hat sind meiner Ansicht nach in dem Commando das du anwendest eher hinderlich.
Siehe dazu:
learn.microsoft.com/de-de/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-5.1
Ich habe die Extract-Methode mal angepasst:
Das Noun in Powershell sollte, soweit ich mich noch richtig erinnere, nicht mit einer Nummer beginnen. Ich finde das Whitepaper gerade nicht mehr dazu. Eventuell hat es sich aber auch schon erledigt.
Grüße!
also zuerst würde ich Invoke-Expression mit Start-Process ersetzen. Invoke-Expression macht nur Sinn, wenn du einen String als Befehl absetzen willst. Zb so:
Function Invoke-Laborious() {
Param(
[Parameter(Mandatory=$true)]
[string]$Expression
)
Invoke-Expression "& $($Expression)"
}
$expression__ = 'Start-Process -FilePath "cmd.exe" -ArgumentList "/c Timeout /T 10"'
Invoke-Laborious -Expression $expression__
Der BackTick in deinem Invoke-Expression Aufruf ist genau wozu? Meistens wird er als "Word-Wrap-Operator" verwendet. Alle anderen Funktionen die er sonst noch hat sind meiner Ansicht nach in dem Commando das du anwendest eher hinderlich.
Siehe dazu:
learn.microsoft.com/de-de/powershell/module/microsoft.powershell.core/about/about_special_characters?view=powershell-5.1
Ich habe die Extract-Methode mal angepasst:
Function Open-ZipFile{
Param(
[Parameter(Mandatory=$true)]
[string]$ExePath7Zip,
[string]$Source,
[string]$Destination,
[Parameter(Mandatory=$true)]
[string]$Password,
[switch]$Silent
)
#$Command = "& `"$ExePath7Zip`" e -o`"$Destination`" -y" + $(if($Password.Length -gt 0){" -p`"$Password`""}) + " `"$Source`""
if([string]::IsNullOrEmpty($Password)) {
$Command = "$($ExePath7Zip) e $($Source) -o$($Destination) -y"
}
else {
$Command = "$($ExePath7Zip) e $($Source) -o$($Destination) -p$($Password) -y"
}
If($Silent.IsPresent){
$result__ = Start-Process -FilePath "cmd.exe" -ArgumentList "/c $($Command)" -Wait -NoNewWindow
#Invoke-Expression "$ $($Command)" | out-null
}else{
$result__ =Start-Process -FilePath "cmd.exe" -ArgumentList "/c $($Command)" -Wait
#Invoke-Expression "$ $($Command)"
}
}
$InputFolder = "C:\Entpacken_LST_Mails_NICHT_VERSCHIEBEN_ODER_LÖSCHEN\Input\"
$IntermediateFolder = "C:\Entpacken_LST_Mails_NICHT_VERSCHIEBEN_ODER_LÖSCHEN\Intermediate\"
$OutputFolder = "C:\Users\ELW\Desktop\Output enstschlüsselte LST Mails\"
$Password = "Passwort"
$ExePath7Zip = ".\Binary\7-Zip\7z.exe"
Open-ZipFile -ExePath7Zip "C:\Program Files\7-Zip\7z.exe" -Source $file.FullName -Destination $IntermediateFolder -Password $Password -Silent
Das Noun in Powershell sollte, soweit ich mich noch richtig erinnere, nicht mit einer Nummer beginnen. Ich finde das Whitepaper gerade nicht mehr dazu. Eventuell hat es sich aber auch schon erledigt.
Grüße!