[- Disclaimer -]
아래 내용은 정보보안 공부 목적으로 작성된 것이나, 이를 토대로 허가되지 않은 대상에 실습을 진행할 경우 해킹 시도로 간주하여 법적 처벌을 받을 수 있음을 알려 드립니다.
Module 구성
✦ Code, 도움말, Assembly, Mainfest, Directory 등
✦ 간단하게는, Script를 .psm1로 생성
function Delete-onefile {
[CmdletBinding(SupportsShouldProcess = $true)]
param(
[Parameter(Mandatory = $true)] $a,
$FilePath
)
$out = $a + $b
Write-Verbose "Deleting $FilePath"
if($PSCmdlet.ShouldProcess("$File Path", "Deleting File!")) {
Remove-Item $FilePath
}
Write-Host $FilePath "was successfully deleted."
}
function ShowFile {
Write-Output "Nothing to show"
}
Plain Text
복사
PS C:\Users\aapsemiordoenus\Desktop> import-module .\DeleteAll.psm1
경고: 'DeleteAll' 모듈에서 가져온 일부 명령 이름에 검색 가능성을 낮출 수 있는 승인되지 않은 동사가
포함되어 있습니다. 승인되지 않은 동사가 포함된 명령을 찾으려면 Verbose 매개 변수와 함께
Import-Module 명령을 다시 실행하십시오. 승인된 동사 목록을 보려면 Get-Verb를 입력하십시오.
PS C:\Users\aapsemiordoenus\Desktop>
Plain Text
복사
PS C:\Users\aapsemiordoenus\Desktop> Get-Command -module DeleteAll
CommandType Name Version Source
----------- ---- ------- ------
Function Delete-onefile 0.0 DeleteAll
Function ShowFile 0.0 DeleteAll
PS C:\Users\aapsemiordoenus\Desktop>
Plain Text
복사
✦ Export 함수 설정
function Delete-onefile {
[CmdletBinding(SupportsShouldProcess = $true)]
param(
[Parameter(Mandatory = $true)] $a,
$FilePath
)
$out = $a + $b
Write-Verbose "Deleting $FilePath"
if($PSCmdlet.ShouldProcess("$File Path", "Deleting File!")) {
Remove-Item $FilePath
}
Write-Host $FilePath "was successfully deleted."
}
function ShowFile {
Write-Output "Nothing to show"
}
Export-ModuleMember -Function *-*
Plain Text
복사
PS C:\Users\aapsemiordoenus\Desktop> Import-Module .\DeleteAll.psm1
WARNING: The names of some imported commands from the module 'DeleteAll' include unapproved verbs that might make them less discoverable. To find the commands with unapproved verbs, run the Import-Module command again with the Verbose parameter. For a list of approved verbs, type Get-Verb.
PS C:\Users\aapsemiordoenus\Desktop> Get-Command -module DeleteAll
CommandType Name
----------- ----
Function Delete-onefile
Plain Text
복사
PowerShell 영구 Module 추가
✦ PowerShell의 Module 폴더에 저장
Mainfest 생성
PS C:\Users\aapsemiordoenus\Desktop> New-ModuleManifest
cmdlet New-ModuleManifest(명령 파이프라인 위치 1)
다음 매개 변수에 대한 값을 제공하십시오.
Path: C:\Users\aapsemiordoenus\Desktop\DeleteAll.psd1
PS C:\Users\aapsemiordoenus\Desktop> C:\Users\aapsemiordoenus\Desktop\DeleteAll.psm1
PS C:\Users\aapsemiordoenus\Desktop>
Plain Text
복사
✦ Mainfest
#
# 'DeleteAll' 모듈의 모듈 매니페스트
#
# 생성자: aapsemiordoenus
#
# 생성 날짜: 2021-06-27
#
@{
# 이 매니페스트와 연결된 스크립트 모듈 또는 이진 모듈 파일입니다.
# RootModule = ''
# 이 모듈의 버전 번호입니다.
ModuleVersion = '1.0'
# 지원되는 PSEditions
# CompatiblePSEditions = @()
# 이 모듈을 고유하게 식별하는 데 사용되는 ID
GUID = '8ee06b3b-1cc6-41d5-be31-cb1d71cfce8b'
# 이 모듈의 작성자
Author = 'aapsemiordoenus'
# 이 모듈의 제조업체 또는 공급업체
CompanyName = '알 수 없음'
# 이 모듈의 저작권 정보
Copyright = '(c) 2021 aapsemiordoenus. All rights reserved.'
# 이 모듈에서 제공하는 기능에 대한 설명
# Description = ''
# 이 모듈에 필요한 Windows PowerShell 엔진의 최소 버전
# PowerShellVersion = ''
# 이 모듈에 필요한 Windows PowerShell 호스트 이름
# PowerShellHostName = ''
# 이 모듈에 필요한 Windows PowerShell 호스트의 최소 버전
# PowerShellHostVersion = ''
# 이 모듈에 필요한 Microsoft .NET Framework의 최소 버전입니다. 이 필수 조건은 PowerShell 데스크톱 버전에만 유효합니다.
# DotNetFrameworkVersion = ''
# 이 모듈에 필요한 CLR(공용 언어 런타임)의 최소 버전입니다. 이 필수 조건은 PowerShell 데스크톱 버전에만 유효합니다.
# CLRVersion = ''
# 이 모듈에 필요한 프로세서 아키텍처(None, X86, Amd64)
# ProcessorArchitecture = ''
# 이 모듈보다 먼저 글로벌 환경으로 가져와야 하는 모듈
# RequiredModules = @()
# 이 모듈을 가져오기 전에 로드해야 하는 어셈블리
# RequiredAssemblies = @()
# 이 모듈을 가져오기 전에 호출자의 환경에서 실행되는 스크립트 파일(.ps1)입니다.
# ScriptsToProcess = @()
# 이 모듈을 가져올 때 로드되는 유형 파일(.ps1xml)
# TypesToProcess = @()
# 이 모듈을 가져올 때 로드되는 형식 파일(.ps1xml)
# FormatsToProcess = @()
# RootModule/ModuleToProcess에 지정된 모듈의 중첩 모듈로 가져올 모듈
# NestedModules = @()
# 이 모듈에서 내보낼 함수입니다. 최상의 성능을 얻으려면 와일드카드를 사용하지 말고, 항목을 삭제하지도 마세요. 내보낼 함수가 없으면 빈 배열을 사용하세요.
FunctionsToExport = @()
# 이 모듈에서 내보낼 cmdlet입니다. 최상의 성능을 얻으려면 와일드카드를 사용하지 말고, 항목을 삭제하지도 마세요. 내보낼 cmdlet이 없으면 빈 배열을 사용하세요.
CmdletsToExport = @()
# 이 모듈에서 내보내는 변수
VariablesToExport = '*'
# 이 모듈에서 내보낼 별칭입니다. 최상의 성능을 얻으려면 와일드카드를 사용하지 말고, 항목을 삭제하지도 마세요. 내보낼 별칭이 없으면 빈 배열을 사용하세요.
AliasesToExport = @()
# 이 모듈에서 내보내기 위한 DSC 리소스
# DscResourcesToExport = @()
# 이 모듈과 함께 패키지된 모든 모듈 목록입니다.
# ModuleList = @()
# 이 모듈과 함께 패키지된 모든 파일 목록
# FileList = @()
# RootModule/ModuleToProcess에 지정된 모듈로 전달할 개인 데이터입니다. 이 데이터에는 PowerShell에서 사용하는 추가 모듈 메타데이터가 있는 PSData 해시 테이블도 포함될 수 있습니다.
PrivateData = @{
PSData = @{
# 이 모듈에 적용된 태그입니다. 이러한 태그는 온라인 갤러리에서 모듈을 검색하는 데 도움이 됩니다.
# Tags = @()
# 이 모듈에 대한 라이선스 URL입니다.
# LicenseUri = ''
# 이 프로젝트에 대한 기본 웹 사이트의 URL입니다.
# ProjectUri = ''
# 이 모듈을 나타내는 아이콘의 URL입니다.
# IconUri = ''
# 이 모듈의 ReleaseNotes
# ReleaseNotes = ''
} # PSData 해시 테이블의 끝
} # PrivateData 해시 테이블의 끝
# 이 모듈의 HelpInfo URI
# HelpInfoURI = ''
# 이 모듈에서 내보낸 명령의 기본 접두사입니다. Import-Module -Prefix를 사용하여 기본 접두사를 재정의하십시오.
# DefaultCommandPrefix = ''
}
Plain Text
복사



