|
222 | 222 | }
|
223 | 223 | }
|
224 | 224 | #endregion Scripts
|
225 |
| - $createdTemplateItems=@() |
226 |
| - switch ($templateData.Type.ToString()) { |
| 225 | + $createdTemplateItems = switch ($templateData.Type.ToString()) { |
227 | 226 | #region File
|
228 | 227 | "File" {
|
229 | 228 | foreach ($child in $templateData.Children) {
|
230 |
| - $createdTemplateItems += New-TemplateItem -Item $child -Path $OutPath -ParameterFlat $Parameters -ParameterScript $scriptParameters -Raw $Raw |
231 |
| - # Write-PSFMessage "`$createdTemplateItems=$($createdTemplateItems|convertto-json)" |
232 |
| - # Write-TemplateResult -TemplateResult $createdTemplateItems -Encoding $Encoding |
| 229 | + New-TemplateItem -Item $child -Path $OutPath -ParameterFlat $Parameters -ParameterScript $scriptParameters -Raw $Raw |
233 | 230 | }
|
234 | 231 | if ($Raw -and $templateData.Scripts.Values) {
|
235 | 232 | $templateData.Scripts.Values | Export-Clixml -Path (Join-Path $OutPath "_PSMD_ParameterScripts.xml")
|
|
257 | 254 | #endregion Resolve output folder
|
258 | 255 |
|
259 | 256 | foreach ($child in $templateData.Children) {
|
260 |
| - $createdTemplateItems += New-TemplateItem -Item $child -Path $newFolder.FullName -ParameterFlat $Parameters -ParameterScript $scriptParameters -Raw $Raw |
261 |
| - # Write-PSFMessage "`$createdTemplateItems=$($createdTemplateItems|convertto-json)" |
262 |
| - # Write-TemplateResult -TemplateResult $createdTemplateItems -Encoding $Encoding |
| 257 | + New-TemplateItem -Item $child -Path $newFolder.FullName -ParameterFlat $Parameters -ParameterScript $scriptParameters -Raw $Raw |
263 | 258 | }
|
264 | 259 |
|
265 | 260 | #region Write Config File (Raw)
|
|
290 | 285 | $optionsTemplate = $optionsTemplate -replace "þþþPLACEHOLDER-$($guid)þþþ", ""
|
291 | 286 | }
|
292 | 287 |
|
293 |
| - $createdTemplateItems += [TemplateResult]@{ |
294 |
| - Filename = "PSMDTemplate.ps1" |
| 288 | + [PSModuleDevelopment.Template.TemplateResult]@{ |
| 289 | + Name = "PSMDTemplate.ps1" |
295 | 290 | Path = $newFolder.FullName
|
296 | 291 | FullPath = (Join-Path $newFolder.FullName "PSMDTemplate.ps1")
|
297 | 292 | Content = $optionsTemplate
|
298 | 293 | }
|
299 |
| - # Set-Content -Path $configFile -Value $optionsTemplate -Encoding ([PSFEncoding]'utf-8').Encoding |
300 | 294 | }
|
301 | 295 | #endregion Write Config File (Raw)
|
302 | 296 | }
|
303 | 297 | #endregion Project
|
304 | 298 | }
|
305 |
| - If($GenerateObjects){ |
| 299 | + If ($GenerateObjects) { |
306 | 300 | return $createdTemplateItems
|
307 | 301 | }
|
308 | 302 | Write-TemplateResult -TemplateResult $createdTemplateItems -Encoding $Encoding
|
|
355 | 349 | $text = [PSModuleDevelopment.Utility.UtilityHost]::Replace($text, "$($identifier)!$($param)!$($identifier)", $ParameterScript[$param], $false)
|
356 | 350 | }
|
357 | 351 | }
|
358 |
| - return [TemplateResult]@{ |
359 |
| - Filename = $fileName |
| 352 | + return [PSModuleDevelopment.Template.TemplateResult]@{ |
| 353 | + Name = $fileName |
360 | 354 | Path = $Path
|
361 | 355 | FullPath = $destPath
|
362 | 356 | Content = $text
|
363 | 357 | }
|
364 | 358 | }
|
365 | 359 | else {
|
366 | 360 | $bytes = [System.Convert]::FromBase64String($Item.Value)
|
367 |
| - return [TemplateResult]@{ |
368 |
| - Filename = $fileName |
| 361 | + return [PSModuleDevelopment.Template.TemplateResult]@{ |
| 362 | + Name = $fileName |
369 | 363 | Path = $Path
|
370 | 364 | FullPath = $destPath
|
371 | 365 | Content = $bytes
|
|
387 | 381 | }
|
388 | 382 | }
|
389 | 383 | $folder = Join-Path -Path $Path -ChildPath $folderName
|
390 |
| - # $folder = New-Item -Path $Path -Name $folderName -ItemType Directory |
391 |
| - $createdTemplateItems = @() |
| 384 | + |
| 385 | + # Return a folder object to make sure empty folders are not excluded |
| 386 | + [PSModuleDevelopment.Template.TemplateResult]@{ |
| 387 | + Name = $folderName |
| 388 | + Path = $Path |
| 389 | + FullPath = $folder |
| 390 | + IsFolder = $true |
| 391 | + IsText = $false |
| 392 | + } |
| 393 | + |
392 | 394 | foreach ($child in $Item.Children) {
|
393 |
| - $createdTemplateItems += New-TemplateItem -Item $child -Path $folder -ParameterFlat $ParameterFlat -ParameterScript $ParameterScript -Raw $Raw |
| 395 | + New-TemplateItem -Item $child -Path $folder -ParameterFlat $ParameterFlat -ParameterScript $ParameterScript -Raw $Raw |
394 | 396 | }
|
395 |
| - return $createdTemplateItems |
396 | 397 | }
|
397 | 398 | #endregion Folder
|
398 | 399 | }
|
| 400 | + |
399 | 401 | function Write-TemplateResult {
|
400 | 402 | [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseShouldProcessForStateChangingFunctions", "")]
|
401 | 403 | [CmdletBinding()]
|
402 | 404 | param (
|
403 |
| - [TemplateResult[]] |
| 405 | + [PSModuleDevelopment.Template.TemplateResult[]] |
404 | 406 | $TemplateResult,
|
405 | 407 |
|
406 | 408 | [PSFEncoding]
|
407 | 409 | $Encoding
|
408 | 410 | )
|
409 |
| - foreach ($item in $TemplateResult) { |
410 |
| - Write-PSFMessage -Level Verbose -Message "Creating file: $($Item.FullPath)" -FunctionName Invoke-PSMDTemplate -ModuleName PSModuleDevelopment -Tag 'create', 'template' |
411 |
| - # Write-PSFMessage -Level Verbose -Message "Creating file: $($Item |convertto-json)" -FunctionName Invoke-PSMDTemplate -ModuleName PSModuleDevelopment -Tag 'create', 'template' |
412 |
| - if (-not (Test-Path $Item.Path)) { |
413 |
| - Write-PSFMessage -Level Verbose -Message "Creating Folder $($Item.Path)" |
414 |
| - New-Item -Path $Item.Path -ItemType Directory | Out-Null |
| 411 | + $msgParam = @{ Level = 'Verbose'; FunctionName = 'Invoke-PSMDTemplate' } |
| 412 | + foreach ($item in $TemplateResult | Sort-Object { $_.FullPath.Length }) { |
| 413 | + Write-PSFMessage @msgParam -Message "Creating file: $($item.FullPath)" -FunctionName Invoke-PSMDTemplate -ModuleName PSModuleDevelopment -Tag 'create', 'template' |
| 414 | + if (-not (Test-Path $item.Path)) { |
| 415 | + Write-PSFMessage -Level Verbose -Message "Creating Folder $($item.Path)" |
| 416 | + $null = New-Item -Path $item.Path -ItemType Directory |
| 417 | + } |
| 418 | + if ($item.IsFolder) { |
| 419 | + if (-not (Test-Path $item.FullPath)) { |
| 420 | + Write-PSFMessage @msgParam -Message "Creating Folder $($item.FullPath)" |
| 421 | + $null = New-Item -Path $item.FullPath -ItemType Directory |
| 422 | + } |
| 423 | + continue |
415 | 424 | }
|
416 |
| - if ($Item.IsText) { |
417 |
| - Write-PSFMessage -Level Verbose -Message "Creating as a Text-File" |
418 |
| - [System.IO.File]::WriteAllText($Item.FullPath, $Item.Content, $Encoding) |
| 425 | + if ($item.IsText) { |
| 426 | + Write-PSFMessage @msgParam -Message "Creating as a Text-File" |
| 427 | + [System.IO.File]::WriteAllText($item.FullPath, $item.Content, $Encoding) |
419 | 428 | }
|
420 | 429 | else {
|
421 |
| - Write-PSFMessage -Level Verbose -Message "Creating as a Binary-File" |
422 |
| - [System.IO.File]::WriteAllBytes($Item.FullPath, $Item.Content) |
| 430 | + Write-PSFMessage @msgParam -Message "Creating as a Binary-File" |
| 431 | + [System.IO.File]::WriteAllBytes($item.FullPath, $item.Content) |
423 | 432 | }
|
424 | 433 | }
|
425 | 434 | }
|
|
0 commit comments