Search

Module

[- 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
복사