Skip to content

Commit 4fc6bf9

Browse files
committed
Bug fixes
Updates to serialization & deserialization functions to fix a problem introduced in PoSh 4.0 Update to Export-SqlServerInventoryDatabaseEngineConfigToExcel to fix a problem with length of data in group membership list on worksheet 13
1 parent 613823e commit 4fc6bf9

2 files changed

Lines changed: 16 additions & 21 deletions

File tree

0 Bytes
Binary file not shown.

Modules/SqlServerInventory/SqlServerInventory.psm1

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -107,18 +107,16 @@ function ConvertTo-GzCliXml {
107107
$BufferedStream = New-Object -TypeName System.IO.BufferedStream($GZipStream, 8192)
108108
$xw = [System.Xml.XmlTextWriter]::Create($BufferedStream)
109109
$serializer = $ctor.Invoke($xw)
110-
$method = $type.GetMethod('Serialize', 'nonpublic,instance', $null, [type[]]@([object]), $null)
111-
$done = $type.GetMethod('Done', [System.Reflection.BindingFlags]'nonpublic,instance')
112110
}
113111
process {
114112
try {
115-
[void]$method.Invoke($serializer, $InputObject)
113+
[void]$type.InvokeMember('Serialize', 'InvokeMethod,NonPublic,Instance', $null, $serializer, [object[]]@($InputObject))
116114
} catch {
117115
write-warning "Could not serialize $($InputObject.gettype()): $_"
118116
}
119117
}
120118
end {
121-
[void]$done.invoke($serializer, @())
119+
[void]$type.InvokeMember('Done', 'InvokeMethod,NonPublic,Instance', $null, $serializer, @())
122120
$xw.Close()
123121
$BufferedStream.Flush()
124122
$BufferedStream.Dispose()
@@ -133,7 +131,7 @@ function ConvertTo-GzCliXml {
133131
$MemoryStream.Dispose()
134132

135133
# Cleanup
136-
Remove-Variable -Name type, ctor, MemoryStream, GZipStream, xw, serializer, method, done
134+
Remove-Variable -Name type, ctor, MemoryStream, GZipStream, xw, serializer
137135
}
138136
}
139137

@@ -158,12 +156,10 @@ function ConvertFrom-GzCliXml {
158156
$GZipStream = New-Object -TypeName System.IO.Compression.GZipStream($MemoryStream, [System.IO.Compression.CompressionMode]::Decompress, $false)
159157
$xr = [System.Xml.XmlTextReader]::Create($GZipStream)
160158
$deserializer = $ctor.Invoke($xr)
161-
$method = @($type.GetMethods('nonpublic,instance') | Where-Object {$_.Name -like "Deserialize"})[1]
162-
$done = $type.GetMethod('Done', [System.Reflection.BindingFlags]'nonpublic,instance')
163-
while (!$done.Invoke($deserializer, @()))
159+
while (!$type.InvokeMember('Done', 'InvokeMethod,NonPublic,Instance', $null, $deserializer, @()))
164160
{
165161
try {
166-
$method.Invoke($deserializer, "")
162+
$type.InvokeMember('Deserialize', 'InvokeMethod,NonPublic,Instance', $null, $deserializer, @())
167163
} catch {
168164
Write-Warning "Could not deserialize ${string}: $_"
169165
}
@@ -173,7 +169,7 @@ function ConvertFrom-GzCliXml {
173169
$MemoryStream.Dispose()
174170

175171
# Cleanup
176-
Remove-Variable -Name type, ctor, MemoryStream, GZipStream, xr, deserializer, method, done
172+
Remove-Variable -Name type, ctor, MemoryStream, GZipStream, xr, deserializer
177173
}
178174
}
179175

@@ -196,26 +192,24 @@ function Export-GzCliXml {
196192
$BufferedStream = New-Object -TypeName System.IO.BufferedStream($GZipStream, 8192)
197193
$xw = [System.Xml.XmlTextWriter]::Create($BufferedStream)
198194
$serializer = $ctor.Invoke($xw)
199-
$method = $type.GetMethod('Serialize', 'nonpublic,instance', $null, [type[]]@([object]), $null)
200-
$done = $type.GetMethod('Done', [System.Reflection.BindingFlags]'nonpublic,instance')
201195
}
202196
process {
203197
try {
204-
[void]$method.Invoke($serializer, $InputObject)
198+
[void]$type.InvokeMember('Serialize', 'InvokeMethod,NonPublic,Instance', $null, $serializer, [object[]]@($InputObject))
205199
} catch {
206200
write-warning "Could not serialize $($InputObject.gettype()): $_"
207201
}
208202
}
209203
end {
210-
[void]$done.invoke($serializer, @())
204+
[void]$type.InvokeMember('Done', 'InvokeMethod,NonPublic,Instance', $null, $serializer, @())
211205
$xw.Close()
212206
$BufferedStream.Flush()
213207
$BufferedStream.Dispose()
214208
$GZipStream.Dispose()
215209
$FileStream.Dispose()
216210

217211
# Cleanup
218-
Remove-Variable -Name type, ctor, FileStream, GZipStream, xw, serializer, method, done
212+
Remove-Variable -Name type, ctor, FileStream, GZipStream, xw, serializer
219213
}
220214
}
221215

@@ -238,12 +232,10 @@ function Import-GzCliXml {
238232
$GZipStream = New-Object -TypeName System.IO.Compression.GZipStream($FileStream, [System.IO.Compression.CompressionMode]::Decompress, $false)
239233
$xr = [System.Xml.XmlTextReader]::Create($GZipStream)
240234
$deserializer = $ctor.Invoke($xr)
241-
$method = @($type.GetMethods('nonpublic,instance') | Where-Object {$_.Name -like "Deserialize"})[1]
242-
$done = $type.GetMethod('Done', [System.Reflection.BindingFlags]'nonpublic,instance')
243-
while (!$done.Invoke($deserializer, @()))
235+
while (!$type.InvokeMember('Done', 'InvokeMethod,NonPublic,Instance', $null, $deserializer, @()))
244236
{
245237
try {
246-
$method.Invoke($deserializer, "")
238+
$type.InvokeMember('Deserialize', 'InvokeMethod,NonPublic,Instance', $null, $deserializer, @())
247239
} catch {
248240
Write-Warning "Could not deserialize ${string}: $_"
249241
}
@@ -256,7 +248,7 @@ function Import-GzCliXml {
256248
end
257249
{
258250
# Cleanup
259-
Remove-Variable -Name type, ctor, FileStream, GZipStream, xr, deserializer, method, done
251+
Remove-Variable -Name type, ctor, FileStream, GZipStream, xr, deserializer
260252
}
261253
}
262254

@@ -6022,7 +6014,10 @@ function Export-SqlServerInventoryDatabaseEngineConfigToExcel {
60226014
$WorksheetData[$Row,$Col++] = $_.IsSystemObject
60236015
$WorksheetData[$Row,$Col++] = $_.HasBlankPassword
60246016
$WorksheetData[$Row,$Col++] = $_.HasNameAsPassword
6025-
$WorksheetData[$Row,$Col++] = ($_.Member | Where-Object { $_.Sid } | ForEach-Object { $_.NTAccountName } | Sort-Object) -join $Delimiter
6017+
$WorksheetData[$Row,$Col++] = $(
6018+
$Member = ($_.Member | Where-Object { $_.Sid } | ForEach-Object { $_.NTAccountName } | Sort-Object) -join $Delimiter
6019+
if ($Member.Length -gt 5000) { $Member.Substring(0, 4997) + '...' } else { $Member }
6020+
)
60266021
$Row++
60276022
}
60286023
}

0 commit comments

Comments
 (0)