emeriks
Goto Top

VS Code Fehler mit Klassen

Hi,
ich habe ein komisches Problem und komme damit auch nicht über die Suchen im Web weiter. Selbst der Copilot kapiert das nicht.

u.g. Code liefert innerhalb des VS Code beim Ausführen einen Fehler bzgl. des Typs Microsoft.ActiveDirectory.Management.ADEntity und bricht dann ab. Aber erst in Zeile 7, also nur innerhalb der Klasse.

Dieses Verhalten ist neu. Selbst wenn ich Scripte lade, welche bereits produktiv im Einsatz sind und auf genau demselben Computer mit VS Code programmiert wurden, kommt jetzt dieser Fehler.

Ich habe VS Code schon neu gestartet. Es ändert nichts.

Die Meldung ist
ParserError: ....Pfad....\Test.ps1:7:6
Line |
   7 |      [Microsoft.ActiveDirectory.Management.ADEntity] $SourceObject
     |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Unable to find type [Microsoft.ActiveDirectory.Management.ADEntity].


Hat jemand ne Idee, was das sein könnte.

E.

# außerhalb der Klasse
[Microsoft.ActiveDirectory.Management.ADEntity] $SourceObject = $null
[Microsoft.ActiveDirectory.Management.ADEntity] $DestinationObject = $null

class MyClass {
# innerhalb der Klasse
    [Microsoft.ActiveDirectory.Management.ADEntity] $SourceObject
    [Microsoft.ActiveDirectory.Management.ADEntity] $DestinationObject

    MyClass($SourceObject, $DestinationObject) {
        $this.SourceObject = $SourceObject
        $this.DestinationObject = $DestinationObject
    }
}

# Erstelle eine Instanz der Klasse
$instance = [MyClass]::new($SourceObject, $DestinationObject)

# Überprüfe die Initialisierung
$instance.SourceObject
$instance.DestinationObject

Content-ID: 672049

Url: https://administrator.de/forum/vs-code-fehler-mit-klassen-672049.html

Ausgedruckt am: 19.03.2025 um 19:03 Uhr

mbehrens
mbehrens 19.03.2025 um 16:01:10 Uhr
Goto Top
Zitat von @emeriks:

Dieses Verhalten ist neu. Selbst wenn ich Scripte lade, welche bereits produktiv im Einsatz sind und auf genau demselben Computer mit VS Code programmiert wurden, kommt jetzt dieser Fehler.

Unterschiedliche PS Versionen?

Hilft ein passendes
using module <module-name>
um dem Parser einen Hinweis zu geben?
BiberMan
BiberMan 19.03.2025 aktualisiert um 16:14:45 Uhr
Goto Top
Normal, guckst du
Klassen werden noch vor der Ausführung geparsed bevor überhaupt irgendein Type geladen wird der nicht im GAC liegt.
emeriks
emeriks 19.03.2025 aktualisiert um 17:30:21 Uhr
Goto Top
@BiberMan
Danke, aber ich bin mir nicht sicher, wie mir das hilft bzw. ob überhaupt zutreffend.

Mein Problem ist doch nicht, einen Typ zu importieren, diesen verfügbar zu machen, sondern, dass er in ein und demselben Script außerhalb einer Klasse im VS Code funktioniert und innerhalb eine Klasse im VS Code nicht funktioniert.
Wenn ich das Script direkt in der Shell ausführe, dann funktioniert alles. Es geht rein um das Verhalten von VS Code.
emeriks
emeriks 19.03.2025 um 17:35:59 Uhr
Goto Top
Zitat von @mbehrens:
Hilft ein passendes
using module <module-name>
um dem Parser einen Hinweis zu geben?

Da meckert VS Code
Could not find the module 'ActiveDirectory'
rubberman
rubberman 19.03.2025 um 18:08:34 Uhr
Goto Top
Moin.

Fischen im Trüben - wenn VS Code das Modul nicht findet, dann ist es eher zufällig, dass er den Code in der Klasse zuerst anmeckert. Ich kenne jetzt nicht alle Releases von VS Code, aber kann es sein, dass du eine 32-Bit Version laufen hast und WOW64 im Spiel ist?
[IntPtr]::Size
... ist immer 8, oder einmal 8 und einmal 4?

Gruß
Steffen
BiberMan
BiberMan 19.03.2025 aktualisiert um 18:20:15 Uhr
Goto Top
Zitat von @emeriks:

Zitat von @mbehrens:
Hilft ein passendes
using module <module-name>
um dem Parser einen Hinweis zu geben?

Da meckert VS Code
Could not find the module 'ActiveDirectory'

Ist ja auch kein Modul sondern ein assembly ergo wenn using mit "Type" dann
using assembly ........

Mein Problem ist doch nicht, einen Typ zu importieren, diesen verfügbar zu machen, sondern, dass er in ein und demselben Script außerhalb einer Klasse im VS Code funktioniert und innerhalb eine Klasse im VS Code nicht funktioniert.
Du fügst das AD Assembly ja nirgendwo mit Add-Type oder using in der Klasse oder in der parent Session hinzu, Klassen arbeiten in PS halt etwas anders und nicht mit sämtlichen Features wie ihre .NET Pendants , diese werden geparsed noch bevor das genannte Assembly im selben Skript geladen ist.
Also lade erst das Assembly und dann die Klasse über ein separates Skript in die PS Session.
Lies dir die Kommentare in den o.g. Links nochmal in Ruhe durch dann kommst du drauf 😉