[5] Window PowerShell DSC 学习系列----如何生成一个DSC MOF文件?
2017-01-23 16:07
603 查看
在前面的四个章节,笔者介绍了一些PowerShell基础的知识,包括PowerShell DSC的基本架构,DSC的资源以及配置格式,已经在PowerShell DSC 如何安装扩展的DSC Module和resource;还有一些基本的DSC辅助命令的使用。那么本节,咱们就安装一个Chrome插件的DSC配置文件为例子,看其如何生成一个mof文件。打开Powershell ISE或者一个文本编辑器,新建一个文件名为:InstallGoogleChrome.ps1的配置文件,放在c:\dsc 目录下。内容如下:
注意:在ps1文件的最后一行,一定要把Configuration后的名字加上, InstallGoogleChrome,后面的参数是可选的。否则其将会生成不了MOF文件。
其中,引用的到的c:\dsc\servers.txt服务器列表如下:
pserver51w2k12
dscc01-51w2k12
dscc02-51w2008
然后在PowerShell 命令行中输入下面的命令:
注意,上面会弹出一个警告信息,然后修改InstallGoogleChrome.ps1文件,显式加上Import-DscResource –ModuleName 'PSDesiredStateConfiguration' 这一行。
非常好! 警告信息消失,重新执行一遍。
到此为止,三个虚拟机上的三个mof文件已经生成。
打开其中的一个MOF文件查看。
恭喜你!!! 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,支持哪些输入参数。
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,支持哪些输入参数。
相关文章推荐
- VMC部署管理:关于无缝升级
- Powershell 创建炫丽美观的Html报表
- 从Powershell ***脚本学到的如何执行后台runspace~
- PowerShell Script Analyzer, Script browser 和 Pester
- 大量删除contact导致Office365同步失败
- 【DevOps】为什么我们永远疲于奔命?
- PowerShell打开或关闭光驱
- PowerShell移动目录中指定文件的方法(非全部文件)
- Powershell小技巧之创建短网址
- PowerShell实现查询打开某个文件的默认应用程序
- PowerShell设置文件只读、隐藏属性的方法
- Windows Powershell扩展类型系统
- PowerShell脚本源码输出到文件的最佳写法
- Windows Powershell 通过函数扩展别名
- PowerShell脚本实现创建桌面快捷方式的方法
- PowerShell重启服务命令Restart-Service详细介绍
- PowerShell中执行Javascript的方法示例
- 探索PowerShell(十三) WMI对象介绍
- Powershell小技巧之使用Copy-Item添加程序到开机启动