WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

Commit 9fa2c3b

Browse files
committed
Created PowerShell module
1 parent 20fb7e7 commit 9fa2c3b

14 files changed

+1665
-1
lines changed

.github/workflows/deploy-site.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
runs-on: ubuntu-latest
2525
defaults:
2626
run:
27-
working-directory: ./src/
27+
working-directory: ./src/website
2828
steps:
2929
- name: Checkout
3030
uses: actions/checkout@v3
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
param
2+
(
3+
# Path to Module Manifest
4+
[Parameter(Mandatory = $false)]
5+
[string] $ModuleManifestPath = ".\release\*\*.*.*",
6+
#
7+
[Parameter(Mandatory = $false)]
8+
[string] $OutputModulePath
9+
)
10+
11+
## Initialize
12+
Import-Module "$PSScriptRoot\CommonFunctions.psm1" -Force -WarningAction SilentlyContinue -ErrorAction Stop
13+
14+
[System.IO.FileInfo] $ModuleManifestFileInfo = Get-PathInfo $ModuleManifestPath -DefaultFilename "*.psd1" -ErrorAction Stop
15+
16+
## Read Module Manifest
17+
$ModuleManifest = Import-PowerShellDataFile $ModuleManifestFileInfo.FullName
18+
19+
if ($OutputModulePath) {
20+
[System.IO.FileInfo] $OutputModuleFileInfo = Get-PathInfo $OutputModulePath -InputPathType File -DefaultFilename "$($ModuleManifestFileInfo.BaseName).psm1" -ErrorAction SilentlyContinue
21+
}
22+
else {
23+
[System.IO.FileInfo] $OutputModuleFileInfo = Get-PathInfo $ModuleManifest['RootModule'] -InputPathType File -DefaultDirectory $ModuleManifestFileInfo.DirectoryName -ErrorAction SilentlyContinue
24+
}
25+
26+
if ($OutputModuleFileInfo.Extension -eq ".psm1") {
27+
## Add Requires Statements
28+
$RequiresStatements = ""
29+
if ($ModuleManifest['PowerShellVersion']) { $RequiresStatements += "#Requires -Version {0}`r`n" -f $ModuleManifest['PowerShellVersion'] }
30+
if ($ModuleManifest['CompatiblePSEditions']) { $RequiresStatements += "#Requires -PSEdition {0}`r`n" -f ($ModuleManifest['CompatiblePSEditions'] -join ',') }
31+
foreach ($RequiredAssembly in $ModuleManifest['RequiredAssemblies']) {
32+
$RequiresStatements += "#Requires -Assembly $_`r`n"
33+
}
34+
foreach ($RequiredModule in $ModuleManifest['RequiredModules']) {
35+
$RequiresStatements += ConvertTo-PsString $ModuleManifest['RequiredModules'] -Compact -RemoveTypes ([hashtable], [string]) | ForEach-Object { "#Requires -Module $_`r`n" }
36+
}
37+
38+
## Build Module Comment Header
39+
[string] $CommentHeader = "<#`r`n"
40+
$CommentHeader += ".SYNOPSIS`r`n {0}`r`n" -f $ModuleManifestFileInfo.BaseName
41+
42+
if ($ModuleManifest['Description']) {
43+
$CommentHeader += ".DESCRIPTION`r`n {0}`r`n" -f $ModuleManifest['Description']
44+
}
45+
46+
[string]$ModuleVersion = if ($ModuleManifest.PrivateData.PSData['Prerelease']) { '{0}-{1}' -f $ModuleManifest['ModuleVersion'], $ModuleManifest.PrivateData.PSData['Prerelease'] } else { $ModuleManifest['ModuleVersion'] }
47+
$CommentHeader += ".NOTES`r`n"
48+
$CommentHeader += " ModuleVersion: {0}`r`n" -f $ModuleVersion
49+
if ($ModuleManifest['GUID']) { $CommentHeader += " GUID: {0}`r`n" -f $ModuleManifest['GUID'] }
50+
if ($ModuleManifest['Author']) { $CommentHeader += " Author: {0}`r`n" -f $ModuleManifest['Author'] }
51+
if ($ModuleManifest['CompanyName']) { $CommentHeader += " CompanyName: {0}`r`n" -f $ModuleManifest['CompanyName'] }
52+
if ($ModuleManifest['Copyright']) { $CommentHeader += " Copyright: {0}`r`n" -f $ModuleManifest['Copyright'] }
53+
if ($ModuleManifest['FunctionsToExport']) {
54+
## ToDo: Account for modules with functions and/or cmdlets.
55+
$CommentHeader += ".FUNCTIONALITY`r`n {0}`r`n" -f ($ModuleManifest['FunctionsToExport'] -join ', ')
56+
}
57+
if ($ModuleManifest.PrivateData.PSData['ProjectUri']) {
58+
$CommentHeader += ".LINK`r`n {0}`r`n" -f $ModuleManifest.PrivateData.PSData['ProjectUri']
59+
}
60+
$CommentHeader += "#>"
61+
62+
## Add Comment Header to Script Module
63+
if ($OutputModuleFileInfo.Exists) {
64+
$RootModuleContent = (Get-Content $OutputModuleFileInfo.FullName -Raw)
65+
}
66+
else {
67+
$RootModuleContent = $null
68+
}
69+
70+
$RequiresStatements, $CommentHeader, $RootModuleContent | Set-Content $OutputModuleFileInfo.FullName -Encoding utf8BOM
71+
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
param
2+
(
3+
# Directory used to base all relative paths
4+
[Parameter(Mandatory = $false)]
5+
[string] $BaseDirectory = ".\",
6+
#
7+
[Parameter(Mandatory = $false)]
8+
[string] $OutputDirectory = ".\build\release\",
9+
#
10+
[Parameter(Mandatory = $false)]
11+
[string] $SourceDirectory = ".\src\powershell\",
12+
#
13+
[Parameter(Mandatory = $false)]
14+
[string] $ModuleManifestPath,
15+
#
16+
[Parameter(Mandatory = $false)]
17+
[string] $PackagesConfigPath = ".\packages.config",
18+
#
19+
[Parameter(Mandatory = $false)]
20+
[string] $PackagesDirectory = ".\build\packages",
21+
#
22+
[Parameter(Mandatory = $false)]
23+
[string] $LicensePath = ".\LICENSE",
24+
#
25+
[Parameter(Mandatory = $false)]
26+
[switch] $SkipMergingNestedModuleScripts,
27+
28+
# If true, builds the module for production, otherwise builds a preview module that is installed with -AllowPrerelease
29+
[Parameter()]
30+
[switch]$ProductionBuild
31+
)
32+
33+
## Initialize
34+
Import-Module "$PSScriptRoot\CommonFunctions.psm1" -Force -WarningAction SilentlyContinue -ErrorAction Stop
35+
36+
## Increment the build number
37+
&$PSScriptRoot\Set-Version.ps1 -preview:(!$ProductionBuild)
38+
39+
[System.IO.DirectoryInfo] $BaseDirectoryInfo = Get-PathInfo $BaseDirectory -InputPathType Directory -ErrorAction Stop
40+
[System.IO.DirectoryInfo] $OutputDirectoryInfo = Get-PathInfo $OutputDirectory -InputPathType Directory -DefaultDirectory $BaseDirectoryInfo.FullName -ErrorAction SilentlyContinue
41+
[System.IO.DirectoryInfo] $SourceDirectoryInfo = Get-PathInfo $SourceDirectory -InputPathType Directory -DefaultDirectory $BaseDirectoryInfo.FullName -ErrorAction Stop
42+
[System.IO.FileInfo] $ModuleManifestFileInfo = Get-PathInfo $ModuleManifestPath -DefaultDirectory $SourceDirectoryInfo.FullName -DefaultFilename "*.psd1" -ErrorAction Stop
43+
[System.IO.FileInfo] $PackagesConfigFileInfo = Get-PathInfo $PackagesConfigPath -DefaultDirectory $BaseDirectoryInfo.FullName -DefaultFilename "packages.config" -ErrorAction SilentlyContinue
44+
[System.IO.DirectoryInfo] $PackagesDirectoryInfo = Get-PathInfo $PackagesDirectory -InputPathType Directory -DefaultDirectory $BaseDirectoryInfo.FullName -ErrorAction SilentlyContinue
45+
[System.IO.FileInfo] $LicenseFileInfo = Get-PathInfo $LicensePath -DefaultDirectory $BaseDirectoryInfo.FullName -DefaultFilename "LICENSE" -ErrorAction SilentlyContinue
46+
47+
## Read Module Manifest
48+
$ModuleManifest = Import-PowerShellDataFile $ModuleManifestFileInfo.FullName
49+
[System.IO.DirectoryInfo] $ModuleOutputDirectoryInfo = Join-Path $OutputDirectoryInfo.FullName (Join-Path $ModuleManifestFileInfo.BaseName $ModuleManifest['ModuleVersion'])
50+
[System.IO.FileInfo] $OutputModuleManifestFileInfo = Join-Path $ModuleOutputDirectoryInfo.FullName $ModuleManifestFileInfo.Name
51+
52+
## Copy Source Module Code to Module Output Directory
53+
Assert-DirectoryExists $ModuleOutputDirectoryInfo -ErrorAction Stop | Out-Null
54+
Copy-Item ("{0}\*" -f $SourceDirectoryInfo.FullName) -Destination $ModuleOutputDirectoryInfo.FullName -Recurse -Force
55+
56+
if (!$SkipMergingNestedModuleScripts) {
57+
[System.IO.FileInfo] $OutputRootModuleFileInfo = (Join-Path $ModuleOutputDirectoryInfo.FullName $ModuleManifest['RootModule'])
58+
&$PSScriptRoot\Merge-PSModuleNestedModuleScripts.ps1 -ModuleManifestPath $OutputModuleManifestFileInfo.FullName -OutputModulePath $OutputRootModuleFileInfo.FullName -MergeWithRootModule -RemoveNestedModuleScriptFiles
59+
}
60+
if ($LicenseFileInfo.Exists) {
61+
Copy-Item $LicenseFileInfo.FullName -Destination (Join-Path $ModuleOutputDirectoryInfo.FullName License.txt) -Force
62+
}
63+
64+
if ($PackagesConfigFileInfo.Exists) {
65+
## NuGet Restore
66+
&$PSScriptRoot\Restore-NugetPackages.ps1 -PackagesConfigPath $PackagesConfigFileInfo.FullName -OutputDirectory $PackagesDirectoryInfo.FullName
67+
68+
## Read Packages Configuration
69+
$xmlPackagesConfig = New-Object xml
70+
$xmlPackagesConfig.Load($PackagesConfigFileInfo.FullName)
71+
72+
## Copy Packages to Module Output Directory
73+
foreach ($package in $xmlPackagesConfig.packages.package) {
74+
[string[]] $targetFrameworks = $package.targetFramework
75+
if (!$targetFrameworks) { [string[]] $targetFrameworks = "net45", "netcoreapp2.1" }
76+
foreach ($targetFramework in $targetFrameworks) {
77+
[System.IO.DirectoryInfo] $PackageDirectory = Join-Path $PackagesDirectoryInfo.FullName ("{0}.{1}\lib\{2}" -f $package.id, $package.version, $targetFramework)
78+
[System.IO.DirectoryInfo] $PackageOutputDirectory = "{0}\{1}.{2}\{3}" -f $ModuleOutputDirectoryInfo.FullName, $package.id, $package.version, $targetFramework
79+
$PackageOutputDirectory
80+
Assert-DirectoryExists $PackageOutputDirectory -ErrorAction Stop | Out-Null
81+
Copy-Item ("{0}\*" -f $PackageDirectory) -Destination $PackageOutputDirectory.FullName -Recurse -Force
82+
}
83+
}
84+
}
85+
86+
## Get Module Output FileList
87+
#$ModuleFileListFileInfo = Get-ChildItem $ModuleOutputDirectoryInfo.FullName -Recurse -File
88+
#$ModuleManifestOutputFileInfo = $ModuleFileListFileInfo | Where-Object Name -EQ $ModuleManifestFileInfo.Name
89+
90+
## Update Module Manifest in Module Output Directory
91+
&$PSScriptRoot\Update-PSModuleManifest.ps1 -ModuleManifestPath $OutputModuleManifestFileInfo.FullName
92+
if (!$SkipMergingNestedModuleScripts) {
93+
&$PSScriptRoot\Add-PSModuleHeader.ps1 -ModuleManifestPath $OutputModuleManifestFileInfo.FullName
94+
}
95+
96+
Write-Host "Module built successfully: $($OutputModuleManifestFileInfo.FullName)" -ForegroundColor Green
97+
## Sign Module
98+
#&$PSScriptRoot\Sign-PSModule.ps1 -ModuleManifestPath $OutputModuleManifestFileInfo.FullName | Format-Table Path, Status, StatusMessage

0 commit comments

Comments
 (0)