Visual Studio Code kann keine anderen DSC-Module als PSDesiredStateConfiguration laden

Visual Studio Code kann keine anderen DSC-Module als PSDesiredStateConfiguration laden

Ich habe Visual Studio Code installiert und die PowerShell-Erweiterung aktiviert

Ich möchte eine Sollzustandskonfiguration mit einigen benutzerdefinierten Modulen wie xHyper-Vund schreiben xPSDesiredStateConfiguration.

Das Problem ist nun, dass Visual Studio Code die PSDesiredStateConfigurationDSC-Ressource, die eine Standardressource ist, nur findet, wenn ich sie über importieren möchte Import-DSCResource. Andere installierte DSC-Ressourcen kann Visual Studio Code nicht laden. In PowerShell ISE funktioniert alles wie hier zu sehen (links VSCode, rechts ISE):

Beschädigte DSC-Ressource in VSCode

Das Seltsame ist jedoch, dass dies nur den Editor selbst betrifft. Im Terminal in vscode werden DSC-Ressourcen in allen Modulen gefunden. Siehe dieses Beispiel:

PS Z:\Powershell-Scripts\DesiredStateConfiguration> Get-DscResource xVHD

ImplementedAs   Name                      ModuleName                     Version    Properties
-------------   ----                      ----------                     -------    ----------
PowerShell      xVHD                      xHyper-V                       3.17.0.0   {Name, Path, DependsOn, Ensure...}


PS Z:\Powershell-Scripts\DesiredStateConfiguration> Get-DscResource WindowsFeature

ImplementedAs   Name                      ModuleName                     Version    Properties
-------------   ----                      ----------                     -------    ----------
PowerShell      WindowsFeature            PSDesiredStateConfiguration    1.1        {Name, Credential, DependsOn, Ensure...}

es findet auch die Module selbst:

PS Z:\Powershell-Scripts\DesiredStateConfiguration> Get-Module xHyper-V, PSDesiredStateConfiguration -ListAvailable


    Verzeichnis: C:\Program Files\WindowsPowerShell\Modules


ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   3.17.0.0   xHyper-V


    Verzeichnis: C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules


ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   1.1        PSDesiredStateConfiguration         {Set-DscLocalConfigurationManager...}

Der einzige Unterschied besteht darin, dass sie sich an unterschiedlichen $env:PSModulePathStellen befinden, aber es funktioniert trotzdem nicht, wenn ich das xHyper-VModul in den Pfad kopiere, in dem PSDesiredStateConfigurationes sich auch befindet.

Das Komische ist, dass dies anscheinend nur das IntelliSense des Editors betrifft. Wenn ich die Konfiguration mit meinen benutzerdefinierten DSC-Modulen ausführe, wird die *.mofDatei trotzdem korrekt erstellt.

Wie kann ich das beheben?

Was ich versucht habe, um das Problem zu beheben:

  • alle benutzerdefinierten DSC-Module gelöscht und neu installiert
  • PowerShell-Erweiterung in VSCode deinstalliert, VSCode neu gestartet und erneut installiert
  • VSCode komplett neu installiert

Antwort1

Facepalm. Etwas peinlich, aber 1 Minute nachdem ich das gepostet habe, habe ich die Antwort gefunden:

Habe ich auch PowerShell Coreinstalliert. Im Terminal von VSCode war hinten eine Core Session geöffnet, es war nicht die aktive, aber irgendwie hat es trotzdem Intellisense beeinflusst.

Schließen Sie einfach die CoreTerminals und alles funktioniert wie erwartet.

oder

Überprüfen Sie in einem erhöhten Zugriffsrecht PowerShell Core, ob $env:PSModulePathder Ordner mit den DSC-Modulen enthalten ist $env:PSModulePath -split ';'. Der Ordner ist höchstwahrscheinlich nicht darin enthalten. Verwenden Sie den folgenden Befehl, um ihn hinzuzufügen. Nach einem Neustart von vscode und pwsh funktioniert IntelliSense immer, da pwsh jetzt auch im richtigen Verzeichnis sucht:

$CurrentValue = [Environment]::GetEnvironmentVariable("PSModulePath", "Machine")
[Environment]::SetEnvironmentVariable("PSModulePath", $CurrentValue + [System.IO.Path]::PathSeparator + "C:\Program Files\WindowsPowerShell\Modules", "Machine")

verwandte Informationen