指定跨节点依赖关系

适用于:Windows PowerShell 5.0

DSC 提供特殊的资源,WaitForAllWaitForAnyWaitForSome,可用于在配置中指定其他节点上配置的依赖关系。 这些资源的行为如下所述:

  • WaitForAll:如果指定的资源在 NodeName 属性中定义的所有目标节点上处于所需状态,则该资源成功。
  • WaitForAny:如果指定的资源在NodeName 属性中定义的至少一个目标节点上处于所需状态,则该资源成功。
  • WaitForSome:指定除 NodeName 属性之外的 NodeCount 属性。 如果资源在 NodeName 属性定义的节点(数量下限由 NodeCount 指定)上处于所需的状态,则资源成功。

语法

WaitForAll 和 WaitForAny 资源共享相同语法。 将以下示例中的 <ResourceType> 替换为 WaitForAny 或 WaitForAll。 和 DependsOn 关键字一样,需要将名称的格式设置为 [ResourceType]ResourceName。 如果资源属于一个单独的配置,则在格式化字符串 [ResourceType]ResourceName::[ConfigurationName]::[ConfigurationName] 中包含 ConfigurationName。 NodeName 是计算机或节点,当前资源应在其中等待。

<ResourceType> [string] #ResourceName
{
    ResourceName = [string]
    NodeName = [string]
    [ DependsOn = [string[]] ]
    [ PsDscRunAsCredential = [PSCredential]]
    [ RetryCount = [Uint32] ]
    [ RetryIntervalSec = [Uint64] ]
    [ ThrottleLimit = [Uint32]]
}

WaitForSome 资源具有与上述示例类似的语法,但添加 NodeCount 项。 NodeCount 指示当前资源应等待的节点数。

WaitForSome [String] #ResourceName
{
    NodeCount = [UInt32]
    NodeName = [string[]]
    ResourceName = [string]
    [DependsOn = [string[]]]
    [PsDscRunAsCredential = [PSCredential]]
    [RetryCount = [UInt32]]
    [RetryIntervalSec = [UInt64]]
    [ThrottleLimit = [UInt32]]
}

所有 WaitForXXXX 共享以下语法项。

Property 说明
RetryIntervalSec 重试前等待的秒数。 最小值为 1。
RetryCount 重试次数上限。
ThrottleLimit 同时连接的计算机数量。 默认为 New-CimSession 默认值。
DependsOn 指示必须先运行其他资源的配置,再配置此资源。 有关详细信息,请参阅 DependsOn
PsDscRunAsCredential 请参阅通过用户凭据使用 DSC

使用 WaitForXXXX 资源

每个 WaitForXXXX 资源都在指定节点上等待指定资源完成。 然后,相同配置中的其他资源可以使用 DependsOn 项依赖于 WaitForXXXX 资源。

例如,在下面的配置中,目标节点正在等待 xADDomain 资源通过最多 30 次重试(时间间隔为 15 秒)在 MyDC 节点上完成,然后目标节点才能加入域。

默认情况下,WaitForXXX 资源尝试一次,然后就会失败。 虽然这不是必需的,但通常需要指定 RetryCount 和 RetryIntervalSec

Configuration JoinDomain
{
    Import-DSCResource -ModuleName xComputerManagement, xActiveDirectory

    Node myDC
    {
        WindowsFeature InstallAD
        {
            Ensure = 'Present'
            Name = 'AD-Domain-Services'
        }

        xADDomain NewDomain
        {
            DomainName = 'Contoso.com'
            DomainAdministratorCredential = (Get-Credential)
            SafemodeAdministratorPassword = (Get-Credential)
            DatabasePath = "C:\Windows\NTDS"
            LogPath = "C:\Windows\NTDS"
            SysvolPath = "C:\Windows\Sysvol"
        }
    }

    Node myDomainJoinedServer
    {
        WaitForAll DC
        {
            ResourceName      = '[xADDomain]NewDomain'
            NodeName          = 'MyDC'
            RetryIntervalSec  = 15
            RetryCount        = 30
        }

        xComputer JoinDomain
        {
            Name             = 'myPC'
            DomainName       = 'Contoso.com'
            Credential       = (Get-Credential)
            DependsOn        ='[WaitForAll]DC'
        }
    }
}

在编译配置时,将生成两个“.mof”文件。 使用 Start-DSCConfiguration cmdlet 将这两个“.mof”文件应用于目标节点

注意

WaitForXXX 资源使用 Windows 远程管理来检查其他节点的状态。 要详细了解 WinRM 的端口和安全性要求,请参阅 PowerShell 远程处理安全注意事项

另请参阅