Controlelijst voor het ontwerpen van resourceResource authoring checklist

Deze controlelijst is een lijst met aanbevolen procedures bij het ontwerpen van een nieuwe DSC-Resource.This checklist is a list of best practices when authoring a new DSC Resource.

Resource-module bevat .psd1 bestands- en schema.mof voor elke resourceResource module contains .psd1 file and schema.mof for every resource

Controleer of de resource heeft de juiste structuur en alle vereiste bestanden bevat.Check that your resource has correct structure and contains all required files. Elke resource-module een .psd1-bestand moet bevatten en elke resource niet-samengestelde schema.mof bestand moet hebben.Every resource module should contain a .psd1 file and every non-composite resource should have schema.mof file. Resources die geen schema bevatten worden niet weergegeven door Get-DscResource en gebruikers zich niet intellisense gebruiken bij het schrijven van code voor deze modules in ISE.Resources that do not contain schema will not be listed by Get-DscResource and users will not be able to use the intellisense when writing code against those modules in ISE. De mapstructuur voor xRemoteFile resource die deel uitmaakt van de xPSDesiredStateConfiguration bronmodule, ziet er als volgt uit:The directory structure for xRemoteFile resource, which is part of the xPSDesiredStateConfiguration resource module, looks as follows:

xPSDesiredStateConfiguration
    DSCResources
        MSFT_xRemoteFile
            MSFT_xRemoteFile.psm1
            MSFT_xRemoteFile.schema.mof
    Examples
        xRemoteFile_DownloadFile.ps1
    ResourceDesignerScripts
        GenerateXRemoteFileSchema.ps1
    Tests
        ResourceDesignerTests.ps1
    xPSDesiredStateConfiguration.psd1

Bron en het schema kloppen ##Resource and schema are correct##

Controleer het schema van de resource (*. schema.mof) bestand.Verify the resource schema (*.schema.mof) file. U kunt de DSC-Resource Designer te ontwikkelen en testen van uw schema.You can use the DSC Resource Designer to help develop and test your schema. Zorg ervoor dat:Make sure that:

  • Typen eigenschappen juist zijn (bijvoorbeeld tekenreeks niet gebruiken voor eigenschappen die numerieke waarden accepteert, moet u UInt32 of andere numerieke typen in plaats daarvan)Property types are correct (e.g. don’t use String for properties which accept numeric values, you should use UInt32 or other numeric types instead)
  • Eigenschapskenmerken juist zijn opgegeven als: ([key], [vereist], [schrijven], [lezen])Property attributes are specified correctly as: ([key], [required], [write], [read])
  • Ten minste één parameter in het schema heeft zijn gemarkeerd als [sleutel]At least one parameter in the schema has to be marked as [key]
  • [lezen] eigenschap niet naast elkaar worden gebruikt samen met een van: [vereist], [key], [schrijven][read] property does not coexist together with any of: [required], [key], [write]
  • Als meerdere kwalificaties zijn opgegeven, behalve [lezen], klikt u vervolgens prioriteit]If multiple qualifiers are specified except [read], then [key] takes precedence
  • Als [schrijven] en [vereist] zijn opgegeven, wordt de [vereist] heeft een hogere prioriteitIf [write] and [required] are specified, then [required] takes precedence
  • ValueMap is opgegeven, indien van toepassingValueMap is specified where appropriate

Voorbeeld:Example:

[Read, ValueMap{"Present", "Absent"}, Values{"Present", "Absent"}, Description("Says whether DestinationPath exists on the machine")] String Ensure;
  • Beschrijvende naam is opgegeven en bevestigt aan de naamgeving DSCFriendly name is specified and confirms to DSC naming conventions

Voorbeeld: [ClassVersion("1.0.0.0"), FriendlyName("xRemoteFile")]Example: [ClassVersion("1.0.0.0"), FriendlyName("xRemoteFile")]

Bovendien moet u Test xDscResource en Test xDscSchema cmdlets uit DSC-Resource Designer automatisch te controleren of de bron en het schema:Additionally, you should use Test-xDscResource and Test-xDscSchema cmdlets from DSC Resource Designer to automatically verify the resource and schema:

Test-xDscResource <Resource_folder>
Test-xDscSchema <Path_to_resource_schema_file>

Bijvoorbeeld:For example:

Test-xDscResource ..\DSCResources\MSFT_xRemoteFile
Test-xDscSchema ..\DSCResources\MSFT_xRemoteFile\MSFT_xRemoteFile.schema.mof

Resource wordt geladen zonder foutenResource loads without errors

Controleer of de module resources kan worden geladen.Check whether the resource module can be successfully loaded. Dit kan handmatig worden gerealiseerd door het uitvoeren van Import-Module <resource_module> -force en bevestigt dat geen fouten zijn opgetreden, of door schrijven test automation.This can be achieved manually, by running Import-Module <resource_module> -force and confirming that no errors occurred, or by writing test automation. In geval van de laatste kunt u deze structuur te volgen in uw testscenario:In case of the latter, you can follow this structure in your test case:

$error = $null
Import-Module <resource_module> –force
If ($error.count –ne 0) {
    Throw “Module was not imported correctly. Errors returned: $error”
}

Bron is idempotent in het geval is positiefResource is idempotent in the positive case

Een van de fundamentele kenmerken van DSC-resources is idempotence worden.One of the fundamental characteristics of DSC resources is be idempotence. Dit betekent dat het toepassen van een DSC-configuratie die resource met meerdere keren wordt altijd hetzelfde resultaat bereiken.It means that applying a DSC configuration containing that resource multiple times will always achieve the same result. Bijvoorbeeld, als we een configuratie met de volgende bestandsbron maken:For example, if we create a configuration which contains the following File resource:

File file {
    DestinationPath = "C:\test\test.txt"
    Contents = "Sample text"
} 

Bestand test.txt worden na het toepassen van voor het eerst wordt weergegeven in de map C:\test.After applying it for the first time, file test.txt should appear in C:\test folder. Latere uitvoeringen van dezelfde configuratie moeten echter niet wijzigen voor de status van de machine (bijvoorbeeld geen kopieën van het bestand test.txt moeten worden gemaakt).However, subsequent runs of the same configuration should not change the state of the machine (e.g. no copies of the test.txt file should be created). Om te controleren of een resource idempotent kunt u meerdere keren aanroepen Set TargetResource bij het testen van de resource direct of bel Start DscConfiguration meerdere keren bij het uitvoeren van end-to-end testen.To ensure a resource is idempotent you can repeatedly call Set-TargetResource when testing the resource directly, or call Start-DscConfiguration multiple times when doing end to end testing. Het resultaat moet hetzelfde na elke uitvoeren.The result should be the same after every run.

Testscenario gebruiker wijzigingTest user modification scenario

Door het wijzigen van de status van de machine en vervolgens opnieuw uit te voeren DSC, kunt u controleren of Set TargetResource en Test TargetResource naar behoren.By changing the state of the machine and then rerunning DSC, you can verify that Set-TargetResource and Test-TargetResource function properly. Hier vindt u stappen die u moet uitvoeren:Here are steps you should take:

  1. Beginnen met de resource niet in de gewenste status.Start with the resource not in the desired state.
  2. Configuratie uitvoeren met de bronRun configuration with your resource
  3. Controleer of Test DscConfiguration retourneert TrueVerify Test-DscConfiguration returns True
  4. Het geconfigureerde item om te worden uit de gewenste status wijzigenModify the configured item to be out of the desired state
  5. Controleer of Test DscConfiguration retourneert onwaar Hier volgt een voorbeeld van een concrete Resourcegebruik register:Verify Test-DscConfiguration returns false Here’s a more concrete example using Registry resource:
  6. Beginnen met de registersleutel niet in de gewenste statusStart with registry key not in the desired state
  7. Voer Start DscConfiguration met een configuratie wilt plaatsen in de gewenste status en controleer of deze is geslaagd.Run Start-DscConfiguration with a configuration to put it in the desired state and verify it passes.
  8. Voer Test DscConfiguration en controleer of wordt true geretourneerdRun Test-DscConfiguration and verify it returns true
  9. De waarde van de sleutel wijzigen zodat deze zich niet in de gewenste statusModify the value of the key so that it is not in the desired state
  10. Voer Test DscConfiguration en controleer of het resultaat is falseRun Test-DscConfiguration and verify it returns false
  11. Get-TargetResource functionaliteit is geverifieerd met behulp van Get-DscConfigurationGet-TargetResource functionality was verified using Get-DscConfiguration

Details van de huidige status van de resource moet worden geretourneerd door Get-TargetResource.Get-TargetResource should return details of the current state of the resource. Zorg ervoor dat deze te testen op aanroepen van Get-DscConfiguration na het toepassen van de configuratie en te verifiëren dat uitvoer correct de huidige status van de machine weerspiegelt.Make sure to test it by calling Get-DscConfiguration after you apply the configuration and verifying that output correctly reflects the current state of the machine. Het is belangrijk afzonderlijk testen omdat eventuele problemen op dit gebied wordt niet weergegeven bij het aanroepen van Start DscConfiguration.It's important to test it separately, since any issues in this area won't appear when calling Start-DscConfiguration.

Roep Get/Set/Test-TargetResource rechtstreeks fungeertCall Get/Set/Test-TargetResource functions directly

Zorg ervoor dat u testen de Get/Set/Test-TargetResource functies die zijn geïmplementeerd in de bron door ze rechtstreeks aanroepen en verifiëren dat ze werken zoals verwacht.Make sure you test the Get/Set/Test-TargetResource functions implemented in your resource by calling them directly and verifying that they work as expected.

Controleren of de complete Start DscConfigurationVerify End to End using Start-DscConfiguration

Testen Get/Set/Test-TargetResource functies door het aanroepen van deze rechtstreeks is belangrijk, maar niet alle problemen op deze manier worden gedetecteerd.Testing Get/Set/Test-TargetResource functions by calling them directly is important, but not all issues will be discovered this way. U moet zich richten aanzienlijk deel van uw tests over het gebruik van Start DscConfiguration of de pull-server.You should focus significant part of your testing on using Start-DscConfiguration or the pull server. Dit is in feite hoe gebruikers de resource, zodat de betekenis van dit type tests Onderschat niet gebruiken.In fact, this is how users will use the resource, so don’t underestimate the significance of this type of tests. Mogelijke typen problemen:Possible types of issues:

  • Referentie/sessie mogelijk anders werken omdat de DSC-agent wordt uitgevoerd als een service.Credential/Session may behave differently because the DSC agent runs as a service. Zorg ervoor dat alle functies hier complete testen.Be sure to test any features here end to end.
  • Fouten uitvoeren door Start DscConfiguration mogelijk anders uit dan bij het aanroepen van de Set TargetResource rechtstreeks werken.Errors output by Start-DscConfiguration may be different than those displayed when calling the Set-TargetResource function directly.

Ondersteunde platforms voor test-compatibiliteit van alle DSCTest compatability on all DSC supported platforms

Resource moet werken op alle platforms van DSC ondersteund (Windows Server 2008 R2 en nieuwer).Resource should work on all DSC supported platforms (Windows Server 2008 R2 and newer). De meest recente WMF (Windows Management Framework) installeren op uw besturingssysteem naar de nieuwste versie van DSC.Install the latest WMF (Windows Management Framework) on your OS to get the latest version of DSC. Als de bron aan het ontwerp niet op sommige van deze platformen werkt, kan een specifiek foutbericht moet worden geretourneerd.If your resource does not work on some of these platforms by design, a specific error message should be returned. Controleer ook of dat de resource controleert of u verbinding maakt met cmdlets aanwezig op bepaalde machine zijn.Also, make sure your resource checks whether cmdlets you are calling are present on particular machine. Windows Server 2012 toegevoegd een groot aantal nieuwe cmdlets die niet beschikbaar op Windows Server 2008 R2, zelfs met WMF is geïnstalleerd.Windows Server 2012 added a large number of new cmdlets that are not available on Windows Server 2008R2, even with WMF installed.

Controleer of op Windows-Client (indien van toepassing)Verify on Windows Client (if applicable)

Een zeer gangbaar gat in de test controleert de resource alleen op serverversies van Windows.One very common test gap is verifying the resource only on server versions of Windows. Veel resources ook zijn ontworpen om te werken op Client-SKU's, zodat als die true in het geval is, vergeet niet om deze te testen op deze platforms ook.Many resources are also designed to work on Client SKUs, so if that’s true in your case, don’t forget to test it on those platforms as well.

Get-DSCResource geeft een lijst van de resourceGet-DSCResource lists the resource

Na implementatie van de module, moet aanroepen van Get-DscResource aanbieden uw resource onder andere als gevolg hiervan.After deploying the module, calling Get-DscResource should list your resource among others as a result. Als u uw resource in de lijst vinden kunt, controleert u dat bestand schema.mof voor die bron bestaat.If you can’t find your resource in the list, make sure that schema.mof file for that resource exists.

Resource-module bevat voorbeeldenResource module contains examples

Maken kwaliteitsvoorbeelden waarmee anderen te begrijpen hoe deze gebruiken.Creating quality examples which will help others understand how to use it. Dit is essentieel, vooral omdat voorbeeldcode als documentatie worden beschouwd door veel gebruikers.This is crucial, especially since many users treat sample code as documentation.

  • Eerst moet u de voorbeelden die opgenomen met de module – minimaal worden bepalen, dient u belangrijkste gebruiksvoorbeelden omvatten voor uw resource:First, you should determine the examples that will be included with the module – at minimum, you should cover most important use cases for your resource:
  • Als uw module verschillende bronnen die nodig is om samen te werken voor een end-to-end-scenario bevat, is de elementaire end-to-end-voorbeeld in het ideale geval eerste.If your module contains several resources that need to work together for an end-to-end scenario, the basic end-to-end example would ideally be first.
  • De eerste voorbeelden moet zeer eenvoudig--het aan de slag met uw resources in kleine beheerbare segmenten (bijvoorbeeld een nieuwe VHD maken)The initial examples should be very simple -- how to get started with your resources in small manageable chunks (e.g. creating a new VHD)
  • Opeenvolgende voorbeelden moeten bouwen in deze voorbeelden (bijvoorbeeld een virtuele machine maken vanaf een VHD, verwijderen van de virtuele machine, VM wijzigen) en weergeven van geavanceerde functionaliteit (bv. maken van een virtuele machine met dynamisch geheugen)Subsequent examples should build on those examples (e.g. creating a VM from a VHD, removing VM, modifying VM), and show advanced functionality (e.g. creating a VM with dynamic memory)
  • Voorbeeldconfiguraties parameters moeten worden gebruikt (alle waarden als parameters voor de configuratie moeten worden doorgegeven en er mag geen waarden hardcoded):Example configurations should be parameterized (all values should be passed to the configuration as parameters and there should be no hardcoded values):

    configuration Sample_xRemoteFile_DownloadFile
    {
      param
      (
          [string[]] $nodeName = 'localhost',
    
          [parameter(Mandatory = $true)]
          [ValidateNotNullOrEmpty()]
          [String] $destinationPath,
    
          [parameter(Mandatory = $true)]
          [ValidateNotNullOrEmpty()]
          [String] $uri,
    
          [String] $userAgent,
    
          [Hashtable] $headers
      )
    
      Import-DscResource -Name MSFT_xRemoteFile -ModuleName xPSDesiredStateConfiguration
    
      Node $nodeName
      {
          xRemoteFile DownloadFile
          {
              DestinationPath = $destinationPath
              Uri = $uri
              UserAgent = $userAgent
              Headers = $headers
          }
      }
    } 
    
  • Het is raadzaam om op te nemen (opmerkingen uitgaand) voorbeeld van hoe u de configuratie met de werkelijke waarden aan het einde van het voorbeeldscript niet aanroepen.It’s a good practice to include (commented out) example of how to call the configuration with the actual values at the end of the example script. Bijvoorbeeld, in de bovenstaande configuratie is het niet altijd duidelijk dat de beste manier om op te geven UserAgent is:For example, in the configuration above it isn't neccessarily obvious that the best way to specify UserAgent is:

UserAgent = [Microsoft.PowerShell.Commands.PSUserAgent]::InternetExplorer
Een opmerking kan in dat geval verduidelijken dat de beoogde uitvoering van de configuratie:In which case a comment can clarify the intended execution of the configuration:

<# 
Sample use (parameter values need to be changed according to your scenario):

Sample_xRemoteFile_DownloadFile -destinationPath "$env:SystemDrive\fileName.jpg" -uri "http://www.contoso.com/image.jpg"

Sample_xRemoteFile_DownloadFile -destinationPath "$env:SystemDrive\fileName.jpg" -uri "http://www.contoso.com/image.jpg" `
-userAgent [Microsoft.PowerShell.Commands.PSUserAgent]::InternetExplorer -headers @{"Accept-Language" = "en-US"}
#>  
  • Elke bijvoorbeeld, een korte beschrijving waarin wordt uitgelegd wat het doet en de betekenis van de parameters te schrijven.For each example, write a short description which explains what it does, and the meaning of the parameters.
  • Zorg ervoor dat voorbeelden hebben betrekking op de meeste belangrijke scenario's voor uw resource en als er niets ontbreekt, Controleer of ze alle uitvoeren machine in de gewenste status geplaatst.Make sure examples cover most the important scenarios for your resource and if there’s nothing missing, verify that they all execute and put machine in the desired state.

Foutberichten zijn gemakkelijk te begrijpen en oplossen van problemen met gebruikers helpenError messages are easy to understand and help users solve problems

Goede foutberichten worden:Good error messages should be:

  • : Het grootste probleem met de foutberichten bestaat dat ze vaak niet bestaan, zorg er dus dat er zijn.There: The biggest problem with error messages is that they often don’t exist, so make sure they are there.
  • Gemakkelijker te begrijpen: menselijke leesbare, niet verborgen foutcodesEasy to understand: Human readable, no obscure error codes
  • Nauwkeurig: Is beschreven wat er precies het probleemPrecise: Describe what’s exactly the problem
  • Feitelijke: Advies hoe het probleem op te lossenConstructive: Advice how to fix the issue
  • Beleefd: Niet schuldig gebruiker of maken ze van mening bent dat ongeldige Zorg ervoor dat u fouten in de complete scenario's controleren (met behulp van Start DscConfiguration), omdat ze van die afwijken kunnen bij het uitvoeren van functies van de resource direct geretourneerd.Polite: Don’t blame user or make them feel bad Make sure you verify errors in End to End scenarios (using Start-DscConfiguration), because they may differ from those returned when running resource functions directly.

Berichten in het logboek zijn gemakkelijker te begrijpen en informatieve (inclusief-verbose,-ETW-logboeken en foutopsporing)Log messages are easy to understand and informative (including –verbose, –debug and ETW logs)

Zorg ervoor dat Logboeken die zijn gegenereerd door de resource gemakkelijk zijn te begrijpen en geef een waarde voor de gebruiker.Ensure that logs outputted by the resource are easy to understand and provide value to the user. Resources moeten uitvoer alle informatie die nuttig voor de gebruiker zijn kan, maar meer logboeken is niet altijd beter.Resources should output all information which might be helpful to the user, but more logs is not always better. U moet voorkomen van redundantie en gegevens die niet worden uitgevoerd bieden aanvullende waarde – Maak iemand honderden logboekvermeldingen doorlopen om te kunnen vinden wat ze zoekt niet.You should avoid redundancy and outputting data which does not provide additional value – don’t make someone go through hundreds of log entries in order to find what they're looking for. Er worden geen logboeken is natuurlijk niet een aanvaardbare oplossing voor dit probleem ofwel.Of course, no logs is not an acceptable solution for this problem either.

Bij het testen, moet u ook uitgebreide analyseren en foutopsporing van Logboeken (door het uitvoeren van Start DscConfiguration met-verbose en -switches op de juiste wijze voor foutopsporing), ook als ETW-Logboeken.When testing, you should also analyze verbose and debug logs (by running Start-DscConfiguration with –verbose and –debug switches appropriately), as well as ETW logs. Als u DSC ETW-Logboeken, gaat u naar Logboeken en open de volgende map: toepassingen en Services van Microsoft - Windows - Desired State Configuration.To see DSC ETW logs, go to Event Viewer and open the following folder: Applications and Services- Microsoft - Windows - Desired State Configuration. Er standaard worden operationele kanaal, maar zorg ervoor dat het inschakelen van analyse en foutopsporing kanalen voordat de configuratie wordt uitgevoerd.By default there will be Operational channel, but make sure you enable Analytic and Debug channels before running the configuration. U kunt de onderstaande script uitvoeren zodat analysen/Debug kanalen:To enable Analytic/Debug channels, you can execute script below:

$statusEnabled = $true
# Use "Analytic" to enable Analytic channel
$eventLogFullName = "Microsoft-Windows-Dsc/Debug" 
$commandToExecute = "wevtutil set-log $eventLogFullName /e:$statusEnabled /q:$statusEnabled   "
$log = New-Object System.Diagnostics.Eventing.Reader.EventLogConfiguration $eventLogFullName
if($statusEnabled -eq $log.IsEnabled)
{
    Write-Host -Verbose "The channel event log is already enabled"
    return
}     
Invoke-Expression $commandToExecute 

Resource-implementatie bevat geen hardcoded padenResource implementation does not contain hardcoded paths

Zorg ervoor dat er zijn geen paden vastgelegd in de resource-implementatie, met name als ze taal wordt ervan uitgegaan dat (en-us), of wanneer er systeemvariabelen die kunnen worden gebruikt.Ensure there are no hardcoded paths in the resource implementation, particularly if they assume language (en-us), or when there are system variables that can be used. Als de bron moet toegang tot bepaalde paden, omgevingsvariabelen gebruiken in plaats van hardcoderen wordt het pad, zoals deze afwijken op andere computers.If your resource need to access specific paths, use environment variables instead of hardcoding the path, as it may differ on other machines.

Voorbeeld:Example:

In plaats van:Instead of:

$tempPath = "C:\Users\kkaczma\AppData\Local\Temp\MyResource"
$programFilesPath = "C:\Program Files (x86)"

U kunt schrijven:You can write:

$tempPath = Join-Path $env:temp "MyResource"
$programFilesPath = ${env:ProgramFiles(x86)} 

Implementatie van resource bevatten geen gebruikersgegevensResource implementation does not contain user information

Zorg ervoor dat er zijn geen e-namen, accountgegevens of namen van mensen in de code.Make sure there are no email names, account information, or names of people in the code.

Resource is getest met de referenties geldig/ongeldigResource was tested with valid/invalid credentials

Als de resource een referentie als parameter:If your resource takes a credential as parameter:

  • Controleer of de resource-werkt als lokaal systeem (of het computeraccount voor de externe bronnen) geen toegang heeft.Verify the resource works when Local System (or the computer account for remote resources) does not have access.
  • Controleer of de resource werkt met een referentie die is opgegeven voor u, ingesteld en testenVerify the resource works with a credential specified for Get, Set and Test
  • Als de bron naar shares, test u alle varianten die u ondersteunen wilt, zoals:If your resource accesses shares, test all the variants you need to support, such as:
    • Standaard windows-bestandsshares.Standard windows shares.
    • DFS-shares.DFS shares.
    • SAMBA-shares (als u ondersteuning voor Linux.)SAMBA shares (if you want to support Linux.)

Resource vereist geen interactieve invoerResource does not require interactive input

Get/Set/Test-TargetResource functies automatisch moet worden uitgevoerd en voor gebruikers in elk stadium van de uitvoering van de invoer niet opgeschort (bv. Gebruik geen Get-Credential binnen deze functies).Get/Set/Test-TargetResource functions should be executed automatically and must not wait for user’s input at any stage of execution (e.g. you should not use Get-Credential inside these functions). Als u leveren de invoer van gebruiker wilt, moet u deze doorgeven aan de configuratie als parameter tijdens de compilatiefase.If you need to provide user’s input, you should pass it to the configuration as parameter during the compilation phase.

Resourcefunctionaliteit is uitgebreid getest.Resource functionality was thoroughly tested

Deze controlelijst bevat de items die zijn belangrijk om te worden getest en/of vaak zijn gemist.This checklist contains items which are important to be tested and/or are often missed. Er zijn bunch van tests, hoofdzakelijk functionele die zijn die specifiek zijn voor de resource die u wilt testen en niet hier worden vermeld.There will be bunch of tests, mainly functional ones which will be specific to the resource you are testing and are not mentioned here. Vergeet niet over negatieve testcases.Don’t forget about negative test cases.

Kunt u beter: Resource-module bevat de map Tests met ResourceDesignerTests.ps1 scriptBest practice: Resource module contains Tests folder with ResourceDesignerTests.ps1 script

Het is raadzaam map 'Tests' create binnen bronmodule, ResourceDesignerTests.ps1-bestand maken en toevoegen van testen met behulp van Test xDscResource en Test xDscSchema voor alle resources in bepaalde module.It’s a good practice to create folder “Tests” inside resource module, create ResourceDesignerTests.ps1 file and add tests using Test-xDscResource and Test-xDscSchema for all resources in given module. Op deze manier kunt u snel schema's van alle resources uit het opgegeven modules en voert u een sanity controleren voordat u publiceert valideren.This way you can quickly validate schemas of all resources from the given modules and do a sanity check before publishing. XRemoteFile, kan ResourceTests.ps1 Zoek net zo eenvoudig als:For xRemoteFile, ResourceTests.ps1 could look as simple as:

Test-xDscResource ..\DSCResources\MSFT_xRemoteFile
Test-xDscSchema ..\DSCResources\MSFT_xRemoteFile\MSFT_xRemoteFile.schema.mof 

Kunt u beter: resourcemap resource designer script voor het genereren van schema ## bevatBest practice: Resource folder contains resource designer script for generating schema##

Elke bron moet een resource designer script een mof-schema van de resource genereert bevatten.Each resource should contain a resource designer script which generates a mof schema of the resource. Dit bestand moet worden geplaatst \ResourceDesignerScripts en de naam genererenSchema.ps1 voor xRemoteFile resource dit bestand GenerateXRemoteFileSchema.ps1 zou worden aangeroepen en bevat:This file should be placed in \ResourceDesignerScripts and be named GenerateSchema.ps1 For xRemoteFile resource this file would be called GenerateXRemoteFileSchema.ps1 and contain:

$DestinationPath = New-xDscResourceProperty -Name DestinationPath -Type String -Attribute Key -Description 'Path under which downloaded or copied file should be accessible after operation.'
$Uri = New-xDscResourceProperty -Name Uri -Type String -Attribute Required -Description 'Uri of a file which should be copied or downloaded. This parameter supports HTTP and HTTPS values.'
$Headers = New-xDscResourceProperty -Name Headers -Type Hashtable[] -Attribute Write -Description 'Headers of the web request.'
$UserAgent = New-xDscResourceProperty -Name UserAgent -Type String -Attribute Write -Description 'User agent for the web request.' 
$Ensure = New-xDscResourceProperty -Name Ensure -Type String -Attribute Read -ValidateSet "Present", "Absent" -Description 'Says whether DestinationPath exists on the machine'
$Credential = New-xDscResourceProperty -Name Credential -Type PSCredential -Attribute Write -Description 'Specifies a user account that has permission to send the request.'
$CertificateThumbprint = New-xDscResourceProperty -Name CertificateThumbprint -Type String -Attribute Write -Description 'Digital public key certificate that is used to send the request.'

New-xDscResource -Name MSFT_xRemoteFile -Property @($DestinationPath, $Uri, $Headers, $UserAgent, $Ensure, $Credential, $CertificateThumbprint) -ModuleName xPSDesiredStateConfiguration2 -FriendlyName xRemoteFile 

Kunt u beter: bron - whatif wordt ondersteundBest practice: Resource supports -whatif

Als uw resource 'gevaarlijke' bewerkingen uitvoert, is het raadzaam om - whatif-functionaliteit te implementeren.If your resource is performing “dangerous” operations, it’s a good practice to implement -whatif functionality. Nadat deze voltooid, zorg er dan voor dat bewerkingen waarvoor er gebeuren zou als de opdracht is uitgevoerd zonder whatif switch hierin wordt beschreven whatif uitvoer.After it’s done, make sure that whatif output correctly describes operations which would happen if command was executed without whatif switch. Controleer ook of bewerkingen wordt niet uitgevoerd (de status van het knooppunt worden niet gewijzigd) wanneer-whatif switch aanwezig is.Also, verify that operations does not execute (no changes to the node’s state are made) when –whatif switch is present. Bijvoorbeeld, Stel dat we bestandsbron wilt testen.For example, let’s assume we are testing File resource. Hieronder vindt u eenvoudige configuratie gemaakt van bestand 'test.txt' met inhoud 'test':Below is simple configuration which creates file “test.txt” with contents “test”:

configuration config
{
    node localhost 
    {
        File file
        {
            Contents="test"
            DestinationPath="C:\test\test.txt"
        }
    }
}
config 

Als wij compileren en vervolgens de configuratie met de schakeloptie-whatif wordt uitgevoerd, is de uitvoer vertellen ons precies wat er gebeurt wanneer we de configuratie uitvoert.If we compile and then execute the configuration with the –whatif switch, the output is telling us exactly what would happen when we run the configuration. Tot maar is niet worden uitgevoerd door de configuratie zelf (test.txt bestand is niet gemaakt).The configuration itself however was not executed (test.txt file was not created).

Start-DscConfiguration -path .\config -ComputerName localhost -wait -verbose -whatif
VERBOSE: Perform operation 'Invoke CimMethod' with following parameters, ''methodName' =
SendConfigurationApply,'className' = MSFT_DSCLocalConfigurationManager,'namespaceName' =
root/Microsoft/Windows/DesiredStateConfiguration'.
VERBOSE: An LCM method call arrived from computer CHARLESX1 with user sid
S-1-5-21-397955417-626881126-188441444-5179871.
What if: [X]: LCM:  [ Start  Set      ]
What if: [X]: LCM:  [ Start  Resource ]  [[File]file]
What if: [X]: LCM:  [ Start  Test     ]  [[File]file]
What if: [X]:                            [[File]file] The system cannot find the file specified.
What if: [X]:                            [[File]file] The related file/directory is: C:\test\test.txt.
What if: [X]: LCM:  [ End    Test     ]  [[File]file]  in 0.0270 seconds.
What if: [X]: LCM:  [ Start  Set      ]  [[File]file]
What if: [X]:                            [[File]file] The system cannot find the file specified.
What if: [X]:                            [[File]file] The related file/directory is: C:\test\test.txt.
What if: [X]:                            [C:\test\test.txt] Creating and writing contents and setting attributes.
What if: [X]: LCM:  [ End    Set      ]  [[File]file]  in 0.0180 seconds.
What if: [X]: LCM:  [ End    Resource ]  [[File]file]
What if: [X]: LCM:  [ End    Set      ]
VERBOSE: [X]: LCM:  [ End    Set      ]    in  0.1050 seconds.
VERBOSE: Operation 'Invoke CimMethod' complete.

Deze lijst is niet volledig, maar deze bevat veel belangrijke problemen die kunnen worden aangetroffen tijdens het ontwerpen, ontwikkelen en testen van DSC-resources.This list is not exhaustive, but it covers many important issues which can be encountered while designing, developing and testing DSC resources.