윈도우 파워셸 커맨드를 이용해 일정 시간 간격으로 웹페이지 호출하기. (scheduled powershell webpage loading command)
윈도우 환경에서는 일정 시간으로 특정 프로그램, 또는 스크립트를 반복 실행하는 기능을 작업 스케줄러(Task Scheduler)가 담당을 합니다.
세세한 실행 옵션 설정을 할 수 있기 때문에 반복 실행하는 특정 작업을 손쉽게 자동화할 수 있습니다.
특정 웹페이지를 일정 시간 간격으로 반복해서 열어야 하는 경우에도 작업 스케줄러를 사용할 수 있습니다.
과거에는 인터넷 익스플로러나 크롬과 같은 PC에 설치된 웹 브라우저를 작업 스케줄러로 실행할 때 파라미터로 URL을 함께 넘기는 방식으로 작업 스케줄러를 이용해 웹 페이지를 열었는데, 이 방법은 100% 웹 페이지의 로딩을 보장할 수 없는 단점이 있습니다.
그래서 사용하는 방법이 파워셸 커맨드라인을 사용해 특정 웹페이지를 여는 방식입니다.
작업 스케줄러로 실행할 때 웹페이지 로딩 완료를 보장할 수 있어서 안정적인 반복 호출 환경을 유지할 수 있습니다.
다음 파워셸 커맨드 라인을 먼저 이해해야 합니다.
파워셸이나 커맨드 라인 실행 옵션을 모르면 "호출할 웹페이지 URL" 부분만 사용할 URL로 변경해서 그대로 복붙해서 사용하면 됩니다.
powershell -Exec ByPass -NoProfile -c "(New-Object Net.WebClient).DownloadString('호출할 웹페이지 URL')"
웹페이지를 호출하는 파워셸 커맨드라인 이해
파워셸 사용 방법을 배우는게 아니므로, 위의 파워셸 커맨드 라인 옵션 파라미터가 어떤 역할을 하는지만 간단하게 소개합니다.
위 파워셸 커맨드 라인은 총 3개의 옵션 파라메터를 사용합니다.
각 파라메터는 다음의 기능을 합니다.
파라메터 | 기능 |
-Exec | -ExecutionPolicy 의 축약형 파라메터입니다. "파워셸 실행정책" 이라고 하고, 파워셸 스크립트가 실행되는 실행 환경과 보안에 관련된 설정을 정하는 것입니다. 특히 외부에서 가져오거나 원격 스크립트를 실행할 경우 보안 정책에 위배되는 스크립트는 실행할 수 없도록 차단하는 등의 설정을 사용하기 위한 파라메터입니다.(스크립트로 된 악성코드나 멀웨어를 차단하기 위함) "ByPass"는 실행정책을 사용하지 않고 통과한다는 의미입니다. |
-NoProfile | 파워셸의 프로필 파일, 또는 프로필 정보를 사용하지 않음. 파워셸로 실행하고자 하는 것이 웹 클라이언트로 웹페이지를 여는게 전부이기 때문에 셸 환경을 사용할 필요가 없습니다. 따라서 프로필 정보는 필요가 없습니다. |
-c | 파라메터 뒤에 실행할 커맨드를 입력합니다. 공백이 있는 커맨드일 경우 쌍따옴표("")로 감싸서 실행할 커맨드를 입력합니다. 웹 페이지를 로딩하는 파워셸 실행 커맨드는 다음과 같습니다. 이해가 안되면 그냥 원래 이렇게 사용한다고 생각하면 됩니다. (New-Object Net.WebClient).DownloadString('호출할 웹페이지 URL') (New-Object Net.WebClient) 는 닷넷 내장 웹 클라이언트, 쉽게 윈도우 운영체제 내장 웹브라우저 같은 거라고 생각하면 됩니다.(카카오톡에서 웹 링크를 클릭하면 카카오톡 안에서 웹페이지를 로딩해서 보여주는 것과 같은 개념입니다.) 실행된 내장 웹 클라이언트에 DownloadString() 메서드를 사용해 호출할 웹페이지 URL을 인자로 넘기면 닷넷 웹 클라이언트가 해당 URL을 로딩합니다. |
다음처럼 네이버 URL을 호출하는 웹페이지 URL 위치에 넣어서 파워셸 콘솔에서 실행하면 네이버 HTML 소스코드가 출력되는 것을 확인할 수 있습니다.
powershell -Exec ByPass -NoProfile -c "(New-Object Net.WebClient).DownloadString('https://naver.com')"
작업 스케줄러에 파워셸 커맨드 라인 등록하기
실행할 파워셸 커맨드 라인을 이해했으므로 작업 스케줄러에 등록을 해보겠습니다.
작업 스케줄러를 찾아서 실행합니다.
모르겠으면 윈도우 검색에서 "작업 스케줄러", "Task Scheduler"를 검색어로 넣으면 작업 스케줄러 실행 파일을 찾아줍니다.
작업 스케줄러 오른쪽의 커맨드 메뉴에서 "작업 만들기"를 클릭해 새 작업을 하나 생성합니다.
윈도우 서버처럼 항상 켜져 있는 서버 환경에서 주기적으로 반복 실행하려면 "일반-사용자의 로그온 여부에 관계없이 실행"을 선택합니다.
트리거에서 새 트리거를 생성해서 반복 실행하는 주기를 설정합니다.
이제 가장 중요한 파워셸 커맨드를 "동작" 탭에서 등록합니다.
파워셸 커맨드 라인은 2개로 나누어서 입력합니다.
프로그램/스크립트 입력 항목에는 "powershell"을 입력하고, 나머지 실행 파라미터 전체는 "인수 추가(옵션)" 항목에 입력합니다.
작업 스케줄러에 새 스케줄이 등록되면, 컨텍스트 메뉴에서 "실행"을 선택해 새 스케줄을 직접 실행해 봐서 잘 실행되는지 확인합니다.