
У меня установлен Visual Studio Code и включено расширение PowerShell.
Я хотел бы написать конфигурацию желаемого состояния с некоторыми пользовательскими модулями, такими как xHyper-V
и xPSDesiredStateConfiguration
.
Теперь проблема в том, что Visual Studio Code находит только PSDesiredStateConfiguration
ресурс DSC, который является ресурсом по умолчанию, когда я хочу импортировать их через Import-DSCResource
. Любой другой установленный ресурс DSC не может быть загружен Visual Studio Code. В PowerShell ISE все работает, как вы можете видеть здесь (слева VSCode, справа ISE):
Но странно то, что это влияет только на сам редактор. В терминале в vscode он находит ресурсы DSC во всех модулях. Посмотрите этот пример:
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...}
он также находит сами модули:
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...}
Единственное отличие в том, что они находятся в разных $env:PSModulePath
s, но это все равно не работает, когда я копирую xHyper-V
модуль в путь, где PSDesiredStateConfiguration
также находится.
Забавно, что это, похоже, влияет только на IntelliSense редактора. Если я запускаю конфигурацию с моими пользовательскими модулями DSC, она все равно создает файл *.mof
правильно.
Как я могу это исправить?
Что я пытался сделать, чтобы решить эту проблему:
- удалил и переустановил все пользовательские модули DSC
- удалил расширение PowerShell в VSCode, перезапустил VSCode и установил его снова
- полностью переустановил VSCode
решение1
Фейспалм. Немного неловко, но через минуту после публикации я нашел ответ:
Я тоже PowerShell Core
установил. Один сеанс ядра был открыт в терминале VSCode сзади, он не был активным, но он каким-то образом все равно влиял на Intellisense.
Просто закройте Core
терминалы, и все будет работать так, как и ожидалось.
или
Проверьте в повышенном привилегированном состоянии PowerShell Core
, если $env:PSModulePath
содержит папку, в которой находятся модули DSC $env:PSModulePath -split ';'
. Скорее всего, папки там не будет. Используйте следующую команду, чтобы добавить ее, и затем после перезапуска vscode и перезапуска pwsh IntelliSense всегда будет работать, поскольку pwsh теперь также будет искать в правильном каталоге:
$CurrentValue = [Environment]::GetEnvironmentVariable("PSModulePath", "Machine")
[Environment]::SetEnvironmentVariable("PSModulePath", $CurrentValue + [System.IO.Path]::PathSeparator + "C:\Program Files\WindowsPowerShell\Modules", "Machine")