@@ -19,10 +19,17 @@ $script:localizedData = Get-LocalizedData -DefaultUICulture 'en-US'
19
19
. PARAMETER Path
20
20
Specifies the X.500 path of the OrganizationalUnit (OU) or container where the new object is created.
21
21
22
+ . PARAMETER Credential
23
+ The credential to be used to perform the operation on Active Directory.
24
+
25
+ . PARAMETER DomainController
26
+ Active Directory domain controller to enact the change upon.
27
+
22
28
. NOTES
23
29
Used Functions:
24
30
Name | Module
25
31
------------------------------|--------------------------
32
+ Get-ADCommonParameters | ActiveDirectoryDsc.Common
26
33
Get-ADOrganizationalUnit | ActiveDirectory
27
34
Assert-Module | DscResource.Common
28
35
New-InvalidOperationException | DscResource.Common
@@ -39,17 +46,39 @@ function Get-TargetResource
39
46
40
47
[Parameter (Mandatory = $true )]
41
48
[System.String ]
42
- $Path
49
+ $Path ,
50
+
51
+ [Parameter ()]
52
+ [ValidateNotNull ()]
53
+ [System.Management.Automation.PSCredential ]
54
+ [System.Management.Automation.CredentialAttribute ()]
55
+ $Credential ,
56
+
57
+ [Parameter ()]
58
+ [ValidateNotNull ()]
59
+ [System.String ]
60
+ $DomainController
43
61
)
44
62
45
63
Assert-Module - ModuleName ' ActiveDirectory'
46
64
47
- Write-Verbose ($script :localizedData.RetrievingOU -f $Name , $Path )
65
+ $commonParameters = Get-ADCommonParameters @PSBoundParameters
66
+
67
+ Write-Verbose - Message ($script :localizedData.RetrievingOU -f $Name , $Path )
68
+
69
+ $getADOUProperties = (' Name' , ' DistinguishedName' , ' Description' , ' ProtectedFromAccidentalDeletion' )
48
70
49
71
try
50
72
{
51
- $ou = Get-ADOrganizationalUnit - Filter " Name -eq `" $Name `" " - SearchBase $Path `
52
- - SearchScope OneLevel - Properties ProtectedFromAccidentalDeletion, Description
73
+ $getADOUParameters = $commonParameters.Clone ()
74
+ $getADOUParameters.Filter = (' Name -eq "{0}"' -f $Name )
75
+ $getADOUParameters.SearchBase = $Path
76
+ $getADOUParameters.SearchScope = ' OneLevel'
77
+ $getADOUParameters.Properties = $getADOUProperties
78
+ $getADOUParameters.Remove (' Identity' )
79
+ $getADOUParameters.Remove (' Name' )
80
+ $getADOUParameters.Remove (' Path' )
81
+ $ou = Get-ADOrganizationalUnit @getADOUParameters
53
82
}
54
83
catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException ]
55
84
{
@@ -108,6 +137,9 @@ function Get-TargetResource
108
137
. PARAMETER Credential
109
138
The credential to be used to perform the operation on Active Directory.
110
139
140
+ . PARAMETER DomainController
141
+ Active Directory domain controller to enact the change upon.
142
+
111
143
. PARAMETER ProtectedFromAccidentalDeletion
112
144
Specifies if the Organizational Unit (OU) container should be protected from deletion. Default value is $true.
113
145
@@ -161,30 +193,50 @@ function Test-TargetResource
161
193
[Parameter ()]
162
194
[ValidateNotNull ()]
163
195
[System.Boolean ]
164
- $RestoreFromRecycleBin
196
+ $RestoreFromRecycleBin ,
197
+
198
+ [Parameter ()]
199
+ [ValidateNotNullOrEmpty ()]
200
+ [System.String ]
201
+ $DomainController
165
202
)
166
203
167
- $targetResource = Get-TargetResource - Name $Name - Path $Path
204
+ $getTargetResourceParameters = @ {
205
+ Name = $Name
206
+ Path = $Path
207
+ Credential = $Credential
208
+ DomainController = $DomainController
209
+ }
210
+
211
+ # Remove parameters that have not been specified, unless in the IgnoreParameters array
212
+ @ ($getTargetResourceParameters.Keys ) |
213
+ ForEach-Object {
214
+ if (-not $PSBoundParameters.ContainsKey ($_ ))
215
+ {
216
+ $getTargetResourceParameters.Remove ($_ )
217
+ }
218
+ }
219
+ $getTargetResourceResult = Get-TargetResource @getTargetResourceParameters
168
220
169
- if ($targetResource .Ensure -eq ' Present' )
221
+ if ($getTargetResourceResult .Ensure -eq ' Present' )
170
222
{
171
223
# Resource exists
172
224
if ($Ensure -eq ' Present' )
173
225
{
174
226
# Resource should exist
175
- $propertiesNotInDesiredState = (
176
- Compare-ResourcePropertyState - CurrentValue $targetResource - DesiredValues $PSBoundParameters - IgnoreProperties (' Credential' , ' RestoreFromRecycleBin' ) |
177
- Where-Object - Property InDesiredState -eq $false )
227
+ $ignoreProperties = @ (' DomainController' , ' Credential' , ' RestoreFromRecycleBin' )
228
+ $propertiesNotInDesiredState = (Compare-ResourcePropertyState - CurrentValues $getTargetResourceResult `
229
+ - DesiredValues $PSBoundParameters - IgnoreProperties $ignoreProperties `
230
+ - Verbose:$VerbosePreference | Where-Object - Property InDesiredState -eq $false )
178
231
179
232
if ($propertiesNotInDesiredState )
180
233
{
181
234
$inDesiredState = $false
182
235
}
183
236
else
184
237
{
185
- # Resource is in the desired state
186
- Write-Verbose ($script :localizedData.OUInDesiredState -f $Name )
187
-
238
+ # Resource is in desired state
239
+ Write-Verbose - Message ($script :localizedData.OUInDesiredState -f $Name )
188
240
$inDesiredState = $true
189
241
}
190
242
}
@@ -234,6 +286,9 @@ function Test-TargetResource
234
286
. PARAMETER Credential
235
287
The credential to be used to perform the operation on Active Directory.
236
288
289
+ . PARAMETER DomainController
290
+ Active Directory domain controller to enact the change upon.
291
+
237
292
. PARAMETER ProtectedFromAccidentalDeletion
238
293
Specifies if the Organizational Unit (OU) container should be protected from deletion. Default value is $true.
239
294
@@ -278,6 +333,11 @@ function Set-TargetResource
278
333
[System.Management.Automation.CredentialAttribute ()]
279
334
$Credential ,
280
335
336
+ [Parameter ()]
337
+ [ValidateNotNullOrEmpty ()]
338
+ [System.String ]
339
+ $DomainController ,
340
+
281
341
[Parameter ()]
282
342
[ValidateNotNull ()]
283
343
[System.Boolean ]
@@ -294,16 +354,32 @@ function Set-TargetResource
294
354
$RestoreFromRecycleBin
295
355
)
296
356
297
- $targetResource = Get-TargetResource - Name $Name - Path $Path
357
+ $getTargetResourceParameters = @ {
358
+ Name = $Name
359
+ Path = $Path
360
+ Credential = $Credential
361
+ DomainController = $DomainController
362
+ }
298
363
299
- if ($targetResource.Ensure -eq ' Present' )
364
+ # Remove parameters that have not been specified
365
+ @ ($getTargetResourceParameters.Keys ) |
366
+ ForEach-Object {
367
+ if (-not $PSBoundParameters.ContainsKey ($_ ))
368
+ {
369
+ $getTargetResourceParameters.Remove ($_ )
370
+ }
371
+ }
372
+
373
+ $getTargetResourceResult = Get-TargetResource @getTargetResourceParameters
374
+
375
+ if ($getTargetResourceResult.Ensure -eq ' Present' )
300
376
{
301
377
if ($Ensure -eq ' Present' )
302
378
{
303
379
Write-Verbose ($script :localizedData.UpdatingOU -f $Name )
304
380
305
381
$setADOrganizationalUnitParams = @ {
306
- Identity = $targetResource .DistinguishedName
382
+ Identity = $getTargetResourceResult .DistinguishedName
307
383
Description = $Description
308
384
ProtectedFromAccidentalDeletion = $ProtectedFromAccidentalDeletion
309
385
}
@@ -313,6 +389,11 @@ function Set-TargetResource
313
389
$setADOrganizationalUnitParams [' Credential' ] = $Credential
314
390
}
315
391
392
+ if ($DomainController )
393
+ {
394
+ $setADOrganizationalUnitParams [' Server' ] = $DomainController
395
+ }
396
+
316
397
try
317
398
{
318
399
Set-ADOrganizationalUnit @setADOrganizationalUnitParams
@@ -329,10 +410,10 @@ function Set-TargetResource
329
410
Write-Verbose ($script :localizedData.DeletingOU -f $Name )
330
411
331
412
# Disable 'ProtectedFromAccidentalDeletion' if it is set.
332
- if ($targetResource .ProtectedFromAccidentalDeletion )
413
+ if ($getTargetResourceResult .ProtectedFromAccidentalDeletion )
333
414
{
334
415
$setADOrganizationalUnitParams = @ {
335
- Identity = $targetResource .DistinguishedName
416
+ Identity = $getTargetResourceResult .DistinguishedName
336
417
ProtectedFromAccidentalDeletion = $false
337
418
}
338
419
@@ -341,6 +422,11 @@ function Set-TargetResource
341
422
$setADOrganizationalUnitParams [' Credential' ] = $Credential
342
423
}
343
424
425
+ if ($DomainController )
426
+ {
427
+ $setADOrganizationalUnitParams [' Server' ] = $DomainController
428
+ }
429
+
344
430
try
345
431
{
346
432
Set-ADOrganizationalUnit @setADOrganizationalUnitParams
@@ -353,14 +439,19 @@ function Set-TargetResource
353
439
}
354
440
355
441
$removeADOrganizationalUnitParams = @ {
356
- Identity = $targetResource .DistinguishedName
442
+ Identity = $getTargetResourceResult .DistinguishedName
357
443
}
358
444
359
445
if ($Credential )
360
446
{
361
447
$removeADOrganizationalUnitParams [' Credential' ] = $Credential
362
448
}
363
449
450
+ if ($DomainController )
451
+ {
452
+ $removeADOrganizationalUnitParams [' Server' ] = $DomainController
453
+ }
454
+
364
455
try
365
456
{
366
457
Remove-ADOrganizationalUnit @removeADOrganizationalUnitParams
@@ -391,6 +482,11 @@ function Set-TargetResource
391
482
$restoreParams [' Credential' ] = $Credential
392
483
}
393
484
485
+ if ($DomainController )
486
+ {
487
+ $restoreParams [' Server' ] = $DomainController
488
+ }
489
+
394
490
$restoreSuccessful = Restore-ADCommonObject @restoreParams
395
491
}
396
492
@@ -410,6 +506,11 @@ function Set-TargetResource
410
506
$newADOrganizationalUnitParams [' Credential' ] = $Credential
411
507
}
412
508
509
+ if ($DomainController )
510
+ {
511
+ $newADOrganizationalUnitParams [' Server' ] = $DomainController
512
+ }
513
+
413
514
try
414
515
{
415
516
New-ADOrganizationalUnit @newADOrganizationalUnitParams
0 commit comments