Skip to content

Commit 761ec4d

Browse files
Merge pull request #170 from PowershellFrameworkCollective/templates
2.2.11.138
2 parents 14c1c34 + bfdea17 commit 761ec4d

39 files changed

+1316
-331
lines changed

PSModuleDevelopment/PSModuleDevelopment.psd1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
RootModule = 'PSModuleDevelopment.psm1'
55

66
# Version number of this module.
7-
ModuleVersion = '2.2.10.134'
7+
ModuleVersion = '2.2.11.138'
88

99
# ID used to uniquely identify this module
1010
GUID = '37dd5fce-e7b5-4d57-ac37-832055ce49d6'
0 Bytes
Binary file not shown.
Binary file not shown.

PSModuleDevelopment/bin/PSModuleDevelopment.xml

Lines changed: 37 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

PSModuleDevelopment/changelog.md

Lines changed: 177 additions & 145 deletions
Large diffs are not rendered by default.

PSModuleDevelopment/functions/templating/Invoke-PSMDTemplate.ps1

Lines changed: 43 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@
8282
#>
8383
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSPossibleIncorrectUsageOfAssignmentOperator", "")]
8484
[Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSReviewUnusedParameter', '')]
85+
[OutputType([PSModuleDevelopment.Template.TemplateResult])]
8586
[Alias('imt')]
8687
[CmdletBinding(SupportsShouldProcess = $true)]
8788
param (
@@ -222,14 +223,11 @@
222223
}
223224
}
224225
#endregion Scripts
225-
$createdTemplateItems=@()
226-
switch ($templateData.Type.ToString()) {
226+
$createdTemplateItems = switch ($templateData.Type.ToString()) {
227227
#region File
228228
"File" {
229229
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
233231
}
234232
if ($Raw -and $templateData.Scripts.Values) {
235233
$templateData.Scripts.Values | Export-Clixml -Path (Join-Path $OutPath "_PSMD_ParameterScripts.xml")
@@ -257,9 +255,7 @@
257255
#endregion Resolve output folder
258256

259257
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
263259
}
264260

265261
#region Write Config File (Raw)
@@ -290,26 +286,26 @@
290286
$optionsTemplate = $optionsTemplate -replace "þþþPLACEHOLDER-$($guid)þþþ", ""
291287
}
292288

293-
$createdTemplateItems += [TemplateResult]@{
294-
Filename = "PSMDTemplate.ps1"
289+
[PSModuleDevelopment.Template.TemplateResult]@{
290+
Name = "PSMDTemplate.ps1"
295291
Path = $newFolder.FullName
296292
FullPath = (Join-Path $newFolder.FullName "PSMDTemplate.ps1")
297293
Content = $optionsTemplate
298294
}
299-
# Set-Content -Path $configFile -Value $optionsTemplate -Encoding ([PSFEncoding]'utf-8').Encoding
300295
}
301296
#endregion Write Config File (Raw)
302297
}
303298
#endregion Project
304299
}
305-
If($GenerateObjects){
300+
If ($GenerateObjects) {
306301
return $createdTemplateItems
307302
}
308303
Write-TemplateResult -TemplateResult $createdTemplateItems -Encoding $Encoding
309304
}
310305

311306
function New-TemplateItem {
312307
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseShouldProcessForStateChangingFunctions", "")]
308+
[OutputType([PSModuleDevelopment.Template.TemplateResult])]
313309
[CmdletBinding()]
314310
param (
315311
[PSModuleDevelopment.Template.TemplateItemBase]
@@ -355,17 +351,17 @@
355351
$text = [PSModuleDevelopment.Utility.UtilityHost]::Replace($text, "$($identifier)!$($param)!$($identifier)", $ParameterScript[$param], $false)
356352
}
357353
}
358-
return [TemplateResult]@{
359-
Filename = $fileName
354+
return [PSModuleDevelopment.Template.TemplateResult]@{
355+
Name = $fileName
360356
Path = $Path
361357
FullPath = $destPath
362358
Content = $text
363359
}
364360
}
365361
else {
366362
$bytes = [System.Convert]::FromBase64String($Item.Value)
367-
return [TemplateResult]@{
368-
Filename = $fileName
363+
return [PSModuleDevelopment.Template.TemplateResult]@{
364+
Name = $fileName
369365
Path = $Path
370366
FullPath = $destPath
371367
Content = $bytes
@@ -387,39 +383,54 @@
387383
}
388384
}
389385
$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+
392396
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
394398
}
395-
return $createdTemplateItems
396399
}
397400
#endregion Folder
398401
}
402+
399403
function Write-TemplateResult {
400404
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseShouldProcessForStateChangingFunctions", "")]
401405
[CmdletBinding()]
402406
param (
403-
[TemplateResult[]]
407+
[PSModuleDevelopment.Template.TemplateResult[]]
404408
$TemplateResult,
405409

406410
[PSFEncoding]
407411
$Encoding
408412
)
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
415426
}
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)
419430
}
420431
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)
423434
}
424435
}
425436
}

PSModuleDevelopment/functions/utility/Restart-PSMDShell.ps1

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
function Restart-PSMDShell
2-
{
3-
<#
1+
function Restart-PSMDShell {
2+
<#
43
.SYNOPSIS
54
A swift way to restart the PowerShell console.
65
@@ -33,13 +32,8 @@
3332
PS C:\> Restart-PSMDShell -Admin -NoExit
3433
3534
Creates a new PowerShell process, run with elevation, while keeping the current console around.
36-
37-
.NOTES
38-
Version 1.0.0.0
39-
Author: Friedrich Weinmann
40-
Created on: August 6th, 2016
4135
#>
42-
[Alias('rss', 'Restart-Shell')]
36+
[Alias('rss', 'Restart-Shell')]
4337
[CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = 'Low')]
4438
Param (
4539
[Switch]
@@ -52,25 +46,36 @@
5246
$NoProfile
5347
)
5448

55-
begin
56-
{
57-
$powershellPath = (Get-Process -id $pid).Path
49+
begin {
50+
$process = Get-Process -Id $pid
51+
$powershellPath = $process.Path
52+
$isWindowsTerminal = $process.Parent.ProcessName -eq 'WindowsTerminal'
5853
}
59-
process
60-
{
61-
if ($PSCmdlet.ShouldProcess("Current shell", "Restart"))
62-
{
63-
if ($NoProfile)
64-
{
65-
if ($Admin) { Start-Process $powershellPath -Verb RunAs -ArgumentList '-NoProfile' }
66-
else { Start-Process $powershellPath -ArgumentList '-NoProfile' }
54+
process {
55+
if (-not $PSCmdlet.ShouldProcess("Current shell", "Restart")) { return }
56+
57+
if ($isWindowsTerminal) {
58+
$psVersionName = 'powershell'
59+
if ($PSVersionTable.PSVersion.Major -gt 5) { $psVersionName = 'pwsh' }
60+
61+
$param = @{
62+
FilePath = 'wt'
63+
ArgumentList = @('-w', 0, 'nt','--title', $psVersionName, $powershellPath)
6764
}
68-
else
69-
{
70-
if ($Admin) { Start-Process $powershellPath -Verb RunAs }
71-
else { Start-Process $powershellPath }
65+
if ($NoProfile) { $param.ArgumentList = @('-w', 0, 'nt', '--title', $psVersionName, $powershellPath, '-NoProfile') }
66+
if ($Admin) { $param.Verb = 'RunAs' }
67+
Start-Process @param
68+
}
69+
else {
70+
$param = @{
71+
FilePath = $powershellPath
7272
}
73-
if (-not $NoExit) { exit }
73+
if ($NoProfile) { $param.ArgumentList = '-NoProfile' }
74+
if ($Admin) { $param.Verb = 'RunAs' }
75+
Start-Process @param
7476
}
7577
}
78+
end {
79+
if (-not $NoExit) { exit }
80+
}
7681
}

PSModuleDevelopment/internal/classes/TemplateResult.ps1

Lines changed: 0 additions & 7 deletions
This file was deleted.

PSModuleDevelopment/internal/scripts/preimport.ps1

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,4 @@ foreach ($file in (Get-ChildItem "$($script:ModuleRoot)\internal\configurations\
1717
}
1818

1919
# Load additional resources needed during import
20-
. Import-ModuleFile -Path "$($script:ModuleRoot)\internal\scripts\initialize.ps1"
21-
22-
# Load all classes
23-
foreach ($file in (Get-ChildItem "$($script:ModuleRoot)\internal\classes\*.ps1" -ErrorAction Ignore))
24-
{
25-
. Import-ModuleFile -Path $file.FullName
26-
}
20+
. Import-ModuleFile -Path "$($script:ModuleRoot)\internal\scripts\initialize.ps1"

PSModuleDevelopment/xml/PSModuleDevelopment.Format.ps1xml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,41 @@
315315
</TableControl>
316316
</View>
317317

318+
<!-- PSModuleDevelopment.Template.TemplateResult -->
319+
<View>
320+
<Name>PSModuleDevelopment.Template.TemplateResult</Name>
321+
<ViewSelectedBy>
322+
<TypeName>PSModuleDevelopment.Template.TemplateResult</TypeName>
323+
</ViewSelectedBy>
324+
<TableControl>
325+
<AutoSize/>
326+
<TableHeaders>
327+
<TableColumnHeader/>
328+
<TableColumnHeader/>
329+
<TableColumnHeader/>
330+
<TableColumnHeader/>
331+
</TableHeaders>
332+
<TableRowEntries>
333+
<TableRowEntry>
334+
<TableColumnItems>
335+
<TableColumnItem>
336+
<PropertyName>IsFolder</PropertyName>
337+
</TableColumnItem>
338+
<TableColumnItem>
339+
<PropertyName>Path</PropertyName>
340+
</TableColumnItem>
341+
<TableColumnItem>
342+
<PropertyName>Name</PropertyName>
343+
</TableColumnItem>
344+
<TableColumnItem>
345+
<PropertyName>IsText</PropertyName>
346+
</TableColumnItem>
347+
</TableColumnItems>
348+
</TableRowEntry>
349+
</TableRowEntries>
350+
</TableControl>
351+
</View>
352+
318353
<!-- PSModuleDevelopment.Utility.LinesOfCode -->
319354
<View>
320355
<Name>PSModuleDevelopment.Utility.LinesOfCode</Name>

0 commit comments

Comments
 (0)