谁知道有那本powershell dsc书上 有讲dsc期望状态配置的 急急急

PowerShell DSC(一)简单的推模式 - 推酷
PowerShell DSC(一)简单的推模式
最近因为公司业务需要一直在学习开源平台的内容,比如OpenStack和Docker等等,看着看着就对puppet和chef产生了一些兴趣,随之顺其自然的就发现其实在Windows平台也有自己原生的自动化运维解决方案,它就是PowerShell DSC(desired state configuration),按照字面理解就是“期望的配置状态”,我本人对puppet和chef没有太多深入的研究,但是对比了一下两者与PowerShell DSC的实现机制发现的确是大同小异,在此也不讨论谁先谁后问题,更不会想到谁取代谁或谁更好用的问题,不过对于Win平台而言,即便puppet本身就是支持的,但既然有原生的PS DSC那它就一定是首选了。
那么简而言之PowerShell DSC究竟能干嘛,优势何在,其实它与puppet的用意是一样的,就是面对大规模部署环境时,我们需要满足一定的合规性,或者在某些时候需要批量的变更配置,很多情况下组策略或者脚本并不太适用,PS DSC不需要强制域环境,其次它作为PS语言的扩展,至需要在配置文件里声明你期望目标主机是一个什么样的状态,而无需关注如何实现这个状态,比如你想部署IIS,那么只需要声明你要求这台机器有IIS,至于通过什么样的命令去安装IIS你并不需要关心,这一切将有操作系统自行完成。
########################################################################################
PowerShell DSC有两种模式,推和拉,因为得益于是源自系统内置的PowerShell来实现,因此不必需要安装agent程序,推模式使用简单,但拉模式更适合有计划性的大规模批量配置变更,也方便修改,下图是两种模式的对比,可以看到拉模式需要一台“pull server”角色,这台服务器实际上会包含一个定义好的Web Serveice(Odata),客户端通过一个URI和相应的GUID来获取配置。
整个DSC的执行基本分为三个阶段:
创建阶段――通过ISE或者干脆使用记事本之类的工具来编写DSC配置并输出MOF格式文件(management object format)。
推送或拉取阶段――使用pull or push模式将相应的MOF格式文件传输到目标客户端。
执行阶段――客户端通过本地的LCM(local configuration manageer),LCM内置于操作系统内,如果使用push模式的话也不需要额外的配置,对于Windows Server .1来说它是开箱即用的。
下图是我的测试环境,我在Azure准备了一台DC,如下图叫做pull server,IP:10.0.1.10
另外一台模拟客户端,叫做server01如下图:
部署好操作系统之后,默认提供12个开箱即用的资源,可以使用get-dscresource获得相应信息,DSC所管理和维护的每一类配置都称为“资源”,通过系统自带的这些资源就可以实现大部分常见的维护工作,例如添加删除服务器角色、拷贝文件、创建用户和组、维护系统服务等内容,如下图:
下面就以最简单也最常用的windowsfeature为例,可以先看看他的属性都定义了哪些内容,例如这个资源的名称,dependson是可以定义需要添加的feature是基于那个依赖角色的,通过它可以实现不同资源的更改顺序,在或者ensure是定义这个功能是开启还是关闭,即“absent or present”
以下便是一个简单的示例,我指定一个configuration名为winserver的DSC配置文件,声明节点是server01,然后期望这台服务器要有两个windowsfeater分别是windowsbackup和telnetclient,编辑好之后直接执行脚本,如下图:
上面的脚本执行后并没有返回任何消息,这是我新建一个叫做script的文件夹并在这个文件夹下面执行我上文中定义好的configuration名(DSC配置文件名,在首行),即“winserver”,执行后如果没有报错的话会在当前目录生成一个与node名一致的MOF文件,如下图:
最终就是要把这个mof文件搞到目标节点上去执行我期望的配置,可以查看该文件的内容如下图:
接下来我就使用简单的推模式来把这个mof搞到server01上去,推模式只需要执行&start-dscconfiguration&并指明mof文件路径,成功之后会在系统后台生成一个job,当然也可以指定job名称,如下图:
过一段时间后发现该job已经完成了,如下图:
登陆到server01上看看,噢~windowsbackup和telnetclient果然已经安装好了,如下图:
上面是一个非常简单的示例,可以看到在对大规模环境进行配置变更时,DSC是有绝对优势的,首先脚本更轻量,并且关键的是可通过test-dscconfiguration来检查变更是否符合要求,有很多其他方案虽然也能达到执行的效果,但是否成功或者说是否100%的按照管理员意愿完成了却不得而知。
#####################################################################################
此外在DSC配置文件中还可以定制属性,例如下图中我对nodename使用了变量,在执行时就可以通过我定义的&-vmname&来指定哪一个节点
在进行推送配置时,可以使用-wait和verbose来实时查看后台日志,如下图:
######################################################################################
以上就是对PowerShell推模式的简单介绍,如果对系统内置的12个资源不满意或感觉不够使的话,可以从官方获取更丰富的资源包,如下图:
目前最新的是wave 10,里面已经包含了非常丰富的资源,我觉得足够用了。
压缩包里有很多x开头的资源module,之所以是x开头是表示这些属于非官方的,当然如果使用上有问题可以在technet论坛上发言,还是有很多回复的。
要想在本地使用这些资源需要注意解压缩路径,一定要在如下图所示的地方。
成功后可以查看有179个资源,够丰富了吧。
随便找一个看看到底DSC有多强,竟然连SCVMM部署也可以,它的属性里面其实感觉和无人值守部署差不多,使用-syntax能够非常方便的查看语法,如下图:
根据资源里面定义的语法大致如下,感兴趣的筒子可以在自己的环境里不断尝试,很有意思。
#######################################################################################
PowerShell DSC也是跨平台的,它同样能够管理Linux,但是对于已经用惯了puppet或chef的人来讲,没必要转到DSC来,继续保持现状就ok,相反刚接触的人来说,特别是winos的ITpro,我相信PowerShell DSC绝对是首要考虑对象。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致标签:合并
随着公司使用越来越多的应用程序来管理业务流程、提供新的服务、和获得对业务执行情况的观察,支持这些应用程序所需的应用程序服务器和数据存储服务器的数目显著地增多。
本期图文专题盘点了从Windows Server 迁移到Windows Server 2012或Windows Server 2012 R2时常见的难题及解决方案,包括实用迁移技巧和迁移工具等。另外还包括Windows Server 2016相关信息。
刚刚结束的2014年里,IBM、惠普等国外厂商深受信息安全及国产化影响,国内市场份额一度下降,时至今日,以浪潮、联想、华为等为代表的国产品牌在中国x86服务器市场的份额已经超过了60%。总的来说,2014年是服务器大佬们忙碌的一年。年底之际,让我们一起回顾他们在2014年的动态,2015年服务器市场又是谁主沉浮?
Linux的企业级应用涵盖了多个方面:从Linux的客户关系管理应用到系统管理的Linux网络应用和针对Linux架构管理存储技术的Linux应用。本技术手册将就专用于管理、监控和备份Linux基础架构的软件提供专业的建议,它将帮助你为你的Linux环境筛选并找出最好的开源和商业应用。
我们以前详细描述过在Win2003上安装VMware,你想在Linux上安装VMware吗?尽管VMware&Server提供了一种简单、免费的小型服务器虚拟化解决方案,不过正确地配置它很不容易,并且没有正确配置VMware的代价很高。这个指南为安装和配置提供了说明,主要聚焦在高安全性以及维持一个在Linux上的VMware&Server成功的生产实例。
企业级IT网站群
TechTarget中国 版权所有
All Rights Reserved, Copyright
TechTarget中国 版权所有
All Rights Reserved, Copyright期望状态配置帮助管理员避免配置漂移
期望状态配置帮助管理员避免配置漂移
  期望状态配置是PowerShell 4.0和Windows Server 2012 R2中的一个新特征,从配置角度扩展了PowerShell的功能。
  期望状态配置(DSC)背后的理念是提供一种方法,通过一组PowerShell语言扩展来维护电脑或设备的一致性配置设置。使用DSC,你可以为你的目标定义准确的配置,实现连续部署并防止可怕的配置漂移。
  之前你肯定已经部署了多个服务器,你会发现运行几个月后,对比原始设置,每一个服务器的配置都略微不同。
  也许其中一个有排错和其他相关设置,另一个也许打补丁了,其他的没有。也或者是某个服务器上面的应用程序修改了一些默认设置,从而不同于同类的其他设备。
  这就是配置漂移,不管原因是什么,终会导致你头痛和潜在的失败。你不再有清晰的已知配置,不能再把整个类型的服务器作为一台机器进行管理,集中管理可是公共云或者私有云的关键。你需要避免配置漂移。
  使用脚本解决配置漂移
  脚本在系统管理方面不是什么新鲜事,是防止配置漂移的可靠方法。它们在多个系统上运行时,通常会有一致的结果。编辑脚本的人通常不使用某些类型的平台系统管理软件如系统中心配置管理器,已经开始使用命令式脚本。除了异常处理、事务日志和其他细节,还包括制定每个执行动作。
  例如,一个传统的管理脚本通常是安装补丁、设置角色、负责文件、运行可执行文件等等。如果指定每个即将发生的动作,这些脚本很难改善,并且不能用于其他目的,特别是运行在一台机器上的行为不能准确地应用在另一台机器上。
  然而,DSC是一种说明性脚本技术。这意味着系统管理员或脚本编辑者可以设置系统配置的描述,系统会计算出达到这种描述状态,自己还需要什么。
  但是从单纯的功能性角度来看,说明性脚本的功能比不上命令型脚本,它只在系统配置场景中表现较好。例如,如果我想部署一个Web服务器的农场,我可以这样编写DSC脚本:
  我需要七个虚拟机。
  所有的虚拟机应该安装IIS。
  所有的虚拟机应该安装远程服务器管理工具安装包。
  所有的虚拟机应该包含这些特殊的内容文件。
  DSC中包括一个配置代理组件,接收脚本信息并将其转换成动作,将物理系统状态对齐到所描述的配置。如果我说应该安装IIS,该代理将检查当前机器上的角色,看看IIS是否可用或者是否已安装,然后对机器进行任何必要的更改最终达到期望的状态。
  但是期望状态与其他管理技术有关大关联呢?第一,DSC是为了解决云――即服务器和设备按照标准操作,始终运行,容忍缺点。它不是为了解决本地服务器的,系统中心更适合用来解决本地服务器问题。DSC可以结合系统中心虚拟机管理器协同工作,提供虚拟机和服务,并将它们准备妥善。DSC主要宗旨应该是处理农场机器的相关任务,而不是为个人电脑解决各种不同的事情。
  随着年底Windows Server 2012 R2的发布,将会有更多DSC和PowerShell 4.0的相关报道。但是现在,你又多了一个学习PowerShell的理由。
&&&主编推荐
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
职称考试题目
招生信息考研政治
网络安全安全设置工具使用手机安全
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&Windows PowerShell-创作所需的状态配置自定义资源
MSDN Library
Windows PowerShell
创作理想状态配置自定义资源
所需状态配置 (DSC) 是一个新的配置管理和部署平台从微软。它建立在共同信息模型 (CIM),管理 (WSMAN) 的行业标准的 Web 服务,并且是对 Windows PowerShell 的扩展。
您可以以声明方式编写在任何 Windows PowerShell 控制台内的 DSC 脚本生成 DSC 对象,在目标服务器上执行它们。DSC 允许您配置、 监测和确保使用这些配置文件的服务器的符合性。
配置写就像定义策略为目标服务器。该策略中包含一组资源及其所需的状态,并且那些应用于目标服务器。DSC 可确保每个服务器遵循的策略。了解更多在 DSC
资源是基本的构造块的 DSC。他们是 DSC 基础结构最颗粒的可分配、 可重复使用、 可共享的组件。他们还提供最低级别的控制内 DSC 和用于创作 DSC 文件配置基础结构。DSC 资源可以执行任何可能使用 Windows PowerShell,如配置和管理 IIS,Windows 远程管理 (WinRM)、 注册表、 Windows 功能和服务。
什么好这几天是一种技术,如果它不允许延长?DSC 遵循开闭原则。它是对扩展开放,但对变更封闭。它为创作新的资源提供了必要的延伸,挂钩。
在这篇文章,我将展示你如何开发 DSC 自定义资源和在 DSC 配置示例中使用它。自定义资源被命名为 TrustedHosts。此资源将管理 WinRM 受信任的主机配置 — — 添加或删除到 WinRM TrustedHosts 属性的计算机名称。
想要使用 Windows PowerShell 远程处理通信的工作组服务器 (不是任何域的一部分) 将需要额外的 WinRM 配置。具体来说,我将添加 WinRM TrustedHosts 列表,以允许从那些机器的远程处理的客户端计算机的名称。
此资源将负责管理 TrustedHosts 列表中的单个计算机名称。但是,如果您需要多个计算机名称,您可以添加使用此资源配置文档中的多个资源部分。您还可以修改伴随着的资源。
您可以通过执行 Get 项目命令和使用 WSMAN 提供程序查看受信任的主机配置:
Get-Item WSMan:\localhost\client\TrustedHosts
同样,您可以通过执行以下命令通过 Windows PowerShell 控制台修改 TrustedHosts 属性:
Set-Item WSMan:\localhost\client\TrustedHosts –Value "*." –force
它是重要的是知道的构建基块和构建自定义的资源所需的概念。与有关的 CIM、 托管对象格式 (MOF)、 Windows PowerShell 和它的模块概念和 WinRM 是赖以建立了 DSC 资源的主要技术。DSC 资源在进入之前执行自定义的资源,它是重要的是知道如何打包和部署您的服务器上。DSC 资源都包含在 Windows PowerShell 模块,让你重新使用和分发的代码。你无论是作为 Windows PowerShell 脚本可执行模块或已编译二进制文件使用语言如 C#)。DSC 使用模块基础设施来承载其资源。Windows PowerShell 模块应驻留在文件系统上的预先确定的文件夹位置。你可以通过取消 Windows PowerShell 变量 $env 来查看这些地点: ModulePath 从任何 Windows PowerShell 控制台。Windows PowerShell 安装所有的预置模块在 C:\Windows\System32\Windows-PowerShell\v1.0\modules。您应部署在 C:\Program Files\WindowsPowerShell\modules 的所有自定义模块。为信任-承载自定义的资源,用作 C:\Program Files\WindowsPowerShell\Modules 的 WinRM Windows PowerShell 模块模块基路径和宿主的容器。您将创建一个新的文件夹,在该文件夹中命名 WinRM。DSC 预计资源,以遵循有关 Windows PowerShell 模块内的文件和文件夹结构的规则。所有的 DSC 资源应放在模块中的 DSCResources 文件夹中。这是根文件夹包含所有相关的资源。在 WinRM 文件夹中,创建名为 DSCResources 的另一个文件夹。此文件夹中承载 DSC 的所有资源。创建一个文件夹,该文件夹中的每个资源。在这种情况下,您要创建单个资源,因此,只是一个文件夹命名为 TrustedHosts。文件夹和资源应具有相同的名称。此特定于资源文件夹 TrustedHosts 包含特定于资源的文件。TrustedHosts 资源的文件夹结构显示在图 1。图 1 Windows PowerShell 所需状态配置资源文件夹和文件规范定义,并提供资源执行的文件是:&& 资源名称 &&.psm1 — — 这是一个资源实现文件。在这种情况下,它是 TrustedHosts.psm1。&& 资源名称 &&.psd1 — — 这是资源的元数据文件。在这种情况下,它是 TrustedHosts.psd1。如果您从.psm1 脚本文件导出强制性功能,不需要此文件。&& 资源名称 &&。Schema.mof—This 是资源定义。在这种情况下,它是 TrustedHosts.Schema.mof。每个 Windows PowerShell 模块都有一个清单文件与模块本身的名称相同的模块。生成模块的清单文件,使用新 ModuleManifest cmdlet 从 Windows PowerShell 控制台使用提升的权限,如下所示:
New-ModuleManifest -Path "C:\Program Files\WindowsPowerShell\Modules\WinRM\WinRM.psd1"
现在,你了解的文件夹和文件结构规则的包装 DSC 资源,我将重点放在实现文件上。TrustedHosts.Schema.mof您将使用 MOF 文件定义 CIM/WMI 使用来生成它们,使管理信息交换在数据中心内的实例的类。MOF 类定义其属性的 DSC 资源。属性可以包括读写、 只读和必需的属性。总是应该为 CIM/WMI 来唯一地标识对象的键属性。属性分配值,它们最终会变成要监测和维护的资源所需的状态。您可以生成 MOF 文件通过 MOF 设计器或作者他们通过任何文本编辑器 (如记事本,因为它们本质上是文本文件。在创建之前的 MOF 类,分析您需要在任何一台机器上的 TrustedHosts 配置管理的信息。用于管理服务器上的 TrustedHosts,您需要三个属性:计算机名添加到 TrustedHosts 列表 ; 确保属性,以确定是否 ComputerName 应该添加或删除 ; 和凭据来访问和管理 WinRM TrustedHosts 配置。然后对 TrustedHosts DSC 资源 MOF 类被创建,如下所示:
[ClassVersion ("1.0.0"), FriendlyName ("TrustedHosts")]
Class TrustedHosts: OMI_BaseResource
[Key, Description ("Name of the host")] String ComputerN
[Write, ValueMap {"Present", "Absent"},
Values {"Present", "Absent"}] string E
[Write, EmbeddedInstance ("MSFT_Credential")] string C
它是重要的是知道如何 MOF 类融入整个 CIM 生态系统。DSC 的所有资源都是从 OMI_BaseResource 抽象 CIM 类都派生的。此基类定义在 root\Microsoft\Windows\DesiredStateConfiguration 命名空间,并提供所需的 DSC 的所有资源的共同属性。这些属性是 ResourceID、 SourceInfo、 ModuleName、 ModuleVersion 和恒大。MOF 文件在生成期间,会将这些属性添加到资源的所有属性。这些是特定于 DSC 的内部属性,只由 DSC 使用。类 TrustedHosts 也将成为 root\Microsoft\Windows\DesiredStateConfiguration 命名空间的一部分。所有三个属性是字符串类型,它们代表了 WinRM TrustedHosts 资源定义。计算机名属性具有额外的元数据 — — 关键和描述。密钥类型限定符,指示此属性是强制性,此属性的值应该是唯一的所有实例。应该有至少一个具有内 MOF 类关键元数据属性。可关键元数据的多个属性。这将创建一个复合键,他们应该都是唯一的所有实例。我做此属性作为键,因为否则,我不能确定 TrustedHosts 列表中是否已存在的计算机名称。描述提供给属性的文本意义。与出现对确保属性进行批注。出现是一组值的属性可以接受,是一个枚举的同义词。在这种情况下,确保可以接受"存在"或"无"作为其法律价值。确保和凭据属性都装饰着写属性。这意味着你可以写进,并在配置脚本中使用自定义资源时修改此属性。类 TrustedHosts 还具有元数据 — — ClassVersion 和 FriendlyName。类版本,有利于保持相同的 MOF 类的多个版本。FriendlyName 是重要的元数据,因为配置脚本使用它来引用资源。配置脚本识别资源通过他们的友好名称。在 TrustedHosts 类中,类名称和友好名称是相同的。你可以阅读更多关于 MOF 文件定义和及其元数据在 。后定义的 MOF 类,坚持以 ascii 格式或 Unicode 格式文件名内 TrustedHostsfolder TrustedHosts.Schema.mof 在文件系统上的创建早些时候。当你在 DSC 配置中使用此自定义的资源时,您会将值分配给这些属性,以指示所需的配置状态。TrustedHosts.psm1现在我将介绍最关键的一个自定义的 DSC 资源 — — 资源模块脚本。这包含自定义资源实现,并且确定它将如何工作。它还通过保持它符合预期的配置管理的资源。每个 DSC 资源脚本模块必须实现三个功能。这些是强制的每个函数具有规则及其执行。Get-TargetResource:此函数必须声明并接受 MOF 类中的所有属性都标记为关键作为参数。它也可以接受所需,并写入属性作为参数。键和所需的参数应申报参数时作为强制性标记。Get TargetResource 函数应执行脚本来检索资源使用 Key 属性值的当前状态。它应该返回一个哈希表,包含所有属性与值的 MOF 类中定义为资源的当前状态。集 TargetResource: 此函数必须声明并接受 MOF 类中的所有属性标记为键,所需和写入属性作为参数。键和所需的参数应申报参数时作为强制性标记。集 TargetResource 函数应执行脚本应使用所有资源的属性值提供参数,以获得资源实例,并执行以下操作之一操作:创建一个新的资源实例。更新现有资源实例。删除现有的资源实例。集 TargetResource 函数不返回任何值。TargetResource 测试: 测试 TargetResource 功能类似于一套 TargetResource 的功能,但它不会返回当前资源状态。相反,它将返回 true 或 false 取决于当前资源状态是否符合预期的资源状态配置脚本中所指定的布尔值。如果有两个国家之间的完全匹配,此函数返回 true。它将返回 false 如果在任何键上不匹配的要求,或写入属性。这三项功能由 DSC 的本地配置管理器 (LCM) 组件调用。液晶显示模块是在所有运行 Windows 管理框架 4.0 的计算机上运行的代理。LCM 看作是 DSC 客户端在网络中的所有服务器上可用。DSC 可与此客户端进行通信,并提供必要的配置信息。它是 LCM (DSC 客户端) 以管理、 监测和确保在目标计算机上的配置符合要求的责任。要做它的工作,它会调用 DSC 资源功能。它首先调用测试 TargetResource 函数,以确定是否资源配置匹配预期的配置。如果返回的值为 true,这意味着资源的当前状态是预期的配置相同。然而,它应该返回如果状态不匹配,则为 false。如果 LCM 获取假作为返回值,它将调用设置 TargetResource,将执行以下操作:如果该资源不存在,并且确保属性设置为当前,它将创建新实例的资源和属性赋值,因此,它从配置脚本中获取。如果存在相应的资源并确保属性设置为当前,但一些其属性值不匹配的属性值,在配置脚本中编写,这一职能应更新只是这些资源的属性。如果存在相应的资源并确保属性设置为当前且所有属性值都匹配编写配置脚本中的属性值,该函数应该做什么。如果存在相应的资源,确保属性设置为无,则它应被删除。如果不存在相应的资源,确保属性设置为无,那么它应该做什么。现在是时候要实现这些 TrustedHosts 的自定义资源相关的三个功能。打开 Windows PowerShell ISE,执行这三项功能并将其保存在 WinRM\DSC-Resources\TrustedHosts TrustedHosts.psm1 同名的目录。Get TargetResource TrustedHosts 自定义资源此函数接受作为参数在 MOF 文件中定义的所有属性。凭据参数是类型 PSCredential。这是由 Windows PowerShell 公开用于捕获和存储的用户名和密码的 Microsoft.NET 框架类。其余参数是字符串类型。在这个函数中,创建哈希表用于返回当前的资源属性,如中所示图 2。它使用 WSMAN 提供程序读取当前的 TrustedHosts 配置列表。该脚本检查看看是否有任何计算机名称列表中。如果有,它遍历,并且与它们提供的计算机名称相匹配。如果它找到确切的匹配项,它将更新确保属性与价值的礼物或无价值。它还向返回的哈希表中添加相同的计算机名称。图 2 Get TargetResource 函数的 TrustedHosts 资源
Function Get-TargetResource
# Computer name to be checked within TrustedHosts List
[parameter(mandatory)]
[string] $ComputerName,
# This property determines whether computer name
# should be added or removed from TrustedHosts
[parameter(mandatory)]
[string] $Ensure,
# Credentials needed to manage WinRM TrustedHosts configuration
[parameter(mandatory)]
[PSCredential] $Credential
# Hashtable containing values is returned from this function
$retval = @{}
$retval.Add("Ensure","")
$retval.Add("ComputerName", "")
# Get current TrustedHosts comma-separated list using supplied credentials
$TH = $(Get-Item WSMan:\localhost\Client\TrustedHosts `
-credential $Credential).value
Write-Verbose "Current TrustedHosts Configuration has $TH"
if($TH.Length -gt 0){
$temp = $TH -split ","
[string] $newNode = ""
# Check if value in TrustedHosts list already have few computer names
if($temp.Length -gt 0) {
for($i = 0; $i -lt $temp.L $i++){
if($temp[$i].Trim() -eq $ComputerName.Trim())
$retval.Ensure = "Present"
# Found computer name
$puterName = $ComputerName
$retval.Ensure = "Absent" # Computer name is not in the list
$puterName = $ComputerName
# TrustedHosts list is empty
$retval.Ensure = "Absent"
$puterName = $ComputerName
Write-Verbose " Error executing Get-TargetResource function"
Write-Verbose $Error[0].Exception.ToString()
集 TargetResource TrustedHosts 自定义资源此函数也采用相同的参数集作为获取目标-资源。在此函数中,你可以使用 WSMAN 提供从 TrustedHosts 列表中的当前计算机名称。然后,确保属性的值,根据计算机名称添加或从 TrustedHosts 列表中删除。如果的值为当前,计算机名称添加到列表中。如果值不存在,它被移除。两种操作通过设置项目 cmdlet 和 WSMAN 提供程序,如中所示图 3。还有从函数没有返回值。您应该使用写详细使用详细的开关时,在控制台上提供额外的反馈。图 3 套 TargetResource 函数的 TrustedHosts 资源
Function Set-TargetResource
# Computer name to be added within TrustedHosts List
[parameter(mandatory)]
[string] $ComputerName,
# This property determines whether computer name should be
# added or removed from TrustedHosts
[parameter(mandatory)]
[string] $Ensure,
# Credentials needed to manage WinRM TrustedHosts configuration
[parameter(mandatory)]
[PSCredential] $Credential
# Get current TrustedHosts comma-separated list
# using supplied credentials
$TH = (Get-Item WSMan:\localhost\Client\TrustedHosts `
-credential $Credential).value
# Computer name should be added to the TrustedHosts list
if($Ensure -eq "Present") {
Write-Verbose "The current value is $TH"
if($TH.Length -gt 0)
# Adding Computer name when the TrustedHosts list
# configuration is not empty
$TH += ",$ComputerName"
Set-Item WSMan:\localhost\Client\TrustedHosts `
-Value $TH -credential $Credential -FORCE
# Adding Computer name when the TrustedHosts list
# configuration is empty
$TH += "$ComputerName"
Set-Item WSMan:\localhost\Client\TrustedHosts `
-Value $TH -credential $Credential -FORCE
Write-Verbose "The New value is $TH"
# Computer name should be removed from TrustedHosts list
Write-Verbose "The current value is $TH"
if($TH.Length -gt 0) {
$temp = $TH -split ","
[string] $newNode = ""
if($temp.Length -gt 0)
for($i = 0; $i -lt $temp.L $i++){
if($temp[$i].Trim() -ne $ComputerName.Trim())
$newNode += $temp[$i] + ","
$newNode = $newNode.TrimEnd(",")
# Updating list after removing the Computer name
Set-Item WSMan:\localhost\Client\TrustedHosts -Value $newNode
-credential $Credential -Force
Write-Verbose "The New value is $TH"
Write-Verbose " Error executing Set-TargetResource function"
Write-Verbose $Error[0].Exception.ToString()
测试 TargetResource TrustedHosts 自定义资源这个函数是类似于得到 TargetResource。唯一的区别是它从这个函数返回布尔值 True 或 False。首先,查询使用 WSMAN 提供程序的 TrustedHosts 属性的当前值。因为可能有多个以逗号分隔的计算机名称,您会需要遍历它们。同时循环,如果你找到匹配与配置提供的名称的计算机名称,请检查是否应出席或缺席。如果确保属性值是礼物和 TrustedHosts 设置中存在该计算机名称,则返回值设置为 True。如果确保属性值是缺席和 TrustedHosts 设置中存在该计算机名称,则返回值设置为 False。如果确保属性值是当前计算机名称中的 TrustedHosts 设置不存在,则返回值设置为 False。如果确保属性值是缺席中 TrustedHosts 设置计算机名称不存在,返回的值设置为 True,如中所示图 4。图 4 测试 TargetResource 函数的 TrustedHosts 资源
Function Test-TargetResource
# Computer name to be added within TrustedHosts List
[parameter(mandatory)]
[string] $ComputerName,
# This property determines whether computer name should
# be added or removed from TrustedHosts
[parameter(mandatory)]
[string] $Ensure,
# Credentials needd to manage WinRM TrustedHosts configuration
[parameter(mandatory)]
[PSCredential] $Credential
# Boolean return variable from this function
$retval = $false
# Get current TrustedHosts comma-separated list using supplied credentials
$TH = (Get-Item WSMan:\localhost\Client\TrustedHosts `
-credential $Credential).value
if($TH.Length -gt 0) {
$temp = $TH -split ","
[string] $newNode = ""
if($temp.Length -gt 0) {
for($i = 0; $i -lt $temp.L $i++){
if($temp[$i].Trim() -eq $ComputerName.Trim()) {
# Computer name exists within TrustedHosts list
if($Ensure -eq "Present")
# Computer name exists and expected to be present
$retval= $true
# Computer name exists and is not expected to be present
$retval = $false
# Computer name does not exist
if($Ensure -eq "Present")
$retval = $false
$retval = $true
# TrustedHosts list is empty
if($Ensure -eq "Present"){
$retval= $false
$retval = $true
return $retval
Write-Verbose " Error executing Test-TargetResource function"
Write-Verbose $Error[0].Exception.ToString()
导出自定义资源功能实施后的三个强制性 DSC 资源功能,您应该将它们导出。有两种方法执行此操作:创建一个 Windows PowerShell 模块清单.psd1 文件旁边的.psm1 文件。导出的函数从脚本文件本身使用出口 ModuleMember cmdlet。使用第二种方法导出的函数。在此方法中,从使用出口 ModuleMember cmdlet 的模块导出带有 TargetResource 后缀的所有功能。如果你有兴趣在使用第一种方法,按照相同的步骤,以前用于创建为每个 DSC 资源模块的清单文件。首先,执行新 ModuleManifest 命令和存储生成的.psd1 与.psm1 TrustedHosts 文件夹中和。Schema.mof 文件:
# Exports the three functiona as part of the module
Export-ModuleMember -Function *-TargetResource
在配置中使用自定义资源 TrustedHosts接下来,您将创建一个配置脚本来使用新的 TrustedHosts 自定义资源。将此配置应用到本地主机节点并提供给 TrustedHosts 资源三个属性的值。配置脚本以强制性的凭据类型的参数的 [PSCredential]。此参数分配给该资源的凭据属性,如中所示图 5。图 5 Get TargetResource 函数的 TrustedHosts 资源
Configuration TestWinRMTrustedHosts
param([parameter(mandatory)] [pscredential] $Credential)
import-dscresource -modulename WinRM
node localhost
TrustedHosts TrustedHostEntry
ComputerName = ""
Ensure ="Present"
Credential = $Credential
默认情况下,DSC 不让您在纯文本中使用的凭据。执行此操作通过配置数据哈希表。在哈希表,添加具有真正的 PSDSCAllowPlainTextPassword 属性作为其值。使用 PSDSCAllowPlainTextPassword 是一个安全风险,因为它允许您将密码存储为纯文本在 MOF 文件中。应使用安全证书作为一种最佳做法,以确保密码并不存储为纯文本在 MOF 文件和安全地传输使用此配置数据:
$ConfigData = @{
AllNodes = @(
NodeName = "localhost"
PSDscAllowPlainTextPassword = $true
接下来,创建一个配置对象,通过执行配置脚本并在 MOF 文件中,配置的位置传递-数据变量和凭据用 Get 凭据的命令:
TestWinRMTrustedHosts -OutputPath "C:\CR" -ConfigurationData $ConfigData `
-credential (get-credential)
执行此命令生成一个 MOF 文件,命名为 localhost.mof C:\CR 地点。当这执行时,它会要求输入用户名和密码。后生成 MOF 文件,它是应用在推送模式下配置的时间。通过执行开始 DscConfiguration 命令来执行此操作:
Start-DscConfiguration -Wait -Force -Path "C:\CR" -Verbose
应用配置之后, 检查 localhosts WinRM TrustedHosts 设置的值。ComputerName 值 DC01 现在应该 TrustedHosts 值的一部分。您可以添加或删除使用此自定义的资源的 TrustedHosts 值的计算机名称。导入 DSCResource您将使用导入 DSCResource,将自定义资源导入到配置脚本以执行设计时验证的自定义资源。这是另一种方式,以确保好撰写了自定义的资源。自定义资源,可在 C:\ProgramFiles\WindowsPowerShell\Modules。要导入或加载这些模块,请使用导入 DSCResource 函数。导入 DSCResource 是一个动态的功能,仅在配置脚本中可用。此函数不能超出配置的块,它又非位置的两个参数:ModuleName — — 应导入的模块的名称。名称 — — 应导入的资源的名称。如果只提供了 ModuleName 参数和省略名称,可用模块中的所有资源将被导都入。你可以使用这种方法来加载配置示例中的 TrustedHosts 资源:
Import-DSCResource –ModuleName WinRM
如果只提供了名称参数,并且省略了 ModuleName,DSC 将搜索所有的模块位置,可从 $env: PSModulePath,若要查找资源。一旦被发现,它导入的资源:
Import-DSCResource –Name TrustedHosts
如果提供了 ModuleName 和名称的参数,该资源加载和导入从提供的模块名称。这是迄今为止最快的机制,以发现和加载资源,因为 DSC 不必执行广泛的搜索:
Import-DSCResource –ModuleName WinRM –ResourceName TrustedHosts
您可以在同一时间使用逗号-加载多个资源-分离以及资源名称。结束语DSC 为您提供了必要的扩展,以便创建新资源并在配置中使用它们。Windows PowerShell 实施强制性的一些函数,从而简化了创作 DSC 自定义资源。这些职能应遵循几条规则在其执行情况。如果开箱提供的资源或从社会不能满足您的需要,您可以轻松创建您自己。这篇文章向您展示了如何创建一个简单的自定义资源具有完整的实施。它还显示如何你应该包装在 Windows PowerShell 模块中,这些资源由规则规管其文件和文件夹的结构。Ritesh Modi 是一位建筑师与 Microsoft 服务。他有超过十年的经验,构建和部署企业级解决方案。他是 Windows PowerShell,所需状态配置和系统中心的专家。他曾在 TechEd,内部培训和在博客 。联系到他在 。衷心感谢以下技术专家对本文的审阅:Abhik · 查特吉
此页面有帮助吗?
更多反馈?
1500 个剩余字符
我们非常感谢您的反馈。

我要回帖

更多关于 就急急急急急急 的文章

 

随机推荐