モジュールに埋め込まれた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
何が原因でしょうか?
$env:PSModulePath
内のすべてのフォルダーにモジュールのコピーが1つしかないことを確認しました。.psd1
ファイルのバージョンを変更すると、エラーメッセージで報告されるバージョンも変更されます)$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
最後に、Windows10でPowershell5.1を使用しており、すべての更新プログラムがWindowsUpdateから適用されています。 (最終的には、構成をServer 2016マシンに展開します。)
他に何が欠けている可能性がありますか?
DSC構成の処理はシステムアカウントで実行されるため、特定のユーザーのPSModulePathを検索していません。モジュールを標準の場所の1つ、通常は$env:ProgramFiles\WindowsPowerShell\Modules
の下に置きます。
$env:PSModulePath
を変更したと言うときは、マシン全体の設定を変更するのではなく、現在のユーザーに対して変更したと思います。
特定のユーザーが利用できるリソースにアクセスするためにリソースが必要な場合、一部のリソースでは、資格情報オブジェクトをパラメーターとしてリソースに渡すことができます。