본문 바로가기

PowerShell54

Powershell 빈폴더 삭제 script Windows 에서 폴더 및 파일 관리시 비어 있는 폴더를 삭제 하고 싶은 경우가 있습니다. 그래서 저는 간단하게 빈폴더를 삭제하는 Powershell script 를 만들어서 사용하곤 합니다. 아래 소개한 powershell profile 에 작성해서 사용하면 조금더 편리하게 사용 할 수 있습니다. http://iamaman.tistory.com/1017 스크립트는 아래와 같습니다. 그냥 하위 폴더는 그냥 두고 현재 폴더만 확인하고 싶은 경우와 빈 폴더만 확인하고 싶은 경우를 위해 recurse 와 Delete 를 옵션으로 줬습니다. function emptyFolderFind { param ( $folder, [Switch]$Recurse, [Switch]$Delete ) if($Recurse) { .. 2016. 10. 17.
Powershell, Autohotkey, Python 에서 UUID/ GUID 생성하기 UUID(Universally Unique Identifier) 는 개체를 식별하기 위한 고유 번호이다. 사람의 주민 번호와 비슷하다고 생각하면 될 것 같다. UUID 에 대한 자세한 설명은 아래 주소에서 확인해 보자. https://ko.wikipedia.org/wiki/%EB%B2%94%EC%9A%A9_%EA%B3%A0%EC%9C%A0_%EC%8B%9D%EB%B3%84%EC%9E%90 오라클 데이터베이스나 마이크로소프트 등에서는 GUID (Globally Unique Identifier) 라는 이름으로 사용한다고 한다. https://ko.wikipedia.org/wiki/%EC%A0%84%EC%97%AD_%EA%B3%A0%EC%9C%A0_%EC%8B%9D%EB%B3%84%EC%9E%90 어쨌든 이런.. 2016. 6. 28.
Powershell 에서 Outlook 으로 메일 보내기 오늘은 아래 포스팅에 이어서 powershell 을 이용하여 아웃룩에서 메일 보내는 방법에 대해 알아보려 합니다. http://iamaman.tistory.com/1638 보통 회사에서 Microsoft Office 를 많이들 사용 하실 겁니다. Powershell 에서는 Com Object 를 사용 할 수 있고~ Com object 를 사용하면 MS office 제품군에 대한 자동화가 가능 합니다. 따라서 outlook 도 자동화가 됩니다. 아래와 같이 간단하게 메일을 보낼 수 있습니다. $textv =@" 메일 테스트 메일 잘 가나요? "@ $subject = "서버의 업데이트가 안 되었습니다." $obj = New-Object -ComObject Outlook.Application $newMail .. 2016. 3. 6.
Powershell 를 활용한 Network Drive 찾기 Powershell 를 사용하여 드라이브를 다룰 때 Network Drive 를 다뤄야 하는 경우가 있습니다. 오늘은 Network Drive 가 특정 문자로 Mapping 이 되어 있을 때 ProviderName 을 찾는 방법에 대해 간단히 소개해 보려 합니다. Powershell 에서 특정 드라이브의 형태를 알고 싶을 때는 Get-WmiObject Win32_LogicalDisk 라는 명령어를 사용합니다. https://msdn.microsoft.com/en-us/library/windows/desktop/aa394173(v=vs.85).aspx 위 주소의 Win32_LogicalDisk 에 대한 매뉴얼을 확인 하시면 네트워크 드라이브는 DriveType 값이 4 라는 것을 확인 할 수 있습니다. 일.. 2016. 2. 16.
Autohotkey 를 사용하여 mathjax $ escaping 아래 포스팅에서 mathjax 에 대해 소개한 적이 있습니다. http://iamaman.tistory.com/1662 $수식$ 나 $$수식$$ 의 형태로 사용하는데~ Powershell 이나 펄의 경우 변수 설정시에 $ 기호를 사용하므로 블로그에 코드 입력시 의도치 않은 동작을 하는 경우가 있습니다. 따라서 mathjax 를 사용하는 블로그에 $ 기호가 들어가는 경우 escaping 을 해 줘야 합니다. $ 기호를 escaping 하는 방법은 다음과 같습니다. $ HTML 코드에 이런 $ 기호가 몇 개 안될때는 일일이 바꿔주면 되겠지만 $ 기호가 많은 경우에는 일일이 바꾸기 어렵습니다. 이런 경우 전체 HTML 코드를 복사 한 후에 아래 autohotkey 코드를 사용하면 한번에 $ 기호들을 escap.. 2016. 1. 20.
Powershell 매월 X 째 주 Y요일 찾기 일을 진행한다 보면 매월 X 째 주 Y요일에 어떤 일을 처리해야 하는 경우가 있습니다. 이런 스케줄을 처리 할 때 당연히 이에 대해 계산하는 함수 등이 필요 할 겁니다. 오늘은 Powershell 을 사용하여 위에 얘기한 매월 X 째 주 Y요일을 찾아볼까 합니다. 고맙게도 아래 주소에 Powershell을 사용하여 매월 X 째 주 Y요일을 찾는 Get-WeekDayInMonth 라는 함수가 작성되 있더군요. http://blog.tyang.org/2012/09/03/powershell-function-get-weekdayinmonth/ Function Get-WeekDayInMonth ([int]$Month, [int]$year, [int]$WeekNumber, [int]$WeekDay) { $First.. 2016. 1. 19.
Powershell 에서 exe 실행 시 끝날 때 까지 기다리게 하기 Powershell 에서 다른 프로세스 실행시 일반 적인 경우 프로그램 실행 후에 powershell 의 다음 라인을 실행하게 됩니다. 하지만 경우에 따라서는 실행된 프로그램이 끝나고 powershell 의 다음 라인이 실행되어야 하는 경우가 있습니다. 이런 경우에는 다음과 같이 처리 하면 됩니다. | Out-NullOr Start-Process -Wait 첫번째 방법 보다는 Start-Process 를 사용하는 게 더 정석적인 방법으로 보이네요. 2016. 1. 4.
윈도우 예약 작업 설정하기 schtasks 윈도우를 사용하면서 "예약 작업" 많이들 사용 하시나요? 서버를 다루시는 분들이야 당연히 많이들 사용하실거고 리눅스를 다루는 분들이야 cron 을 통해 예약 작업들을 많이 사용 하실 겁니다. 윈도우 예약 작업은 아래 그림과 같이 작업 스케줄러를 통해서도 설정 할 수 있지만~ 오늘은 간단하게 schtasks 명령을 사용해서 설정해 보겠습니다. Schtasks 의 사용법은 아래 그림과 같이 cmd 창에 schtasks /? 라고 하면 설명이 나옵니다. 각 매개변수 목록에 대한 설명은 위 그림과 같이 schtasks /Create /? 와 같은 식으로 하면 나오고요~ 저는 예약작업을 주로 powershell 을 사용해서 설정하는데~ 다음과 같이 하곤 합니다. schtasks /create /tn "예약작업이름.. 2015. 10. 31.
Powershell, Depth 에 따른 아이템 검색 Powershell 의 Get-ChildItem 을 사용하여 파일 또는 폴더의 리스트를 얻을 때 해당 폴더 하위의 끝까지 검색을 하고자 할때는 –recurse 라는 옵션을 사용합니다. 그런데 특정 depth 까지만 검색을 하고자 하는 경우 \* 와 같은 키워드를 사용하기도 하지만 Get-ChildItemToDepth 라는 함수가 아래 주소에 있어서 소개하고자 합니다. http://www.indented.co.uk/2010/01/22/limit-recursion-depth-with-get-childitem/ 코드는 다음과 같습니다. 특정 폴더 이하의 D:\ 의 2 depth 까지 검색하는 방법은 다음과 같습니다. get-childitemtodepth -Path "D:\*" -ToDepth 2 2015. 8. 5.
cloc 를 사용하여 코드 라인수 세기 이전 포스팅에서 powershell 을 사용한 코드 라인수 세기 방식에 대해 소개한 적이 있는데요~ http://iamaman.tistory.com/1577 검색을 해보니 역시나…… cloc 라는 프로그램이 있더군요. cloc 의 홈 페이지는 아래와 같습니다. http://cloc.sourceforge.net/ 또는 이전에 소개했던 Chocolatey 을 사용하여 아래와 같이 설치 할 수 도 있더군요. choco install cloc 다운로드 주소는 아래와 같습니다. http://sourceforge.net/projects/cloc/files/cloc/ 현재 최신 버전은 1.62 입니다. 현재 저는 윈도우 64비트를 사용 중이라 위 그림과 같은 페이지에서 cloc-1.62.exe 을 다운로드 받았습니다.. 2015. 5. 20.
Powershell 을 이용한 소스코드 라인 수 세기 리눅스 등에서는 wc –ㅣ 명령을 통해 라인수를 세지만 Powershell 에서는 아래 명령으로 동일한 명령이 가능하다. 아래 명령은 현재 폴더 하위의 C 소스코드 및 헤더 파일의 라인수를 세는 스크립트이다. Get-ChildItem .\* -Include *.c, *.h -Recurse | Get-Content | Measure-Object –Line Measure-Object –Line 명령은 자동으로 공백을 제외하고 라인수를 세서 결과를 내 준다. 다음과 같이 profile.ps1 파일에 함수의 형태로 구성해서 사용하는게 편할 것이다. function sourceLineCH { Get-ChildItem .\* -Include *.c, *.h -Recurse | Get-Content | Measure.. 2015. 5. 19.
Ack 보다 더 빠른 검색 툴, The Platinum Searcher 아래 주소의 글에서 Grep 보다 좋은 검색 툴로 Ack 라는 툴에 대해 소개해 드린 적이 있습니다. http://iamaman.tistory.com/1310 그런데 아래 주소에서 확인을 해보니Ack 보다도 빠른 검색 툴이 있더군요~ http://beyondgrep.com/more-tools/ 오늘 소개해 드릴 툴은 The Platinum Searcher 라는 툴인데요. 구글에서 만든 언어인 Go 로 만들어 졌다고 하더군요. Multi-platforms, multi encodings 을 지원한다 하고~ https://github.com/monochromegane/the_platinum_searcher Powershell 에서 측정을 해보니 다음과 같이 Ack 보다 빠르더군요. Ack 는 509.3429 .. 2015. 5. 15.
Bash 스타일 command line, clink 윈도우에서 Command Line 을 종종 사용하시겠지만 cmd.exe 프로그램이 그리 편리하진 않죠~ 그래서 요즘은 저는 powershell 을 주로 사용하긴 하는데~ 근래에 찾아보니 clink 라는 프로그램이 있어서 소개 드리려 합니다. clink 는 아래 주소에서 다운로드 받을 수 있습니다. http://mridgers.github.io/clink/ 소개에 나와 있는 바와 같이 cmd.exe 프로그램을 Bash-style 로 사용할 수 있도록 해주는 프로그램인데요~ 위 공식 홈페이지뿐만 아니라 이전에 소개했던 chocolatey 을 사용하여~ http://iamaman.tistory.com/1303 아래 명령어들로 설치 할 수 있습니다. Portable 버전을 사용하고 싶다면 첫 번째 명령어를 in.. 2015. 5. 10.
Powershell 에서 7z명령어 사용하기 Powershell 에서 7z 을 사용할 때 7z.exe 명령어를 사용하면 정상적으로 동작을 하지 않는다. 따라서 다음과 같이 Powershell Profile 에 alias 을 설정하여 사용한다. powershell profile 파일의 위치에 대한 확인 방법은 아래 글을 참조한다. http://iamaman.tistory.com/1017 나는 보통 powershell 에서 아래 명령어를 통해 profile 을 설정한다. 아래 명령어를 실행해서 profile 이 없다면 새로 만들겠냐는 메시지가 나온다. notepad $profile.CurrentUserAllHosts powershell profile 에 다음과 같이 설정한다. 아래 명령어는 sz 라는 alias 로 만든 것이다. set-alias sz.. 2015. 5. 5.
Powershell 현재 스크립트 파일의 디렉터리 Powershell 에서 현재 스크립트 파일의 디렉터리의 path 를 구하는 방법은 아래 코드와 같다. function Get-ScriptDirectory { $Invocation = (Get-Variable MyInvocation -Scope 1).Value Split-Path $Invocation.MyCommand.Path } Get-ScriptDirectory 함수를 profile 함수 등에 저장해 놓고 사용하거나 해당 스크립트의 상단에 정의해 놓고 사용 가능하다. 다음과 같이 사용하면 현재 Powershell 스크리브 파일의 path 가 나온다. function Get-ScriptDirectory { $Invocation = (Get-Variable MyInvocation -Scope 1).Val.. 2014. 1. 20.
Notepad++ 자동인덴트(Autoindent) - TextFX Characters 윈도우에 있는 메모장은 가볍기는 하지만 그 기능이 좋지는 않아서 그냥 텍스트 파일 내용 확인 용도로 주로 사용합니다. 저는 윈도우에서 VIM 도 사용하긴 하지만 Notepad++ 도 병행해서 사용하는 편인데요~ Notepad++는 가볍기도 하고 여러 plugin 들을 추가 할 수 있어서 대단히 편리하더군요. 다음과 같이 2 패널로도 사용할 수 있고요~ 저는 Powershell 코딩을 할 때는 Windows Powershell ISE 의 에디터도 있지만 몇 가지 불편한 점들이 있어서 Notepad++ 를 주로 사용합니다. 그런데 자동 인덴트가 안되면 참~~ 불편하더군요. 일단 Notepad++의 자동인덴트 기능은 settings → preferences 에서 들어가서 MISC. 탭에서 아래 그림과 같이 A.. 2014. 1. 18.
Powershell 이전 directory 로 돌아가기 CD - 리눅스 쉘을 사용해 보신 분들이라면~ cd - 라는 명령을 통해서 바로 직전의 directory 로 돌아갈 수 있는걸 알고 계실 겁니다. 그런데 powershell 에서는 cd – 가 동작하지 않아서 약간 불편 하더군요. 그래서 찾아보니 cd – 를 동작하도록 하는 스크립트가 있더군요. 원본 포스팅은 맨 아래의 참고자료에서 확인 하실 수 있습니다. 코드는 다음과 같습니다. Remove-Item Alias:cd function cd { if ($args[0] -eq '-') { $pwd=$OLDPWD; } else { $pwd=$args[0]; } $tmp=pwd; if ($pwd) { Set-Location $pwd; } Set-Variable -Name OLDPWD -Value $tmp -Scope g.. 2013. 10. 20.
Powershell profile 적용 및 alias 윈도우에 Powershell 이 추가 되면서 스크립트 작성이 굉장히 편리해졌는데요~ Powershell 에서도 리눅스 bash 에서와 마찬가지로 alias 를 비롯한 많은 설정들을 할 수 있습니다. 또한 이런 설정들을 .bashrc 파일에 설정하듯이 powershell 에서도 profile 파일에 설정할 수 있습니다. profile 파일을 사용하기 전에 일단 Get-ExecutionPolicy 명령을 통해 현재의 ExecutionPolicy 설정 상태를 확입합니다. 파워 쉘 스크립트를 한번도 실행안한 경우에는 Restricted로 보통 설정되어 있는데요~ 아래 명령을 통해 스크립트가 실행 가능하도록 해 줍니다. Set-ExecutionPolicy RemoteSigned 다른 실행 정책들에 대해서는 아래 .. 2013. 10. 16.
Powershell 경우의 수 조합 다 구하기(Cartesian Product) 실험을 하다 보면 경우의 수의 조합들을 다 구해서 실험을 해야 하는 경우가 있습니다. 이러한 조합의 경우의 수를 구하는 것을 Cartesian Product 라고 하는데요. 단순히 생각하면 Cartesian Product 를 구하기 위해서는 for 문을 계속 중첩해서 사용해야 하지만 이게 두~세개만 넘어가도 굉장히 헷갈리고 힘든일이 됩니다. 이러한 경우 Cartesian Product 를 구하는 함수를 만들어 놓고 사용한다면~ 굉장히 편리하죠~ 저는 Powershell 에서 Cartesian Product 를 구해야 하는 경우가 있었는데~ 아래 주소에 그 코드가 있더군요. 좋은 코드 같아서 여러분들께도 소개하려 합니다. 코드 출처 : http://makeyourownmistakes.wordpress.co.. 2013. 8. 18.
MS Windows 명령 창 팁들 윈도우에는 Powershell 도 있지만 기본적으로 cmd.exe 를 이용한 콘솔을 주로 사용하는데요~ 오늘은 아래 주소에서 소개됐던 command line 팁들에 대해 소개 할까 합니다. http://www.computerhope.com/tips/msdos.htm 위 주소의 글들을 보다 보니, 일부는 제가 알던 것이었지만, 일부의 경우에는 전혀 몰랐던 팁들도 있더군요. 어쨌든 저와 같이 모르실 수도 있는 분들을 위해 몇 가지 팁에 대해 설명 드리려 합니다. 1. 특정 파일을 드래그 해서 콘솔 창에 놓으면 아래 그림처럼 그 파일의 전체경로가 command 창에 표시 됩니다. 2.위 아래 화살표를 누르면 이전에 사용한 명령어들을 사용할 수 있으며~ F7 을 누르면 아래 그림처럼 사용했던 명령어들의 목록이 .. 2013. 4. 15.
PowerShell Script가 실행되는 현재 폴더 확인 PowerShell script 를 작성하다가 현재 실행되는 스크립트의 폴더를 확인 하는 코드 입니다. 코드는 굉장히 간단한데요~ 다음과 같습니다. $fullPathIncFileName = $MyInvocation.MyCommand.Definition # Script 파일의 full path $currentScriptName = $MyInvocation.MyCommand.Name # Script 파일 이름 $currentExecutingPath = $fullPathIncFileName.Replace($currentScriptName, "") # Script 폴더 Write-Host $currentExecutingPath # Script 파일의 폴더 확인 주석을 붙였으니 설명은 딱히 필요 없을것 같군요. 2012. 12. 17.
Powershell 지정 일 이후의 파일 백업 컴퓨터를 사용함에 있어서 백업의 중요성은 100번 말해도 지나치지 않다고 생각합니다. 지금까지 컴퓨터를 써 오면서 저는 백업 또는 저장을 제대로 안 해서 짧게는 몇 시간부터 ~ 몇 개월 간의 자료들을 날려 먹은 경험이 부지기수라 백업이 항상 최 우선 입니다. 몇 시간 동안 만들 자료가 다 날라 갈 때의 그 허탈함이란…… 몇 년 전 새벽에 졸린 눈 비벼가며 작성하던 리포트가 날라 갔을 때의 기억을 생각하면 아직도 간담이 서늘해 지는군요. 지금도 생각 나는 대로 키보드를 두드리면서도 습관적으로 ctrl + S 키보드를 꾸~~~욱 누르고 있습니다. ㅋㅋㅋ 이런 백업의 중요성 때문에 가끔 윈도를 밀면서 날라갈 수도 있는 C 드라이브의 중요한 자료들은 다른 드라이브로 주기적으로 백업을 합니다. 물론 제가 매번 직.. 2012. 3. 7.
Powershell 특정 확장자 파일의 경로 다 찾기 컴퓨터를 이용하다 보면 특정 확장자의 파일 경로를 다 찾아야 할 경우가 있다. 아래 코드는 powershell 을 이용하여 D 드라이브 및 그 하위 드라이브에 있는 txt 파일들을 다 찾고 이름 및 수정 시간에 따라 정열 한 후에 d:\Temp_file_path.txt 에 그 결과를 저장하는 코드이다. $a = gci D:\* -Include *.txt –Recurse # D 드라이브 및 그 하위 폴더에 있는 txt 확장자의 파일들을 다 찾는다. $h= $a | sort-object -property directoryname -unique | sort-object -property lastwritetime # 이름에 따라 정렬하고 겹치는 이름들은 제외 한다. 그리고 수정 시간에 따라 정렬한다. $n=0 .. 2011. 4. 1.
Powershell 용량 작은 파일 지우기 컴퓨터를 사용하다 보면 특정 용량 이상 또는 특정 용량 이하의 파일들을 걸러 내고 싶은 경우가 있다. 이런 경우엔 단순히 윈도우 탐색기에서 크기에 따라 정렬을 한 이후에 드래그 하여 지우는 방법 등을 쓸 수가 있다. 하지만 같은 폴더내에 특정 확장자의 파일만 지우고 싶은 경우에는 윈도우 탐색기만으로는 부족하다. 이런 경우 powershell 을 이용하면 너무나 간단히 작업을 완료 할 수가 있다. 나의 경우엔 D:\movie_folder 안에 있는 avi 파일 중에서 용량이 100 MB 이하인 파일들을 지우고 싶었다. 위 작업을 수행하는 powershell 코드는 아래와 같다. gci d:\movie_folder\* -Include *.avi | Where-Object -FilterScript { $_.l.. 2011. 3. 6.