web-dev-qa-db-ja.com

ユーザーのモジュールパスにインストールされているモジュールからプッシュモードでDSCリソースを使用できないのはなぜですか?

モジュールに埋め込まれたPowershellDSCカスタムリソースがあります。完全なコードは ここで入手可能 見たい場合ですが、それは必要ないかもしれません。私の問題は(私が思うに)私が書いたコードではなく、それにアクセスする方法にあります。

私の場合、DSCプッシュモードを使用しています。必要なモジュールをインストールし、構成をコンパイルして起動するために使用する通常の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

何が原因でしょうか?

  1. $env:PSModulePath内のすべてのフォルダーにモジュールのコピーが1つしかないことを確認しました。
  2. 何かが機能しているようです。エラーメッセージでモジュールの正しいバージョンを判別できます(モジュールの.psd1ファイルのバージョンを変更すると、エラーメッセージで報告されるバージョンも変更されます)
  3. プッシュモードを使用していて、モジュールのバージョン管理の問題がないため、 DSCがインストールされているリソースを見つけられないのはなぜですか? に関連しているとは思いません。
  4. $env:PSModulePathの非標準エントリに関連している可能性がありますか?モジュールを$env:ProgramFiles\WindowsPowershell\Modulesにコピーしようとしましたが、エラーが発生しますI本当に理解できません: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
    
  5. たぶんそれは私のディレクトリレイアウトに何か問題がありますか?複数のクラスベースのDSCリソースを含むモジュールの例を実際に見たことがないので、レイアウトについて推測しています。
  6. (この種のモジュールの例(複数のクラスベースのDSCリソースを含む単一のモジュール)がある場合は、そのモジュールへのリンクが非常に役立ちます。)

最後に、Windows10でPowershell5.1を使用しており、すべての更新プログラムがWindowsUpdateから適用されています。 (最終的には、構成をServer 2016マシンに展開します。)

他に何が欠けている可能性がありますか?

4

DSC構成の処理はシステムアカウントで実行されるため、特定のユーザーのPSModulePathを検索していません。モジュールを標準の場所の1つ、通常は$env:ProgramFiles\WindowsPowerShell\Modulesの下に置きます。

$env:PSModulePathを変更したと言うときは、マシン全体の設定を変更するのではなく、現在のユーザーに対して変更したと思います。

特定のユーザーが利用できるリソースにアクセスするためにリソースが必要な場合、一部のリソースでは、資格情報オブジェクトをパラメーターとしてリソースに渡すことができます。

2
Matthew Wetmore