herrtaler
Goto Top

Powershell - Powershell script aus cmd aufrufen

Bekomme Fehlermeldung, wenn ich Powershell-script aus cmd aufrufen möchte

Wenn ich mein Powershell-script aus einem Powershell-Fenster aufrufe läuft mein Script ohne Probleme. Wenn ich hingegen den gleichen Aufruf aus einem CMD Fenster tätige bekomme ich folgende Fehlermeldung.

c:\windows und 3 sind Parameter, die ich an das Script übegebe. In dem Script mache ich ein
"get-item $verzeichnis > $fileNew" und durchsuche es mit einem select-string. ($verzeichnis entspricht c:\windows)

Wenn ich nicht c:\windows nehme sondern z.B. temp geht der aufruf. Es scheint also nur an der Anzahl der Zeichen zu liegen.

 
Y:\>powershell.exe test.ps1 c:\temp\test7.ps1 c:\windows\* 3

c:\windows un die 3 sind Parameter die ich übergebe


Fehlermeldung:

 

Select-String : "-a---        07.07.2011     09:39    1458176 HP Enterprise Dis  
covery Agent (x86" wird analysiert - Nicht genügend )-Zeichen.  
Bei C:\temp\test7.ps1:52 Zeichen:32
+        $vorhanden=select-string <<<<  -path $fileOld -pattern $suchtext -Quie
t
    + CategoryInfo          : NotSpecified: (:) [Select-String], ArgumentExcep
   tion
    + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Co
   mmands.SelectStringCommand

Select-String : "                                             ) 2.52.000.7292.m  
si               " wird analysiert - Zu viele )-Zeichen.  
Bei C:\temp\test7.ps1:51 Zeichen:21
+        select-string <<<<  -path $fileOld -pattern $suchtext >> $fileError
    + CategoryInfo          : NotSpecified: (:) [Select-String], ArgumentExcep
   tion
    + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Co
   mmands.SelectStringCommand

Select-String : "                                             ) 2.52.000.7292.m  
si               " wird analysiert - Zu viele )-Zeichen.  
Bei C:\temp\test7.ps1:52 Zeichen:32
+        $vorhanden=select-string <<<<  -path $fileOld -pattern $suchtext -Quie
t
    + CategoryInfo          : NotSpecified: (:) [Select-String], ArgumentExcep
   tion
    + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Co
   mmands.SelectStringCommand

Content-ID: 172213

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

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

0cool
0cool 29.08.2011 um 19:20:59 Uhr
Goto Top
Hallo HerrTaler:

was macht der " * " bei deinen Parametern?
Normaler weise ist der Stern eine Wildcard.

Gruß

0cool
HerrTaler
HerrTaler 30.08.2011 um 09:19:44 Uhr
Goto Top
Der "*" gehört zu der Zeichenkette, die ich übergebe und wird später auch als wildcard genutzt. Das ist auch nicht das Problem. Mich wundert einfach, dass es scheinbar einen Unterschied gibt, ob ich aus einem cmd den Aufruf (powershell.exe test.ps1 c:\temp\test7.ps1 c:\windows\* 3) starte oder aus einem Powershell Fenster (./test.ps1)
0cool
0cool 30.08.2011 um 13:16:04 Uhr
Goto Top
Hallo HerrTaler,

jetzt hab ich das problem gesehen.

Ich Aufruf ist: powershell.exe test.ps1 c:\temp\test7.ps1 c:\windows\* 3

Der richtige Aufruf wäre powershell.exe c:\temp\test7.ps1 c:\windows\* 3 (ungetestet)

Bei Ihrem Aufruf haben Sie einmal zuviel das Script angegeben und das wäre an der Zweiten stelle

Syntax:
powershell.exe "C:\temp\test.ps1" para1 para2  

Gruß

0cool
HerrTaler
HerrTaler 30.08.2011 um 14:25:01 Uhr
Goto Top
Sorry ich war zu dämlich den Aufruf richtig ins Forum einzustellen.

im cmd:

c:\temp> powershell ./test.ps1 c:\windows

im powershell:

PS C:\temp> powershell ./test1.ps1 c:\windows\*

c:\temp> bzw PS c:\temp> ist der Prompt (Der Aufruf ist also genau gleich)


Unten ist der Programmteil, welches das Problem verursacht. Das Problem tritt auch nur auf bei Verzeichnissen mit "vielen" Unterverzeichnissen ("viele" das ist bei mir schon das Windows-Verzeichnis). Ich habe mein script inzwischen anders gelöst, aber die Ursache würde mich trotzdem interessieren.

# Variable
$a=0
$verzeichnis = $args                                 
$fileNew = "c:\temp\new.txt"                              
$fileOld = "c:\temp\old.txt"                              
$fileError = "c:\temp\error.txt"                          
$suchtext="text"                                          
$count=0                                                
$vorhanden=0                                            
$verzeichnis1= $args                                 
 
 
 

 
#aktuellen Verzeichnisstatus abfragen
get-item $verzeichnis > $fileNew
 
#Logdatei leeren
"---------    Errorlog       " + "Verzeichnis:" + $Verzeichnis + "    --------" > $fileError  
 
# In der Datei erst ab Zeile 8 anfangen zu suchen
$file = [system.io.file]::OpenText($fileNew)
For ($a = 1; $a -le 7; $a++)
   {
   $suchtext=$file.ReadLine()
   }
 
# Zeile für Zeile aktueller Verzeichnisinhalt mit altem Verzeichnisinhalt vergleichen
while (!($file.EndOfStream))
    {
    $suchtext=$file.ReadLine()
    select-string -path $fileOld -pattern $suchtext >> $fileError
    $vorhanden=select-string -path $fileOld -pattern $suchtext -Quiet
 
#coutner für die gefundenen Dublikate setzen
     if ($vorhanden -eq „true“)
           {
           $count=$count+1
           }
 
     }
 
# Datei wieder schließen
$file.close()
0cool
0cool 30.08.2011 um 14:44:21 Uhr
Goto Top
HerrTaler: Sorry da muss ich passen, so weit kenn ich mich mit der PowerShell nicht aus. Da müssen andere Leute dran.

Viel Erfolg

0cool
0cool
0cool 30.08.2011 um 14:50:06 Uhr
Goto Top
HerrTaler: Sorry da muss ich passen, so weit kenn ich mich mit der PowerShell nicht aus. Da müssen andere Leute dran.

Viel Erfolg

0cool
Kraemer
Kraemer 17.02.2023 um 16:03:10 Uhr
Goto Top
ungetestet

$content1=get-childitem -path $args -file
$content2=get-childitem -path $args[1] -file

$content1 | %{
if ($_.name -in ($content2.name)){
write-host $_.name 
}