Según los valores que se especifican para las propiedades del recurso en el script de configuración, Set-TargetResource debe realizar una de las siguientes acciones:

  • Crear un nuevo sitio web
  • Actualizar un sitio web existente
  • Eliminar un sitio web existente

El siguiente ejemplo lo ilustra.

The Set-TargetResource function is used to create, delete or configure a website on the target machine.

function Set-TargetResource
{
[CmdletBinding(SupportsShouldProcess=$true)]
param
(
[ValidateSet(«Present», «Absent»)]
[string]$Ensure = «Present»,

    [Parameter(Mandatory)]
    [ValidateNotNullOrEmpty()]
    [string]$Name,

    [Parameter(Mandatory)]
    [ValidateNotNullOrEmpty()]
    [string]$PhysicalPath,

    [ValidateSet("Started", "Stopped")]
    [string]$State = "Started",

    [string]$ApplicationPool,

    [string[]]$BindingInfo,

    [string[]]$Protocol
)

<#
    If Ensure is set to "Present" and the website specified in the mandatory input parameters
      does not exist, then create it using the specified parameter values
    Else, if Ensure is set to "Present" and the website does exist, then update its properties
      to match the values provided in the non-mandatory parameter values
    Else, if Ensure is set to "Absent" and the website does not exist, then do nothing
    Else, if Ensure is set to "Absent" and the website does exist, then delete the website
#>

}

Finalmente, la función Test-TargetResource debe tomar el mismo conjunto de parámetros que Get-TargetResource y Set-TargetResource. En su implementación de Test-TargetResource, verifique el estado de la instancia de recurso que se especifica en los parámetros clave. Si el estado real de la instancia del recurso no coincide con los valores especificados en el conjunto de parámetros, devuelve $false. De lo contrario, devuelve $true.

El siguiente código implementa la función Test-TargetResource.

function Test-TargetResource
{
[CmdletBinding()]
[OutputType([System.Boolean])]
param
(
[ValidateSet(«Present»,»Absent»)]
[System.String]
$Ensure,

    [parameter(Mandatory = $true)]
    [System.String]
    $Name,

    

[parameter(Mandatory = $true)]

[System.String] $PhysicalPath, [ValidateSet(«Started»,»Stopped»)] [System.String] $State, [System.String[]] $Protocol, [System.String[]] $BindingData, [System.String] $ApplicationPool ) # Get the current state $currentState = Get-TargetResource -Ensure $Ensure -Name $Name -PhysicalPath $PhysicalPath -State $State -ApplicationPool $ApplicationPool -BindingInfo $BindingInfo -Protocol $Protocol # Write-Verbose «Use this cmdlet to deliver information about command processing.» # Write-Debug «Use this cmdlet to write debug information while troubleshooting.» # Include logic to $result = [System.Boolean] # Add logic to test whether the website is present and its status matches the supplied # parameter values. If it does, return true. If it does not, return false. $result

}

Para facilitar la depuración, use el cmdlet Write-Verbose en su implementación de las tres funciones anteriores. Este cmdlet escribe texto en el flujo de mensajes detallados. De forma predeterminada, el flujo de mensajes detallados no se muestra, pero puede mostrarlo cambiando el valor de la variable $VerbosePreference o usando el parámetro Verbose en los cmdlets de DSC = new.

Creando el manifiesto del módulo:

Finalmente, use el cmdlet New-ModuleManifest para definir un archivo .psd1 para su módulo de recursos personalizado. Cuando invoque este cmdlet, haga referencia al archivo del módulo de script (.psm1) descrito en la sección anterior. Incluya Get-TargetResource, Set-TargetResource y Test-TargetResource en la lista de funciones para exportar. El siguiente es un archivo de manifiesto de ejemplo.

Module manifest for module ‘Demo.IIS.Website’

#

Generated on: 1/10/2013

#

@{

Script module or binary module file associated with this manifest.

RootModule = »

Version number of this module.

ModuleVersion = ‘1.0’

ID used to uniquely identify this module

GUID = ‘6AB5ED33-E923-41d8-A3A4-5ADDA2B301DE’

Author of this module

Author = ‘Contoso’

Company or vendor of this module

CompanyName = ‘Contoso’

Copyright statement for this module

Copyright = ‘Contoso. All rights reserved.’

Description of the functionality provided by this module

Description = ‘This Module is used to support the creation and configuration of IIS Websites through Get, Set and Test API on the DSC managed nodes.’

Minimum version of the Windows PowerShell engine required by this module

PowerShellVersion = ‘4.0’

Minimum version of the common language runtime (CLR) required by this module

CLRVersion = ‘4.0’

Modules that must be imported into the global environment prior to importing this module

RequiredModules = @(«WebAdministration»)

Modules to import as nested modules of the module specified in RootModule/ModuleToProcess

NestedModules = @(«Demo_IISWebsite.psm1»)

Functions to export from this module

FunctionsToExport = @(«Get-TargetResource», «Set-TargetResource», «Test-TargetResource»)

Cmdlets to export from this module

CmdletsToExport = ‘*’

HelpInfo URI of this module

HelpInfoURI = »

}

Compatibilidad con PsDscRunAsCredential:

PsDscRunAsCredential es compatible con PowerShell 5.0 y versiones posteriores.

La propiedad PsDscRunAsCredential se puede usar en el bloque de recursos de configuraciones de DSC para especificar que el recurso debe ejecutarse con un conjunto específico de credenciales. Para obtener más información, consulte Ejecución de DSC con credenciales de usuario.

Para acceder al contexto del usuario desde un recurso personalizado, puede usar la variable automática $PsDscContext.

Por ejemplo, el siguiente código escribiría el contexto de usuario bajo el cual se ejecuta el recurso en el flujo de salida detallado:

if (PsDscContext.RunAsUser) {
Write-Verbose «User: $PsDscContext.RunAsUser»;
}

Reinicio del nodo:

Si las acciones realizadas en su función Set-TargetResource requieren un reinicio, puede usar un indicador global para indicarle al LCM que reinicie Node. Este reinicio ocurre directamente después de que se complete la función Set-TargetResource.

Dentro de su función Set-TargetResource, agregue la siguiente línea de código.

Include this line if the resource requires a system reboot.

$global:DSCMachineStatus = 1

Para que el LCM reinicie el nodo, el indicador RebootNodeIfNeeded debe establecerse en $true. La configuración ActionAfterReboot también debe establecerse en ContinueConfiguration, que es la predeterminada. Para obtener más información sobre la configuración del LCM, consulte Configuración del Administrador de configuración local o Configuración del Administrador de configuración local (v4).

Por jioller

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *