Modules


PowerShell에서 Module에 관한 명령어를 알아보기 위해서 Get-Help *module*을 입력합니다.

PS C:\Users\k3y6reak> Get-Help *module*

Name                              Category  Module                    Synopsis
----                              --------  ------                    --------
ImportSystemModules               Function                            ...
Export-ModuleMember               Cmdlet    Microsoft.PowerShell.Core Specifies the module members that are exported.
Get-Module                        Cmdlet    Microsoft.PowerShell.Core Gets the modules that have been imported or that can be imported into the current session.
Import-Module                     Cmdlet    Microsoft.PowerShell.Core Adds modules to the current session.
New-Module                        Cmdlet    Microsoft.PowerShell.Core Creates a new dynamic module that exists only in memory.
New-ModuleManifest                Cmdlet    Microsoft.PowerShell.Core Creates a new module manifest.
Remove-Module                     Cmdlet    Microsoft.PowerShell.Core Removes modules from the current session.
Test-ModuleManifest               Cmdlet    Microsoft.PowerShell.Core Verifies that a module manifest file accurately describes the contents of a module.
InModuleScope                     Function  Pester                    ...
Uninstall-Module                  Function  PowerShellGet             ...
Install-Module                    Function  PowerShellGet             ...
Publish-Module                    Function  PowerShellGet             ...
Update-ModuleManifest             Function  PowerShellGet             ...
Save-Module                       Function  PowerShellGet             ...
Update-Module                     Function  PowerShellGet             ...
Get-InstalledModule               Function  PowerShellGet             ...
Find-Module                       Function  PowerShellGet             ...
about_Modules                     HelpFile                            Explains how to install, import, and use Windows PowerShell modules.

주로 사용하게 될 명령어는 Import-moduleRemove-module 입니다. 모듈을 사용하고자 할 때는 Import-module을 사용하고 모듈을 해제 하고자할 때는 Remove-module을 사용합니다.

PowerShell에서 모듈을 사용하기 위해서 $env:PSModulePath를 입력합니다.

PS C:\Users\k3y6reak> $env:PSModulePath
C:\Users\k3y6reak\Documents\WindowsPowerShell\Modules;C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules

위 결과를 보면 모듈에 대한 경로가 나타나게 된다. 여기서 C:\Users\k3y6reak\Documents\WindowsPowerShell\Modules로 이동하면 WindowsPowerShell 폴더가 없다는 에러 메시지가 나타난다.

PS C:\Users\k3y6reak> cd C:\Users\k3y6reak\Documents\WindowsPowerShell\Modules
cd : 'C:\Users\k3y6reak\Documents\WindowsPowerShell\Modules' 경로는 존재하지 않으므로 찾을  없습니다.
위치 :1 문자:1
+ cd C:\Users\k3y6reak\Documents\WindowsPowerShell\Modules
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Users\k3y6re...erShell\Modules:String) [Set-Location], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetLocationCommand

PS C:\Users\k3y6reak> cd C:\Users\k3y6reak\Documents\
PS C:\Users\k3y6reak\Documents> mkdir WindowsPowerShell


    디렉터리: C:\Users\k3y6reak\Documents


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----   2017. 8. 24.  오전 11:23                WindowsPowerShell


PS C:\Users\k3y6reak\Documents> cd WindowsPowerShell
PS C:\Users\k3y6reak\Documents\WindowsPowerShell> mkdir Modules


    디렉터리: C:\Users\k3y6reak\Documents\WindowsPowerShell


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----   2017. 8. 24.  오전 11:24                Modules

위와 같이 해당 디렉토리를 생성하고 Modules 디렉토리에서 모듈을 저장하면 된다.

그렇다면 PowerShell에서 사용하는 모듈을 한번 만들어 보겠습니다.

PowerShell script는 .ps1 확장자를 갖고있고, PowerShell module은 .psm1 확장자를 갖고 있습니다.

아래 DelFile.psm1 코드를 작성합니다.

function DelFile
{
    [CmdletBinding( SupportsShouldProcess = $true )] 
    param ([Parameter()]$FilePath)

    Write-Verbose "Delete $FilePath"
    
    if($PSCmdlet.ShouldProcess("$FilePath", "Deleting File permanently"))
    {
        Remove-Item $FilePath
    }

}
PS C:\Users\k3y6reak\Documents\WindowsPowerShell\Modules> cp C:\Users\k3y6reak\Desktop\DelFile.psm1 .
PS C:\Users\k3y6reak\Documents\WindowsPowerShell\Modules> ls


    디렉터리: C:\Users\k3y6reak\Documents\WindowsPowerShell\Modules


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----   2017. 8. 24.   오후 1:34            284 DelFile.psm1

Modules 디렉토리에 DelFile.psm1을 복사합니다.

PS C:\Users\k3y6reak\Documents\WindowsPowerShell\Modules> Import-Module .\DelFile.psm1
PS C:\Users\k3y6reak\Documents\WindowsPowerShell\Modules> Get-Command -Module DelFile

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Function        DelFile                                            0.0        DelFile


PS C:\Users\k3y6reak\Documents\WindowsPowerShell\Modules> Get-Module

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     0.0        DelFile                             DelFile
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.2        PSReadline                          {Get-PSReadlineKeyHandler, Get-PSReadlineOption, Remove-PSReadlineKeyHandler, Set-PSReadlineKeyHandler...}

Import-Module을 이용하여 모듈을 추가할 수 있고 Get-Module을 이용하여 사용되는 모듈을 확인할 수 있습니다.

해당 디렉토리에 test.txt파일을 생성한 후 추가한 DelFile 모듈을 사용해 보겠습니다.

PS C:\Users\k3y6reak\Documents\WindowsPowerShell\Modules> ls


    디렉터리: C:\Users\k3y6reak\Documents\WindowsPowerShell\Modules


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----   2017. 8. 24.   오후 1:34            284 DelFile.psm1
-a----   2017. 8. 24.   오후 1:45              0 test.txt


PS C:\Users\k3y6reak\Documents\WindowsPowerShell\Modules> DelFile C:\Users\k3y6reak\Documents\WindowsPowerShell\Modules\test.txt
PS C:\Users\k3y6reak\Documents\WindowsPowerShell\Modules> ls


    디렉터리: C:\Users\k3y6reak\Documents\WindowsPowerShell\Modules


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----   2017. 8. 24.   오후 1:34            284 DelFile.psm1


PS C:\Users\k3y6reak\Documents\WindowsPowerShell\Modules> Remove-Module DelFile
PS C:\Users\k3y6reak\Documents\WindowsPowerShell\Modules> 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     1.2        PSReadline                          {Get-PSReadlineKeyHandler, Get-PSReadlineOption, Remove-PSReadlineKeyHandler, Set-PSReadlineKeyHandler...}

DelFile 파일경로를 이용하여 test.txt가 삭제된 것을 확인할 수 있으며, 해당 모듈을 사용하지 않을 때는 Remove-Module 모듈명을 이용해 제거할 수 있습니다.




© 2017. by k3y6reak

Powered by k3y6reak