У меня есть собственный ресурс Powershell DSC, встроенный в модуль. Полный код доступна здесь если вы хотите его увидеть, но в этом нет необходимости; Моя проблема не в написанном мной коде (я думаю), а в том, как получить к нему доступ.
В моем случае я использую режим DSC Push Mode. Есть обычный сценарий Powershell, который я использую для установки необходимых модулей, компиляции конфигурации и запуска. В этом скрипте я добавляю местоположение моего модуля в $env:PSModulePath
. После этого я могу увидеть модуль и импортировать его в свою интерактивную оболочку следующим образом:
PS> Get-Module -ListAvailable | Where-Object -Property Name -eq cWinTrialLab | Import-Module
PS> Get-DscResource -Module cWinTrialLab
ImplementedAs Name ModuleName Version Properties
------------- ---- ---------- ------- ----------
PowerShell cWtlShortcut cWinTrialLab 0.0.1 {Ensure, ShortcutPath, TargetPath, DependsOn...}
Итак, я создаю тестовый файл конфигурации:
Configuration TestConfig {
Import-DscResource -ModuleName PSDesiredStateConfiguration
Import-DscResource -ModuleName cWinTrialLab
Node localhost {
cWtlShortcut "TestShortcut" {
Ensure = "Present"
ShortcutPath = "$env:USERPROFILE\Desktop\TestShortcut.lnk"
TargetPath = "C:\Windows\system32\cmd.exe"
}
}
}
И я стараюсь этим пользоваться:
PS> . .\testDscConfig.ps1
PS> TestConfig
PS> Start-DscConfiguration -Wait -Force TestConfig
Кажется, что компиляция MOF работает, но на самом деле запуск конфигурации не выполняется:
The PowerShell DSC resource cWtlShortcut from module <cWinTrialLab,0.0.1> does not exist at the PowerShell module path nor is it registered as a WMI DSC resource.
At $Home\Documents\psyops\submod\wintriallab\azure\test.ps1:13 char:1
+ Start-DscConfiguration -Wait -Force TestConfig
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (root/Microsoft/...gurationManager:String) [], CimException
+ FullyQualifiedErrorId : DscResourceNotFound
+ PSComputerName : localhost
Что могло вызвать это?
$env:PSModulePath
..psd1
файл, версия, указанная в сообщении об ошибке, также изменится)Может быть, это связано с нестандартной записью в $env:PSModulePath
? Я пробовал скопировать модуль в $env:ProgramFiles\WindowsPowershell\Modules
, но затем я получаю сообщение об ошибке. действительно не понимаю: Importing module cWinTrialLab failed with error - File C:\Program Files\WindowsPowerShell\Modules\cWinTrialLab\cWtlShortcut\cWtlShortcut.psm1 cannot be loaded because
running scripts is disabled on this system. For more information, see about_Execution_Policies
. Для записи:
PS> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Unrestricted
LocalMachine Unrestricted
Наконец, я использую Powershell 5.1 в Windows 10 со всеми обновлениями, применяемыми из Центра обновления Windows. (В конечном итоге я разверну свою конфигурацию на машине Server 2016.)
Что еще я мог упустить?
Обработка конфигурации DSC выполняется под системной учетной записью и поэтому не выполняет поиск по PSModulePath конкретного пользователя. Поместите модуль в одно из стандартных мест, обычно под $env:ProgramFiles\WindowsPowerShell\Modules
.
Когда вы говорите, что изменили свой $env:PSModulePath
, Я предполагаю, что вы сделали это для своего текущего пользователя, а не изменили настройки для всей машины.
Если вам нужен ресурс, чтобы иметь доступ к ресурсам, доступным конкретному пользователю, некоторые из них позволят передавать объекты учетных данных в качестве параметров для ресурса.