Module
YouTube
Click here for a video explanation.
About PowerShellGet
You can use PowerShellGet cmdlets (Find-Module, Update-Module, etc.). You can import modules from PowerShell Gallery.
How to update PowerShellGet
# Example
Install-Module PowerShellGet -Force -Scope CurrentUser
About module
How to create and use modules in the local environment.
Step1 Check $env:PSModulePath
PS> $env:PSModulePath
C:\Users\USERNAME\Documents\WindowsPowerShell\Modules; C:\WINDOWS\system32\WindowsPowerSh
ell\v1.0\Modules\; C:\Program Files\WindowsPowerShell\Modules; C:\WINDOWS\system32\Windows
PowerShell\v1.0\Modules
# Formatted for easy viewing
PS> $env:PSModulePath -split ";"
C:\Users\USERNAME\Documents\WindowsPowerShell\Modules
C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\
C:\Program Files\WindowsPowerShell\Modules
C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
Relationship between the location of the module and the target user
User | Path |
---|---|
For CurrentUser | C:\Users\USERNAME\Documents\WindowsPowerShell\Modules |
For AllUser | C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules |
Step2 Create “folder” and “psm1 file with the same name as the folder”.
Number.psm1
function Add-Number {
param (
$param1,
$param2
)
return $param1 + $param2
}
function Sub-Number {
param (
$param1,
$param2
)
return $param1 - $param2
}
Step3 Automatic import and execution of modules
Modules will be imported automatically when using cmdlets or functions.
PS> Get-Module
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 3.1.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Con...
Manifest 3.1.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type,...
Script 2.0.0 PSReadline {Get-PSReadLineKeyHand...
PS> Add-Number 1 1
2
PS> Sub-Number 1 1
0
PS> Get-Module
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 3.1.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Con...
Manifest 3.1.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type,...
Script 0.0 Number {Add-Number, Sub-Number}
Script 2.0.0 PSReadline {Get-PSReadLineKeyHand...
Control Export with Export-ModuleMember
function Add-Number {
param (
$param1,
$param2
)
return $param1 + $param2
}
function Sub-Number {
param (
$param1,
$param2
)
return $param1 - $param2
}
Export-ModuleMember -Function Add-Number # Changed Line
- Add-Number: Success
- Sub-Number: Error
PS> Remove-Module Number
PS> Get-Module
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 3.1.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Content...}
Manifest 3.1.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type, Clear-Variable, Compare-Object...}
Script 2.0.0 PSReadline {Get-PSReadLineKeyHandler, Get-PSReadLineOption, Remove-PSReadLi...
PS> Add-Number 1 1
2
PS> Sub-Number 1 1
Sub-Number : 用語 'Sub-Number' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識され
ません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してくださ
い。
発生場所 行:1 文字:1
+ Sub-Number 1 1
+ ~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Sub-Number:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
PS> Get-Module
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 3.1.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Content...}
Manifest 3.1.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type, Clear-Variable, Compare-Object...}
Script 0.0 Number Add-Number
Script 2.0.0 PSReadline {Get-PSReadLineKeyHandler, Get-PSReadLineOption, Remove-PSReadLi...
Import-Module (specify the file path , specify the module name)
Modules can be imported expressly.
I will try two different examples here.
- Import-Module to specify the module name
- Import-Module to specify the file path
Preparation
Prepare the two modules.
- The Number module placed in
$env:PSModulePath
above - Multi module of Desktop
Desktop\Multi\Multi.psm1
function Multi-Number {
param (
$param1,
$param2
)
return $param1 * $param2
}
Example
PS C:\Users\USERNAME\Desktop> Get-Module
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 3.1.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Conte...
Manifest 3.1.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type, C...
Script 2.0.0 PSReadline {Get-PSReadLineKeyHandle...
PS C:\Users\USERNAME\Desktop> Import-Module Number
PS C:\Users\USERNAME\Desktop> Import-Module .\Multi\Multi.psm1
警告: モジュール 'Multi'
からインポートされたコマンドの中には、名前に承認されていない動詞を含むものがあり、こ
のようなコマンドは検出される可能性が低くなる場合があります。承認されていない動詞を含
むコマンドを見つけるには、Verbose パラメーターを使用してもう一度 Import-Module
コマンドを実行してください。承認されている動詞の一覧を表示するには、「Get-Verb」と入
力してください。
PS C:\Users\USERNAME\Desktop> Get-Module
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 3.1.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Conte...
Manifest 3.1.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type, C...
Script 0.0 Multi Multi-Number
Script 0.0 Number Add-Number
Script 2.0.0 PSReadline {Get-PSReadLineKeyHandle...
PS C:\Users\USERNAME\Desktop> Add-Number 2 3
5
PS C:\Users\USERNAME\Desktop> Multi-Number 2 3
6
Use Module Manifest.
Create a new ModuleManifest.
PS > cd ($env:PSModulePath -split ";" | select -First 1)
PS > New-ModuleManifest .\Number\Number.psd1
Edit ModuleManifest.
In Number.psd1, rewrite the RootModule
and FunctionsToExport
items.
RootModule = 'Number.psm1'
# You can also specify them with NestedModules.
FunctionsToExport = '*'
# Make all functions public.
The result will be the following.
Number.psd1
#
# モジュール 'Number' のモジュール マニフェスト
#
# 生成者: miaji
#
# 生成日: 2020/12/24
#
@{
# このマニフェストに関連付けられているスクリプト モジュール ファイルまたはバイナリ モジュール ファイル。
RootModule = 'Number.psm1'
# このモジュールのバージョン番号です。
ModuleVersion = '1.0'
# サポートされている PSEditions
# CompatiblePSEditions = @()
# このモジュールを一意に識別するために使用される ID
GUID = '98682b42-c3c6-4cee-868f-cd48eb8794e4'
# このモジュールの作成者
Author = 'miaji'
# このモジュールの会社またはベンダー
CompanyName = '不明'
# このモジュールの著作権情報
Copyright = '(c) 2020 miaji. All rights reserved.'
# このモジュールの機能の説明
# Description = ''
# このモジュールに必要な Windows PowerShell エンジンの最小バージョン
# PowerShellVersion = ''
# このモジュールに必要な Windows PowerShell ホストの名前
# PowerShellHostName = ''
# このモジュールに必要な Windows PowerShell ホストの最小バージョン
# PowerShellHostVersion = ''
# このモジュールに必要な Microsoft .NET Framework の最小バージョン。 この前提条件は、PowerShell Desktop エディションについてのみ有効です。
# DotNetFrameworkVersion = ''
# このモジュールに必要な共通言語ランタイム (CLR) の最小バージョン。 この前提条件は、PowerShell Desktop エディションについてのみ有効です。
# CLRVersion = ''
# このモジュールに必要なプロセッサ アーキテクチャ (なし、X86、Amd64)
# ProcessorArchitecture = ''
# このモジュールをインポートする前にグローバル環境にインポートされている必要があるモジュール
# RequiredModules = @()
# このモジュールをインポートする前に読み込まれている必要があるアセンブリ
# RequiredAssemblies = @()
# このモジュールをインポートする前に呼び出し元の環境で実行されるスクリプト ファイル (.ps1)。
# ScriptsToProcess = @()
# このモジュールをインポートするときに読み込まれる型ファイル (.ps1xml)
# TypesToProcess = @()
# このモジュールをインポートするときに読み込まれる書式ファイル (.ps1xml)
# FormatsToProcess = @()
# RootModule/ModuleToProcess に指定されているモジュールの入れ子になったモジュールとしてインポートするモジュール
# NestedModules = @()
# このモジュールからエクスポートする関数です。最適なパフォーマンスを得るには、ワイルドカードを使用せず、エクスポートする関数がない場合は、エントリを削除しないで空の配列を使用してください。
FunctionsToExport = '*'
# このモジュールからエクスポートするコマンドレットです。最適なパフォーマンスを得るには、ワイルドカードを使用せず、エクスポートするコマンドレットがない場合は、エントリを削除しないで空の配列を使用してください。
CmdletsToExport = @()
# このモジュールからエクスポートする変数
VariablesToExport = '*'
# このモジュールからエクスポートするエイリアスです。最適なパフォーマンスを得るには、ワイルドカードを使用せず、エクスポートするエイリアスがない場合は、エントリを削除しないで空の配列を使用してください。
AliasesToExport = @()
# このモジュールからエクスポートする DSC リソース
# DscResourcesToExport = @()
# このモジュールに同梱されているすべてのモジュールのリスト
# ModuleList = @()
# このモジュールに同梱されているすべてのファイルのリスト
# FileList = @()
# RootModule/ModuleToProcess に指定されているモジュールに渡すプライベート データ。これには、PowerShell で使用される追加のモジュール メタデータを含む PSData ハッシュテーブルが含まれる場合もあります。
PrivateData = @{
PSData = @{
# このモジュールに適用されているタグ。オンライン ギャラリーでモジュールを検出する際に役立ちます。
# Tags = @()
# このモジュールのライセンスの URL。
# LicenseUri = ''
# このプロジェクトのメイン Web サイトの URL。
# ProjectUri = ''
# このモジュールを表すアイコンの URL。
# IconUri = ''
# このモジュールの ReleaseNotes
# ReleaseNotes = ''
} # PSData ハッシュテーブル終了
} # PrivateData ハッシュテーブル終了
# このモジュールの HelpInfo URI
# HelpInfoURI = ''
# このモジュールからエクスポートされたコマンドの既定のプレフィックス。既定のプレフィックスをオーバーライドする場合は、Import-Module -Prefix を使用します。
# DefaultCommandPrefix = ''
}
Number.psm1
function Add-Number {
param (
$param1,
$param2
)
return $param1 + $param2
}
function Sub-Number {
param (
$param1,
$param2
)
return $param1 - $param2
}
Execution example
- The Version is set to the one specified in the psd1 file.
- Both Add-Number and Sub-Number have been exported.
PS C:\Users\miajimyu> Get-Module
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 3.1.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type, Clear-Variable, Compare...
Script 2.0.0 PSReadline {Get-PSReadLineKeyHandler, Get-PSReadLineOptio...
PS C:\Users\miajimyu> Import-Module Number
警告: モジュール 'Number'
からインポートされたコマンドの中には、名前に承認されていない動詞を含むものがあり、このようなコマンドは検出
される可能性が低くなる場合があります。承認されていない動詞を含むコマンドを見つけるには、Verbose
パラメーターを使用してもう一度 Import-Module
コマンドを実行してください。承認されている動詞の一覧を表示するには、「Get-Verb」と入力してください。
PS C:\Users\miajimyu> Get-Module
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 3.1.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type, Clear-Variable, Compare...
Script 1.0 Number {Add-Number, Sub-Number}
Script 2.0.0 PSReadline {Get-PSReadLineKeyHandler, Get-PSReadLineOptio...
Note: Exported conditions
The Function needs to be exported in both the psd1 file and the psm1 file.
If export is restricted in either the psd1 or psm1 file, it will not be exported.
function Add-Number {
param (
$param1,
$param2
)
return $param1 + $param2
}
function Sub-Number {
param (
$param1,
$param2
)
return $param1 - $param2
}
Export-ModuleMember -Function Add-Number # Changed Line
- Add-Number is exported.
- Sub-Number is not exported.
PS C:\Users\miajimyu> Import-Module Number
PS C:\Users\miajimyu> Get-Module
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 3.1.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type, Clear-Variable, Compare...
Script 1.0 Number Add-Number
Script 2.0.0 PSReadline {Get-PSReadLineKeyHandler, Get-PSReadLineOptio...
#RequiredとModule
If you specify a module with #Requires
, it will be imported when the script is executed.
You can specify the ModuleName
, ModuleVersion
, etc.
Preparation
- Number module in place
- Prepare the following files
script.ps1
#Requires -Modules @{ ModuleName = "Number"; ModuleVersion = "1.0"}
Get-Module
Execution example
There is a Number module in the output of Get-Module in script.ps1.
PS C:\Users\miajimyu\Desktop> Get-Module
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 3.1.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Content...}
Manifest 3.1.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type, Clear-Variable, Compare-Object...}
Script 2.0.0 PSReadline {Get-PSReadLineKeyHandler, Get-PSReadLineOption, Remove-PSReadLi...
PS C:\Users\miajimyu\Desktop> .\script.ps1
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 3.1.0.0 Microsoft.PowerShell.Management {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Content...}
Manifest 3.1.0.0 Microsoft.PowerShell.Utility {Add-Member, Add-Type, Clear-Variable, Compare-Object...}
Script 1.0 Number Add-Number
Script 2.0.0 PSReadline {Get-PSReadLineKeyHandler, Get-PSReadLineOption, Remove-PSReadLi...