【问题标题】:Where can I find the dll of binary DSC resources?我在哪里可以找到二进制 DSC 资源的 dll?
【发布时间】:2015-05-15 15:57:26
【问题描述】:

我想扩展原来的File DSC 资源以添加support for ensuring that files not present in the source are deleted in the destination。为此,我想至少通过在反汇编器上检查它的代码来了解原始版本是如何实现的,或者尝试在ReferenceSource 之类的地方找到它的实现,但我终生无法找到在哪里实现资源的dll位于我的电脑上。

当我在 PowerShell 中发出 Get-DscResource File 命令时,Module 属性为空。然后我尝试检查对象本身以查看是否出现任何内容,但Path 属性也是空的,而ParentPath 属性指向C:\Windows\system32\Configuration\Schema\MSFT_FileDirectoryConfiguration,它只包含元数据文件而不包含二进制 dll。

我知道我可能可以使用我链接的另一个问题中描述的方法来解决这个问题,但是我们需要很多具有这种行为的文件夹,这样维护这些脚本会是一个问题。

理想情况下,可以扩展原始类并将此行为添加到其中,但我不指望这是可能的。我只是想将原始实现作为添加此功能的基线。

考虑到这一切,我在哪里可以找到实现给定二进制 DSC 资源功能的实际 dll?

【问题讨论】:

    标签: powershell dsc powershell-module


    【解决方案1】:

    我已经进行了一些挖掘,除非我错过了一些非常明显的东西,否则我认为文件资源位于“C:\Windows\System32\DscCoreConfProv.dll”中。

    您已经找到 MSFT_FileDirectoryConfiguration - 用于此的 WMI 类位于 root\Microsoft\Windows\DesiredStateConfiguration 命名空间中:

    > Get-WmiObject -Namespace "root\Microsoft\Windows\DesiredStateConfiguration" -List | `
      Where-Object { $_.Name -eq "MSFT_FileDirectoryConfiguration" } | `
      ft
    
       NameSpace: ROOT\Microsoft\Windows\DesiredStateConfiguration
    
    Name                                Methods              Properties
    ----                                -------              ----------
    MSFT_FileDirectoryConfiguration     {GetTargetResourc... {Attributes,     Checksum, Contents, CreatedDate...}
    

    这由 dsccoreDSC​​CoreProviders WMI 提供程序处理:

    > Get-WmiObject -Namespace "root\Microsoft\Windows\DesiredStateConfiguration" -Class "__Win32Provider" | `
      Select-Object @( "Name", "CLSID" ) | `
      ft *
    
    Name             CLSID
    ----             -----
    dsccore          {BADCC35D-8542-4A5C-A457-0ECCCF62508A}
    DSCCoreProviders {F04C3F9B-20B3-40E1-A824-3A41FE3D7931}
    

    假设它是 DSC​​CoreProviders 提供程序,找到 CLSID 后面的 dll:

    > New-PSDrive -Name "HKCR" -PSProvider "Registry" -Root "HKEY_CLASSES_ROOT"
    > (Get-ItemProperty -LiteralPath "HKCR:\CLSID\{F04C3F9B-20B3-40E1-A824-3A41FE3D7931}\InProcServer32")."(default)"
    
    C:\Windows\system32\DscCoreConfProv.dll
    

    但是,毕竟该文件不是 .NET Framework dll,因此您可能无法反汇编它。

    【讨论】:

    • 令人惊奇的东西...我为不知道这些东西是如何工作的而感到沮丧。我对 WMI 甚至 CLSID 一无所知,尽管我已经多次听说并看到它们。使用 ASP.Net Web Forms 的感觉与对 CSS、html 和 JavaScript 几乎一无所知的情况相同。它是本机 dll 的事实令人遗憾……我希望有一个 .Net dll。我真的不想重新实现这个资源已经在做的潜在复杂逻辑。我什至无法验证您的答案,所以如果您可以确认它在那里,我会将其标记为答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    相关资源
    最近更新 更多