Een DSC SMB-pull-server instellen
Van toepassing op: Windows PowerShell 4.0, Windows PowerShell 5.0
Belangrijk
De pull-server (Windows Feature DSC-Service) is een ondersteund onderdeel van Windows Server, maar er zijn geen plannen om nieuwe functies of mogelijkheden aan te bieden. We willen graag dat u weet dat een nieuwere versie van DSC nu algemeen beschikbaar is, beheerd door een functie van Azure Policy met de naam gastconfiguratie. De gastconfiguratieservice combineert functies van DSC-extensie, Azure Automation State Configuration en de meest gevraagde functies uit feedback van klanten. Gastconfiguratie omvat ook ondersteuning voor hybride machines via servers met Arc.
Een DSC SMB-pullserver is een computer die als host fungeert voor SMB-bestandsshares die DSC-configuratiebestanden en DSC-resources beschikbaar maken voor doelknooppunten wanneer deze knooppunten daarom vragen.
Als u een SMB-pull-server voor DSC wilt gebruiken, moet u het volgende doen:
- Een SMB-bestandsshare instellen op een server met PowerShell 4.0 of hoger
- Een client met PowerShell 4.0 of hoger configureren om gegevens op te halen uit die SMB-share
De resource xSmbShare gebruiken om een SMB-bestandsshare te maken
Er zijn een aantal manieren om een SMB-bestandsshare in te stellen, maar laten we eens kijken hoe u dit kunt doen met behulp van DSC.
De xSmbShare-resource installeren
Roep de cmdlet Install-Module aan om de xSmbShare-module te installeren.
Notitie
Install-Module
is opgenomen in de PowerShellGet-module , die is opgenomen in PowerShell 5.0.
XSmbShare bevat de DSC-resource xSmbShare, die kan worden gebruikt om een SMB-bestandsshare te maken.
De map en bestandsshare maken
De volgende configuratie maakt gebruik van de bestandsbron om de map voor de share te maken en de xSmbShare-resource om de SMB-share in te stellen:
Configuration SmbShare
{
Import-DscResource -ModuleName PSDesiredStateConfiguration
Import-DscResource -ModuleName xSmbShare
Node localhost
{
File CreateFolder
{
DestinationPath = 'C:\DscSmbShare'
Type = 'Directory'
Ensure = 'Present'
}
xSMBShare CreateShare
{
Name = 'DscSmbShare'
Path = 'C:\DscSmbShare'
FullAccess = 'administrator'
ReadAccess = 'myDomain\Contoso-Server$'
FolderEnumerationMode = 'AccessBased'
Ensure = 'Present'
DependsOn = '[File]CreateFolder'
}
}
}
De configuratie maakt de map C:\DscSmbShare
, als deze nog niet bestaat, en gebruikt deze map vervolgens als een SMB-bestandsshare. FullAccess moet worden gegeven aan elk account dat moet schrijven naar of verwijderen uit de bestandsshare. ReadAccess moet worden gegeven aan alle clientknooppunten die configuraties en/of DSC-resources van de share ophalen.
Notitie
DSC wordt standaard uitgevoerd als het systeemaccount, dus de computer zelf moet toegang hebben tot de share.
Bestandssysteemtoegang geven tot de pull-client
Als u ReadAccess aan een clientknooppunt geeft, heeft dat knooppunt toegang tot de SMB-share, maar niet tot bestanden of mappen binnen die share. U moet clientknooppunten expliciet toegang verlenen tot de SMB-sharemap en submappen. We kunnen dit doen met DSC door toe te voegen met behulp van de resource cNtfsPermissionEntry , die is opgenomen in de CNtfsAccessControl-module . Met de volgende configuratie wordt een cNtfsPermissionEntry-blok toegevoegd dat ReadAndExecute-toegang verleent tot de pull-client:
Configuration DSCSMB
{
Import-DscResource -ModuleName PSDesiredStateConfiguration
Import-DscResource -ModuleName xSmbShare
Import-DscResource -ModuleName cNtfsAccessControl
Node localhost
{
File CreateFolder
{
DestinationPath = 'C:\DscSmbShare'
Type = 'Directory'
Ensure = 'Present'
}
xSMBShare CreateShare
{
Name = 'DscSmbShare'
Path = 'C:\DscSmbShare'
FullAccess = 'administrator'
ReadAccess = 'myDomain\Contoso-Server$'
FolderEnumerationMode = 'AccessBased'
Ensure = 'Present'
DependsOn = '[File]CreateFolder'
}
cNtfsPermissionEntry PermissionSet1
{
Ensure = 'Present'
Path = 'C:\DscSmbShare'
Principal = 'myDomain\Contoso-Server$'
AccessControlInformation = @(
cNtfsAccessControlInformation
{
AccessControlType = 'Allow'
FileSystemRights = 'ReadAndExecute'
Inheritance = 'ThisFolderSubfoldersAndFiles'
NoPropagateInherit = $false
}
)
DependsOn = '[File]CreateFolder'
}
}
}
Configuraties en resources plaatsen
Sla alle configuratie-MOF-bestanden en/of DSC-resources op die clientknooppunten moeten ophalen in de SMB-sharemap.
Elk configuratie-MOF-bestand moet de naam <ConfigurationID>.mof
hebben, waarbij <ConfigurationID>
de waarde is van de eigenschap ConfigurationID van de LCM van het doelknooppunt. Zie Een pull-client instellen met configuratie-id voor meer informatie over het instellen van pull-clients.
Notitie
U moet configuratie-id's gebruiken als u een SMB-pull-server gebruikt. Configuratienamen worden niet ondersteund voor SMB.
Elke resourcemodule moet worden gezipt en benoemd volgens het volgende patroon {Module Name}_{Module Version}.zip
. Een module met de naam xWebAdminstration met moduleversie 3.1.2.0 krijgt bijvoorbeeld de naam xWebAdministration_3.2.1.0.zip
. Elke versie van een module moet zijn opgenomen in één zip-bestand. Afzonderlijke versies van een module in een zip-bestand worden niet ondersteund.
Voordat u DSC-resourcemodules inpakt voor gebruik met de pull-server, moet u een kleine wijziging aanbrengen in de mapstructuur.
De standaardindeling van modules met DSC-resource in WMF 5.0 is {Module Folder}\{Module Version}\DscResources\{DSC Resource Folder}\
.
Voordat u de pull-server inpakt, verwijdert u de {Module version}
map zodat het pad verandert in {Module Folder}\DscResources\{DSC Resource Folder}\
. Met deze wijziging zipt u de map zoals hierboven beschreven en plaatst u deze zip-bestanden in de SMB-sharemap.
De MOF-controlesom maken
Een MOF-configuratiebestand moet worden gekoppeld aan een controlesombestand, zodat een LCM op een doelknooppunt de configuratie kan valideren. Als u een controlesom wilt maken, roept u de cmdlet New-DSCCheckSum aan. De cmdlet gebruikt een Path
parameter die de map opgeeft waar de configuratie-MOF zich bevindt. De cmdlet maakt een controlesombestand met de naam ConfigurationMOFName.mof.checksum
, waarbij ConfigurationMOFName
de naam van het configuratiemof-bestand is. Als er meer dan één MOF-configuratiebestanden in de opgegeven map zijn, wordt er een controlesom gemaakt voor elke configuratie in de map.
Het controlesombestand moet aanwezig zijn in dezelfde map als het MOF-configuratiebestand ($env:PROGRAMFILES\WindowsPowerShell\DscService\Configuration
standaard) en dezelfde naam hebben als de .checksum
extensie toegevoegd.
Notitie
Als u het configuratie-MOF-bestand op welke manier dan ook wijzigt, moet u ook het controlesombestand opnieuw maken.
Een pull-client instellen voor SMB
Als u een client wilt instellen die configuraties en/of resources ophaalt uit een SMB-share, configureert u LCM (Local Configuration Manager) van de client met ConfigurationRepositoryShare- en ResourceRepositoryShare-blokken die de share opgeven waaruit configuraties en DSC-resources moeten worden opgehaald.
Zie Een pull-client instellen met configuratie-id voor meer informatie over het configureren van de LCM.
Notitie
Ter vereenvoudiging wordt in dit voorbeeld het PSDscAllowPlainTextPassword gebruikt om het doorgeven van een wachtwoord zonder opmaak aan de parameter Credential toe te staan. Zie Opties voor referenties in Configuratiegegevens voor meer informatie over het veiliger doorgeven van referenties. U MOET een ConfigurationID opgeven in het blok Instellingen van een metaconfiguratie voor een SMB-pull-server, zelfs als u alleen resources ophaalt.
$secpasswd = ConvertTo-SecureString "Pass1Word" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("TestUser", $secpasswd)
[DSCLocalConfigurationManager()]
configuration SmbCredTest
{
Node $AllNodes.NodeName
{
Settings
{
RefreshMode = 'Pull'
RefreshFrequencyMins = 30
RebootNodeIfNeeded = $true
ConfigurationID = '16db7357-9083-4806-a80c-ebbaf4acd6c1'
}
ConfigurationRepositoryShare SmbConfigShare
{
SourcePath = '\\WIN-E0TRU6U11B1\DscSmbShare'
Credential = $mycreds
}
ResourceRepositoryShare SmbResourceShare
{
SourcePath = '\\WIN-E0TRU6U11B1\DscSmbShare'
Credential = $mycreds
}
}
}
$ConfigurationData = @{
AllNodes = @(
@{
#the "*" means "all nodes named in ConfigData" so we don't have to repeat ourselves
NodeName="localhost"
PSDscAllowPlainTextPassword = $true
})
}
Dankbetuigingen
Met dank aan de volgende personen:
- Mike F. Robbins, wiens berichten over het gebruik van SMB voor DSC hebben geholpen bij het informeren van de inhoud in dit onderwerp. Zijn blog is bij Mike F Robbins.
- Serge Nikalaichyk, die de cNtfsAccessControl-module heeft geschreven. De bron voor deze module is cNtfsAccessControl.
Zie ook
overzicht van Windows PowerShell Desired State Configuration
Een pull-client instellen met behulp van het configuratie-id