Zitat von blub
Hallo,
Ich experimentiere momentan mit der Powershell 1.0 und komm nicht weiter .
|
Trifft sich, ich auch
folgender Code läuft einwandfrei
Code:
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
Code:
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:
Code:
$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
Code:
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