[5] Window PowerShell DSC 学习系列----如何生成一个DSC MOF文件?

原创 2017年01月23日 16:07:00

在前面的四个章节,笔者介绍了一些PowerShell基础的知识,包括PowerShell DSC的基本架构,DSC的资源以及配置格式,已经在PowerShell DSC 如何安装扩展的DSC Module和resource;还有一些基本的DSC辅助命令的使用。那么本节,咱们就安装一个Chrome插件的DSC配置文件为例子,看其如何生成一个mof文件。打开Powershell ISE或者一个文本编辑器,新建一个文件名为:InstallGoogleChrome.ps1的配置文件,放在c:\dsc 目录下。内容如下:

Configuration InstallGoogleChrome {
    param (
        [string[]]$MachineName = "localhost",
        [Parameter(Mandatory)]$Language,
        [Parameter(Mandatory)]$LocalPath
    )
 
    Import-DscResource -Module xChrome
 
    Node $MachineName {
        MSFT_xChrome chrome {
            Language = $Language
            LocalPath = $LocalPath
        }
    }
}
 
InstallGoogleChrome -MachineName (Get-Content -Path "c:\dsc\servers.txt") -Language "en" –LocalPath "C:\Windows\Temp\GoogleChromeStandaloneEnterprise.msi"

注意:在ps1文件的最后一行,一定要把Configuration后的名字加上,  InstallGoogleChrome,后面的参数是可选的。否则其将会生成不了MOF文件。


其中,引用的到的c:\dsc\servers.txt服务器列表如下:

pserver51w2k12
dscc01-51w2k12
dscc02-51w2008


然后在PowerShell 命令行中输入下面的命令:

PS C:\dsc> .\InstallGoogleChrome
WARNING: The configuration 'InstallGoogleChrome' is loading one or more built-in resources without explicitly importing
 associated modules. Add Import-DscResource –ModuleName 'PSDesiredStateConfiguration' to your configuration to avoid
this message.


    Directory: C:\dsc\InstallGoogleChrome


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        1/23/2017   8:00 AM           3998 pserver51w2k12.mof
-a----        1/23/2017   8:00 AM           3998 dscc01-51w2k12.mof
-a----        1/23/2017   8:00 AM           3998 dscc02-51w2008.mof

注意,上面会弹出一个警告信息,然后修改InstallGoogleChrome.ps1文件,显式加上Import-DscResource –ModuleName 'PSDesiredStateConfiguration' 这一行。

Configuration InstallGoogleChrome {
    param (
        [string[]]$MachineName = "localhost",
        [Parameter(Mandatory)]$Language,
        [Parameter(Mandatory)]$LocalPath
    )
 
    Import-DscResource -Module xChrome
    Import-DscResource –ModuleName 'PSDesiredStateConfiguration'
	
    Node $MachineName {
        MSFT_xChrome chrome {
            Language = $Language
            LocalPath = $LocalPath
        }
    }
}
 
InstallGoogleChrome -MachineName (Get-Content -Path "c:\dsc\servers.txt") -Language "en" –LocalPath "C:\Windows\Temp\GoogleChromeStandaloneEnterprise.msi"

非常好! 警告信息消失,重新执行一遍。
PS C:\dsc> .\InstallGoogleChrome

    Directory: C:\dsc\InstallGoogleChrome

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        1/23/2017   8:01 AM           3998 pserver51w2k12.mof
-a----        1/23/2017   8:01 AM           3998 dscc01-51w2k12.mof
-a----        1/23/2017   8:01 AM           3998 dscc02-51w2008.mof

到此为止,三个虚拟机上的三个mof文件已经生成。
打开其中的一个MOF文件查看。

/*
@TargetNode='dscc01-51w2k12'
@GeneratedBy=Admin
@GenerationDate=01/23/2017 08:01:31
@GenerationHost=PULLSERVERWMF51
*/

instance of MSFT_xRemoteFile as $MSFT_xRemoteFile1ref
{
ResourceID = "[xRemoteFile]Downloader::[MSFT_xChrome]chrome";
 Uri = "https://dl.google.com/tag/s/appguid={8A69D345-D564-463C-AFF1-A69D9E530F96}&iid={00000000-0000-0000-0000-000000000000}&lang=en&browser=3&usagestats=0&appname=Google%2520Chrome&needsadmin=prefers/edgedl/chrome/install/GoogleChromeStandaloneEnterprise.msi";
 DestinationPath = "C:\\Windows\\Temp\\GoogleChromeStandaloneEnterprise.msi";
 ModuleName = "xPSDesiredStateConfiguration";
 SourceInfo = "C:\\Program Files\\WindowsPowerShell\\Modules\\xChrome\\1.1.0.0\\DSCResources\\MSFT_xChrome\\MSFT_xChrome.schema.psm1::15::5::xRemoteFile";
 ModuleVersion = "5.1.0.0";

 ConfigurationName = "InstallGoogleChrome";

};
instance of MSFT_PackageResource as $MSFT_PackageResource1ref
{
ResourceID = "[Package]Installer::[MSFT_xChrome]chrome";
 Path = "C:\\Windows\\Temp\\GoogleChromeStandaloneEnterprise.msi";
 Ensure = "Present";
 ProductId = "";
 SourceInfo = "C:\\Program Files\\WindowsPowerShell\\Modules\\xChrome\\1.1.0.0\\DSCResources\\MSFT_xChrome\\MSFT_xChrome.schema.psm1::21::5::Package";
 Name = "Google Chrome";
 ModuleName = "PSDesiredStateConfiguration";

ModuleVersion = "1.0";

DependsOn = {

    "[xRemoteFile]Downloader::[MSFT_xChrome]chrome"};

 ConfigurationName = "InstallGoogleChrome";

};
instance of OMI_ConfigurationDocument


                    {
 Version="2.0.0";
 

                        MinimumCompatibleVersion = "1.0.0";
 

                        CompatibleVersionAdditionalProperties= {"Omi_BaseResource:ConfigurationName"};
 

                        Author="Admin";
 

                        GenerationDate="01/23/2017 08:01:31";
 

                        GenerationHost="PULLSERVERWMF51";
 

                        Name="InstallGoogleChrome";


                    };

恭喜你!!! MoF文件已经成功生成!!!

末了,给大家分享一个小小的经验,当我们在写DSC Configuration的文件的时候,其中会用到一些DSC的资源(Resource),那么我们如何知道这些DSC的资源的包含哪些输入参数呢?可以通Get-DscResource -Name  Registry -Syntax来查看DSC的资源的输入格式。比如,下面的例子:

PS C:\dsc> Get-DscResource -Name MSFT_xChrome   -Syntax

MSFT_xChrome [String] #ResourceName
{
    [DependsOn = [String[]]]
    [PsDscRunAsCredential = [PSCredential]]
    [Language = [String]]
    [LocalPath = [String]]
}

我们知道,对于MSFT_xChrome的Resource,支持哪些输入参数。





版权声明:本文为博主原创文章,未经博主允许不得转载。

[24]Window PowerShell DSC学习系列---- 如何保护MOF文件里面存储的密码?

在上节笔者分享了[23]Window PowerShell DSC学习系列---- MOF文件能存储用户的密码吗?MOF文件里面能直接存储明文密码,这样是非常不安全的。那么有什么方式能够把MOF里面存...

[23]Window PowerShell DSC学习系列---- MOF文件能存储用户的密码吗?

我们知道,DSC的资源中,有很多的资源是需要访问文件共享目录,进入本地的用户的目录,或者为一个特定的用户安装一个MSI的安装包,修改注册表;这个时候,如果直接执行调用DSC的资源,则可能会弹出“Acc...

[8] Window PowerShell DSC 学习系列----MOF文件和DSC Module的部署

在前面的第7节,笔者分享了如何安装Pull服务器,如何生成MOF文件。那么生成了MOF文件之后,如何在Pull服务器上部署?另外如果MOF文件中又引用了其他的DSC Module或者DSC Resou...

[7] Window PowerShell DSC 学习系列----如何被管理的设置节点注册到Pull Server?

在上一节,[6] Window PowerShell DSC 学习系列----如何安装最新的PowerShell DSC 5.1 Pull Server?笔者聊到了如何安装Pull Server。那么...

[20]Window PowerShell DSC学习系列---- start-dscconfiguration 中遇到 Access Denied的解决方案

当我们执行start-DscConfiguration -computername psdsc-window201 -Path c:\DSC\TestFile -Wait -Verbose -forc...

[10] Window PowerShell DSC 学习系列----目标节点和Pull 服务器底层通信原理剖析

在本节中,笔者将会用wireshark抓包,并分析目标节点如何和Pull 服务器通信的?注意笔者本机装的Window Management Framework 5.1,如果是其他的版本,可能请求的UR...

[26]Window PowerShell DSC学习系列----如何更换Pull服务器数据库为SQL Server数据库

上节我们提到了如何把PowerShell DSC的数据库换成Access;DSC Pull服务器当前的版本对MS SQL Server是不支持的,该怎么办?另外如果我们需要对Pull服务器建立负载均衡...

[9] Window PowerShell DSC 学习系列----错误诊断和分析

PowerShell DSC就像一个汽车,内部复杂,司机作为一个普通的用户在使用它,因为知道一些汽车的基本常识,所以当汽车发生一些简单的故障时,可以通过汽车自身带的仪表仪器诊断问题出在哪方面,也可以借...

[28] Window PowerShell DSC 学习系列----如何用Java调用PowerShell DSC 5.x的oData服务

因为PowerShell DSC 5.x的Report是基于OData V3的标准,所以理论上只有odata4j和ODataJClient的框架支持V3版本;但是实际上odata4j宣传支持,其实代码...

[17]Windows PowerShell DSC学习系列---使用WMI Tester调用msft-dsclocalconfigurationmanager类的方法

在这边文章中,其列出了DSC中的本地配置管理引擎中的msft-dsclocalconfigurationmanager类,其列出了这个类中的很多方法。比如GetConfigurationStatus,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[5] Window PowerShell DSC 学习系列----如何生成一个DSC MOF文件?
举报原因:
原因补充:

(最多只允许输入30个字)