|
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