blub 115 Geschrieben 26. Dezember 2007 Melden Teilen Geschrieben 26. Dezember 2007 Hallo, Ich experimentiere momentan mit der Powershell 1.0 und komm nicht weiter . folgender Code läuft einwandfrei PS C:\mytest> $path="C:\WINDOWS\system32\aclui.dll" PS C:\mytest> [system.Diagnostics.FileVersionInfo]::GetVersionInfo($path ) Ausgabe: ProductVersion FileVersion FileName -------------- ----------- -------- 5.2.3790.3959 5.2.3790.3959... C:\WINDOWS\system32\aclui.dll analog dazu will ich mit der Klasse System.IO.FileInfo z.B. die Eigenschaft "lastaccesstime" eines Files auslesen mit PS C:\mytest> $path="C:\WINDOWS\system32\aclui.dll" PS C:\mytest> [system.IO.FileInfo]::lastaccesstime($path) bekomme ich die Ausgabe: Method invocation failed because [system.IO.FileInfo] doesn't contain a method named 'lastaccesstime'. At line:1 char:37 + [system.IO.FileInfo]::lastaccesstime( <<<< $path) Die Methode existiert natürlich bzw. auch andere Methoden liefern diegleiche Ausgabe Dagegen läuft problemlos PS C:\mytest> $path=get-item "C:\WINDOWS\system32\aclui.dll" PS C:\mytest> write-host $path.LastWriteTime Ausgabe: 17.02.2007 15:02:40 Was ist an diesem Aufruf falsch? PS C:\mytest> [system.IO.FileInfo]::lastaccesstime($path) merci blub Zitieren Link zu diesem Kommentar
woiza 10 Geschrieben 27. Dezember 2007 Melden Teilen Geschrieben 27. Dezember 2007 Hallo,Ich experimentiere momentan mit der Powershell 1.0 und komm nicht weiter . Trifft sich, ich auch ;) folgender Code läuft einwandfrei PS C:\mytest> $path="C:\WINDOWS\system32\aclui.dll" PS C:\mytest> [system.Diagnostics.FileVersionInfo]::GetVersionInfo($path ) Ausgabe: ProductVersion FileVersion FileName -------------- ----------- -------- 5.2.3790.3959 5.2.3790.3959... C:\WINDOWS\system32\aclui.dll Klar, das geht, weil GetVersionInfo ja auch eine (statische) Funktion ist, der du einen Parameter übergibst. Da sie statisch ist, musst du vorher auch kein Objekt instanziieren. analog dazu will ich mit der Klasse System.IO.FileInfo z.B. die Eigenschaft "lastaccesstime" eines Files auslesen mit PS C:\mytest> $path="C:\WINDOWS\system32\aclui.dll" PS C:\mytest> [system.IO.FileInfo]::lastaccesstime($path) bekomme ich die Ausgabe: Method invocation failed because [system.IO.FileInfo] doesn't contain a method named 'lastaccesstime'. At line:1 char:37 + [system.IO.FileInfo]::lastaccesstime( <<<< $path) Die Methode existiert natürlich bzw. auch andere Methoden liefern diegleiche Ausgabe Da liegt das Problem. Die Methode existiert eben nicht. lastaccesstime ist eine Eigenschaft eines Objektes vom Typ FileSystemInfo. Du rufst es aber wie eine Methode auf, daher mault die Powershell auch, dass es diese Methode nicht gibt. Du müsstest folgendes aufrufen: $path="C:\WINDOWS\system32\aclui.dll" $file = New-Object -TypeName System.IO.FileInfo $path $file.LastAccessTime Mit dem new-Object instanziierst du ein Objekt vom Typ FileInfo und übergibst $path an den Konstruktor. Warum da keine Klammer kommt, müsste man mal den Sprachdesigner fragen. Danach hast du ein Objekt $file, des Eigenschaft du dann in Zeile 3 abfragst. Du musst übrigens FileInfo und nicht FileSystemInfo nehmen, weil zweiteres eine abstrakte Klasse ist. Dagegen läuft problemlos PS C:\mytest> $path=get-item "C:\WINDOWS\system32\aclui.dll" PS C:\mytest> write-host $path.LastWriteTime get-Item macht das gleiche, wie get-Object. Get-Item kann aber nur bestimmte Objekte erzeugen, etwa Filesystem, Registry. Gruß woiza Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 27. Dezember 2007 Autor Melden Teilen Geschrieben 27. Dezember 2007 Hallo Woiza, Vielen Dank für deine SuperErklärung! Da wäre ich wohl alleine nicht drauf gekommen! Schöne Grüsse blub Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.