2015-05-15 112 views
2

我想扩展原始File DSC资源以添加support for ensuring that files not present in the source are deleted in the destination。要做到这一点,我想知道至少如何通过在反汇编程序上检查它的代码来实现原始代码,或者尝试在ReferenceSource等地方找到它的实现,但我不能为我的生活找到dll的位置实现资源位于我的电脑上。我在哪里可以找到二进制DSC资源的dll?

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

我知道我可以使用其他问题中描述的方法解决此问题,但我们需要大量的文件夹来处理这些问题,并且维护这些脚本会是一个问题。

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

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

回答

2

我已经做了一些挖掘,除非我已经错过了一些显而易见的东西,我认为文件资源存在于“C:\ Windows \ System32 \ DscCoreConfProv.dll”中。

你已经找到MSFT_FileDirectoryConfiguration - 此WMI类生活在root \微软\的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...} 

而这由dsccore处理DSCCoreProviders 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} 

假设它是DSCCore供应商供应商,找到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,所以你可能有麻烦拆卸它。

+0

令人惊叹的东西...我不知道这些东西如何工作,我感到沮丧。我对WMI甚至CLSID一无所知,尽管我已经多次听说并看到过它们。使用ASP.Net Web窗体的感觉与CSS,HTML和JavaScript几乎完全不同。这是一个本地DLL的事实是一个无赖...虽然我希望有一个.Net dll。我真的不想重新实现这个资源已经在做的潜在复杂的逻辑。我甚至无法验证你的答案,所以如果你可以确认它在那里,我会将它标记为答案。 – julealgon

相关问题