[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,支持哪些输入参数。





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

[6] Window PowerShell DSC 学习系列----如何安装最新的PowerShell DSC 5.1 Pull Server?

前面的5个章节做了很多的铺垫,包括Powershell DSC是什么? 能干什么? 其包含了推模式(push)和拉模式(Pull)。 而且笔者也描述了PowerShell DSC的配置文件(Confi...
  • chancein007
  • chancein007
  • 2017年01月24日 00:47
  • 1859

[1] Window PowerShell DSC 学习系列----DSC的定义和2种架构模式

PowerShell DSC是PowerShell的一部分,是一个新的管理平台,英文全称为,PowerShell Desired Status Configuration,翻译成中文就是理想管理配置状...
  • chancein007
  • chancein007
  • 2017年01月09日 23:09
  • 1627

[4] Window PowerShell DSC 学习系列----PowerShell DSC 5.x 提供了哪些有用好用的工具命令?

在使用PowerShell DSC的时候,我们经常需要使用 PSDesiredStateConfiguration的一些常用的命令去配置或者获取一些DSC的配置信息已经设置DSC的LCM的状态等信息;...
  • chancein007
  • chancein007
  • 2017年01月23日 14:08
  • 1420

[12]Windows PowerShell DSC学习系列---PowerShell DSC的几个例子

在这节中,笔者给大家分享几个使用PowerShell DSC的例子,并且会持续更新中。。。。。...
  • chancein007
  • chancein007
  • 2017年02月09日 14:12
  • 1428

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

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

[22]Window PowerShell DSC学习系列---- 如何用PowerShell脚本查看DSC服务器的执行报表(Report)

本文只适合DSC 5.x的版本。我们知道在DSC 5.x的版本中,Pull服务器和Report是安装在一起的。那么当目标节点注册成功到Pull和Report服务器之后,且Pull服务器上的MOF和Re...
  • chancein007
  • chancein007
  • 2017年02月14日 13:45
  • 1754

[27] Window PowerShell DSC 学习系列----DSC 5.x 查询节点注册和执行报告(Report)查询

我们知道,一旦我们把DSCD额Pull服务器安装成功,且目标节点也注册成功后,我们就可以调用DSC服务的oData的查询。去查询一些信息。请注意,浏览器可能不支持oData的Http的get操作。因此...
  • chancein007
  • chancein007
  • 2017年04月18日 14:22
  • 1772

[14]Windows PowerShell DSC学习系列---如何Debug PowerShell DSC?

在我们开发定制的DSC的资源时候,能Debug DSC的资源非常的重要。Debug DSC的资源的功能直到DSC 5.x 版本以后才支持。言归正传,开门见山,下面笔者描述一下如何进行PowerShel...
  • chancein007
  • chancein007
  • 2017年02月09日 22:06
  • 1082

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

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

[11] Windows PowerShell DSC学习系列---如何定制一个基于PowerShell脚本实现的DSC Resource

在这片文章中,笔者给大家分享一个更高级的话题,如何定制一个基于PowerShell脚本实现的DSC Resource,为了简单起见,例子的名称为,Hello World的DSC Resource。因为...
  • chancein007
  • chancein007
  • 2017年02月07日 23:36
  • 1344
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[5] Window PowerShell DSC 学习系列----如何生成一个DSC MOF文件?
举报原因:
原因补充:

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