|
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