Skip to content

Commit 4fac3c8

Browse files
Merge pull request #8 from ActiveDirectoryManagementFramework/2023-march
1.1.9
2 parents a21053b + 0b7bd95 commit 4fac3c8

File tree

5 files changed

+81
-10
lines changed

5 files changed

+81
-10
lines changed

ADMF.Core/ADMF.Core.psd1

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
RootModule = 'ADMF.Core.psm1'
44

55
# Version number of this module.
6-
ModuleVersion = '1.1.6'
6+
ModuleVersion = '1.1.9'
77

88
# ID used to uniquely identify this module
99
GUID = '11e2d894-33d7-4020-a65e-f13c2f1893aa'
@@ -47,6 +47,7 @@
4747
'Get-AdcExchangeVersion'
4848
'New-AdcChange'
4949
'Sync-AdcObject'
50+
'Write-AdcChangeLog'
5051
)
5152

5253
# Cmdlets to export from this module

ADMF.Core/changelog.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
## 1.1.9 (2023-05-16)
4+
5+
- New: Command Write-AdcChangeLog - Writes a log entry for change objects.
6+
- Upd: New-AdcChange - added `Data` parameter, to accept additional properties to include in the object.
7+
- Upd: New-AdcChange - added `ToString` parameter, to allow overriding default display styles.
8+
39
## 1.1.6 (2023-02-10)
410

511
- New: Command Compare-AdcProperty - Helper function simplifying the changes processing of Test-* commands.

ADMF.Core/en-us/strings.psd1

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
# This is where the strings go, that are written by
22
# Write-PSFMessage, Stop-PSFFunction or the PSFramework validation scriptblocks
33
@{
4-
'Get-LdapObject.SearchError' = 'Failed to execute ldap request.' #
5-
'Get-LdapObject.Searchfilter' = 'Searching with filter: {0}' # $LdapFilter
6-
'Get-LdapObject.SearchRoot' = 'Searching {0} in {1}' # $SearchScope, $searcher.SearchRoot.Path
4+
'Get-LdapObject.SearchError' = 'Failed to execute ldap request.' #
5+
'Get-LdapObject.Searchfilter' = 'Searching with filter: {0}' # $LdapFilter
6+
'Get-LdapObject.SearchRoot' = 'Searching {0} in {1}' # $SearchScope, $searcher.SearchRoot.Path
77

8-
'Sync-AdcObject.ConnectError' = 'Failed to connect to {0}' # $errorObject.TargetObject
8+
'Sync-AdcObject.ConnectError' = 'Failed to connect to {0}' # $errorObject.TargetObject
99

1010
'Sync-LdapObject.DestinationAccessError' = 'Failed to connect to destination server {0} | {1}' # $Target, $_
1111
'Sync-LdapObject.PerformingReplication' = 'Performing replication from {0} to {1}' # $Server, $Target
12-
'Sync-LdapObject.SourceAccessError' = 'Failed to connect to source server {0} | {1}' # $Server, $_
12+
'Sync-LdapObject.SourceAccessError' = 'Failed to connect to source server {0} | {1}' # $Server, $_
13+
14+
'Write-AdcChangeLog.ChangeEntry' = 'Updating {0} from {1} to {2} on {3}' # $change.Property, $change.Old, $change.New, $change.Identity
1315
}

ADMF.Core/functions/New-AdcChange.ps1

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,15 @@
2222
2323
.PARAMETER Type
2424
The object/component type of the object being changed
25+
26+
.PARAMETER Data
27+
Additional data to include in the change object.
28+
Will ignore keys named "Property", "Old", "New" or "Identity"
29+
30+
.PARAMETER ToString
31+
Scriptblock that determines, how the change is being displayed when a property itself.
32+
Defaults to '<property> -> <newvalue>'
33+
Use $this to refer to the object being displayed.
2534
2635
.EXAMPLE
2736
PS C:\> New-Change -Property Path -OldValue $adObject.DistinguishedName -NewValue $path -Identity $adObject -Type Object
@@ -43,15 +52,27 @@
4352
$Identity,
4453

4554
[string]
46-
$Type = 'Unknown'
55+
$Type = 'Unknown',
56+
57+
[hashtable]
58+
$Data = @{ },
59+
60+
[scriptblock]
61+
$ToString = { '{0} -> {1}' -f $this.Property, $this.New }
4762
)
4863

49-
$change = [PSCustomObject]@{
50-
PSTypeName = "DomainManagement.$Type.Change"
64+
$changeHash = @{
65+
PSTypeName = "ADMF.$Type.Change"
5166
Property = $Property
5267
Old = $OldValue
5368
New = $NewValue
5469
Identity = $Identity
5570
}
56-
Add-Member -InputObject $change -MemberType ScriptMethod -Name ToString -Value { '{0} -> {1}' -f $this.Property, $this.New } -Force -PassThru
71+
foreach ($pair in $Data.GetEnumerator()) {
72+
if ($pair.Key -in $changeHash.Keys) { continue }
73+
$changeHash[$pair.Key] = $pair.Value
74+
}
75+
76+
$change = [PSCustomObject]$changeHash
77+
Add-Member -InputObject $change -MemberType ScriptMethod -Name ToString -Value $ToString -Force -PassThru
5778
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
function Write-AdcChangeLog {
2+
<#
3+
.SYNOPSIS
4+
Writes a log entry for change objects.
5+
6+
.DESCRIPTION
7+
Writes a log entry for change objects.
8+
This is designed to provide standardized logging for changes being applied.
9+
10+
Use New-AdcChange to generate a change object in the format expected by this command.
11+
12+
.PARAMETER Changes
13+
The list of changes to log
14+
15+
.EXAMPLE
16+
PS C:\> Write-AdcChangeLog -Changes $testItem.Changed
17+
18+
Writes log entries, one for each change in the $testItem variable.
19+
#>
20+
[CmdletBinding()]
21+
param (
22+
[Parameter(Mandatory = $true, ValueFromPipeline = $true)]
23+
[AllowEmptyCollection()]
24+
[AllowNull()]
25+
$Changes
26+
)
27+
28+
begin {
29+
$param = @{
30+
Level = 'SomewhatVerbose'
31+
String = 'Write-AdcChangeLog.ChangeEntry'
32+
Tag = 'change'
33+
}
34+
}
35+
36+
process {
37+
foreach ($change in $Changes) {
38+
Write-PSFMessage @param -StringValues $change.Property, $change.Old, $change.New, $change.Identity -Target $change -Data ($change | ConvertTo-PSFHashtable)
39+
}
40+
}
41+
}

0 commit comments

Comments
 (0)