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