Table of Contents

AntBot Studio > Activity > 흐름제어 > 실행 > 실행하기-Power Shell Generic

정의 (Description)

  • 결과에 대한 형식을 미리 선택하고 지정한 입력값을 사용하여 PowerShell 명령 또는 스크립트 파일을 실행하는 Activity입니다.
* PowerShell 또는 PowerShell ISE를 실행할 수 있는 Microsoft Window 시스템 (Windows 7,8,10,11) 이어야 합니다.
- 실제 실행 가능한 스크립트 여부 확인 필수
* 스크립트 파일로 실행하는 경우 파일의 확장자는 ps1으로 지정되어야 합니다.
* 명령어를 직접 실행 시엔 상관없으나, 스크립트 파일(~.ps1)로 실행하는 경우 PowerShell 실행정책 확인 및 변경이 필요할 수 있으며, 이를 변경하기 위해서는 관리자 권한으로 변경해야 합니다.
* 결과에 대한 형식을 미리 지정하므로 스크립트의 결과도 동일한 유형으로 출력되어야 합니다.

  • PowerShell 실행정책 확인 및 변경 방법 - 스크립트 파일(확장자 ps1인 파일)로 실행하는 경우에만 확인 필요
  1. PowerShell 관리자 권한으로 실행

    • 시작프로그램 또는 검색에서 "Windows PowerShell" 조회후 관리자로 실행 클릭

  2. PowerShell 스크립트 실행정책 확인

    • CurrentUser의 스크립트 실행정책 확인
      • 명령어 : Get-ExecutionPolicy -List
       PS D:\> Get-ExecutionPolicy -List
    
               Scope ExecutionPolicy
               ----- ---------------
       MachinePolicy       Undefined
          UserPolicy       Undefined
             Process       Undefined
         CurrentUser       Undefined
        LocalMachine       Undefined
    
    • CurrentUser의 스크립트 실행정책이 RemoteSigned 가 아닌 경우 실행정책 변경 필요.
    실행정책 설명
    Undefined ExecutionPolicy를 설정하지 않았다는 의미이며, 기본 정책인 "Restricted"로 작동합니다.
    Restricted Windows 10의 ExecutionPolicy 기본 값이며, 이 경우 스크립트(~.ps1) 파일이 실행되지 않습니다.
    RemoteSigned 해당 로컬 컴퓨터에서 에서 작성된 모든 스크립트는 실행이 가능하며,
    인터넷에서 다운로드(IE, 크롬, 파이어폭스, 아웃룩 등)한 스크립트는 인증기관이 발행한 코드로 서명되어야만 실행이 가능합니다.
    일반적으로 많이 사용하고 권장되는 실행정책입니다.
  3. PowerShell 실행정책 변경 및 확인

    • CurrentUser의 스크립트 실행정책을 RemoteSigned 로 변경
      • 명령어 : Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
       PS D:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
    
       실행 규칙 변경
       실행 정책은 신뢰하지 않는 스크립트로부터 사용자를 보호합니다. 실행 정책을 변경하면
       about_Execution_Policies 도움말 항목(https://go.microsoft.com/fwlink/?LinkID=135170)에 설명된
       보안 위험에 노출될 수 있습니다. 실행 정책을 변경하시겠습니까?
       [Y] 예(Y)  [A] 모두 예(A)  [N] 아니요(N)  [L] 모두 아니요(L)  [S] 일시 중단(S)  [?] 도움말
       (기본값은 "N"):Y
    
    • CurrentUser의 스크립트 실행정책 RemoteSigned 적용여부 확인
      • 명령어 : Get-ExecutionPolicy -List
       PS D:\> Get-ExecutionPolicy -List
    
               Scope ExecutionPolicy
               ----- ---------------
       MachinePolicy       Undefined
          UserPolicy       Undefined
             Process       Undefined
         CurrentUser    RemoteSigned
        LocalMachine       Undefined
    
  4. PowerShell 스크립트 파일 저장

    • 실행할 PowerShell 스크립트를 특정 경로에 파일(~.ps1 확장자)로 저장



속성 (Properties) (*은 필수값입니다.)

항목 설명 데이터타입 기본값 설정가능옵션
Common
Activity 이름 해당 Activity의 이름을 설정합니다.
- 기본값은 Activity명이며, 사용자가 직접 변경 가능합니다.
String 실행하기-Power Shell
Input Common
CommandText * 실행할 PowerShell 명령어 또는 스크립트 파일 경로를 설정합니다.

Ex) PowerShell 명령어 입력시
get-service wmi*

Ex) PowerShell 스크립트 파일경로 입력시
C:\Users\user\Documents\PowerTest\PoTest.ps1
String Null
Input 명령어을 실행에 필요시 사용되는 PSObject 컬렉션입니다.
다른 실행하기-Power Shell 액티비티의 출력 결과를 사용할 수도 있으며
이는 특수한 경우에만 사용됩니다.
- PSObject 컬렉션은 PowerShell에서 명령 수행후 출력결과가 존재할 경우 자동으로 생성되는 객체입니다.

일반적으로 명령 수행에 필요한 값을 전달하는 방식은 Parameters 또는 PowerShellVariables 를 통해 전달합니다.
Collection<PSObject> Null
Parameters PowerShell 스크립트 내 최상단에 Param 으로 기술되어 있고 변수명 앞에
$가 표기된 경우는 Parameters를 통해 매개 변수를 설정 후 전달해야 합니다.
( Mandatory=$true 로 지정된 변수는 필수로 전달 필요함)
스크립트 내에 Param 이 없는 경우는 PowerShellVariables 로 매개변수를 전달 합니다.

Ex)
Param
(
[Parameter(Mandatory=$true)] [string]$directoryPath,
[string]$FileExt = "txt"
)
IDictionary<String,InArgument> Null
Option
IsScript CommandText에 설정한 값이 스크립트인지 여부를 설정합니다. Boolean False - True : CommandText 입력한 내용을 그대로 스크립트로 실행할때 사용.
- False : 스크립트 파일(확장자:ps1)로 실행시 사용
PowerShellVariables PowerShell 수행 시 RPA에서 전달하거나 받아야 할 변수를 정의합니다.
PowerShell 명령어(또는 스크립트)는 '입력' 또는 '입력/출력'에 설정된 값을 사용하고 , '출력' 또는 '입력/출력' 에 결과 값을 전달 할 수 있습니다.
- PowerShell 스크립트 내에 변수앞에 $가 표기되어야 전달 가능합니다.
(단, Param으로 작성된 변수 제외)

Ex) $LastFileName = (Get-ChildItem -Path "C:\Users\user\Documents\PowerTest" -File | Select -Last 1).Name
IDictionary<String,InArgument> Null
Output
Output PowerShell 명령 실행 이후 반환된 데이터를 받을 컬렉션 값을 설정합니다.
- 미리 선택한 결과 형식에 맞게 출력결과가 회신됩니다.
Collection<선택한 변수형식> Null


액티비티 사용 예시 (Example Usage)

  • 지정 폴더내에 체크를 원하는 확장자를 가진 파일명 목록 및 해당 파일 중 최종수정된 파일명을 가져오는 PowerShell 명령어를 수행하고 메세지박스로 보여주는 예시
  1. PowerShell 수행을 위한 테스트용 폴더 생성 및 폴더 내에 txt 파일 5개 작성

    * 테스트용 폴더이므로 기존에 사용하던 폴더 및 확장자를 이용해도 됩니다.
    * 확장자 txt인 파일의 목록만 가져오는지 확인을 위해 다른 확장자(~.log 등) 파일도 같이 생성해도 됩니다.

    1-1. 폴더 생성 - 이름 : PowerTest

    • Ex) C:\Users\user\Documents\PowerTest

    1-2. PowerTest 폴더내에 txt 파일 5개 생성

    • 파일명 : P1.txt ~ P5.txt
    • 최종수정일 기준으로 정렬해서 목록을 가져오므로 각 파일마다 생성 시간이 다르게 생성


  2. 변수 선언 : 총 3개 변수 선언

    2-1. Collection<String> 변수 선언
    2-1-1. 이름 : colFileName 입력 ⇒ 변수 유형 : 형식 찾아보기...
    2-1-2. (형식 찾아보기 팝업) 이름 입력 : Collection<T> 검색 ⇒ System.Collections.ObjectModel.Collection<T> 선택 ⇒ Collection Type 클릭 ⇒ String 선택

    2-2. String 변수 선언 : 아래 2-2-1 ~ 2-2-2 를 반복해서 strLastFileName / strFileInfo 2개 변수 선언

    2-2-1. 이름 : strLastFileName / strFileInfo 입력
    2-2-2. 변수유형 : String 선택




  3. '실행하기-Power Shell Generic' 액티비티 설정

    3-1. 실행할 PowerShell 스트립트 및 결과 형식 확인

    PowerShell 프로그램을 통해 정상 실행이 가능한지 먼저 수행해 본 후 적용합니다.
    아래의 스크립트는 테스트를 위한 예시입니다.
    - 결과형식은 파일명(String)의 목록을 출력합니다.
    #===============================================================================================================
    #지정 폴더내에 체크를 원하는 확장자를 가진 파일명 목록 및 해당 파일 중 최종수정된 파일명을 가져오는 PowerShell 스크립트
    #===============================================================================================================
    Param
    (
     [Parameter(Mandatory=$true)] [string]$directoryPath, #체크할 경로 : RPA 필수입력
     [string]$FileExt = "txt"                             #체크할 확장자 : RPA 입력시 해당 확장자로 체크, 미입력시 Default 로 txt 확장자로 체크
    )
    # Where-Object 검색 조건에 맞추기 위해 확장자 앞에 "." 추가
    $FileExt = "." + $FileExt; 
    
    # 입력 받은 경로 아래에 입력한 확장자를 가진 파일중 최종으로 수정된 파일명 가져오기
    $LastFileName = (Get-ChildItem -Path $directoryPath -File | Where-Object { $_.Extension -eq $FileExt } | Sort-Object LastWriteTime | Select -Last 1).Name
    if ($LastFileName -eq $null) {
       # 해당 확장자 파일이 없는 경우 파일입력 받은 경로 아래에 입력한 확장자를 가진 파일 목록 가져오기
       $LastFileName = "해당 확장자(~" + $FileExt + ") 파일 미존재"
    } else {
       # 입력 받은 경로 아래에 입력한 확장자를 가진 파일명 목록 가져오기
       $FileItem = (Get-ChildItem -Path $directoryPath -File | Where-Object { $_.Extension -eq $FileExt } | Sort-Object -Property LastWriteTime ).Name
       $FileItem | Write-Output   # 대상 파일명 목록 출력 - Collection<String> 로 전달됨
    }
    

    3-2. '실행하기-Power Shell Generic' 결과에 대한 형식 지정

    • 도구상자에서 '실행하기-Power Shell Generic' 가져오기 및 스크립트의 결과에 맞는 형식 지정
      • 흐름제어 > 실행하기-Power Shell Generic
      • 결과 형식 지정 : String

    3-3. CommandText 입력 / IsScript 항목 체크

    PowerShell 스크립트를 바로 실행하는 경우와 PowerShell 스크립트 파일(~.ps1)을 실행하는 경우에 맞게 아래처럼 입력 및 설정하셔야 합니다.
    • PowerShell 스크립트를 직접 실행하는 경우
      • CommandText 입력 : PowerShell 스크립트 직접 입력 : 쌍따옴표 (" ") 없이 입력
      • IsScript 항목 : Check 처리

    • PowerShell 스크립트 파일(~.ps1)을 생성 후 파일로 실행하는 경우
      • 특정 경로에 위의 PowerShell 스크립트를 실행용 PowerShell 스크립트 파일(~.ps1)로 저장
        • Ex) C:\Users\user\Documents\PowerTest\GetFileList.ps1
      • CommentText 입력 : 저장한 PowerShell 스크립트 파일(~.ps1)의 전체경로 입력 : 쌍따옴표 (" ") 없이 입력
        • Ex) C:\Users\user\Documents\PowerTest\GetFileList.ps1
      • IsScript 항목 : Check 해제 처리


    3-4. '실행하기-Power Shell Generic' 액티비티 Parameters 항목 입력

    PowerShell PowerShell 스크립트 내 최상단에 Param 으로 기술되어 있는 경우에만 Parameters를 통해 매개 변수를 설정 후 전달해야 합니다.
    특히, Param 내 Mandatory=$true 로 지정된 변수는 필수로 전달이 필요합니다.

    • Input Common > Parameters : ... 버튼 클릭 > Parameters 팝업 오픈됨
    • Param 선언된 변수만큼 아래 반복
      • 인수 만들기 클릭
      • 이름 : 스크립트 Param 내 파리미터 명 입력 : $ 표시는 제외하고 입력
        • Ex) directoryPath / FileExt
      • 방향 : 입력 선택
      • 형식 : 스크립트 내 Param에 기술된 파라미터별 속성 선택 - 문자는 String 입력 , 숫자는 Int32 등으로 입력
        • Ex) String / String
      • : Procedure 의 파라미터로 전달할 Antbot 내 변수 입력 또는 값 직접 입력
        • 값을 직접 전달하는 경우는 속성에 맞춰 입력 필요. (String인 경우 : "C:\Users\user\Documents\PowerTest" , Int32인 경우 : 120 )
        • 변수로 입력시엔 쌍따옴표 없이 변수명 바로 기술함. (변수명 입력인 경우 : strPath )
        • Ex) directoryPath 는 "C:\Users\user\Documents\PowerTest" 입력 / FileExt 는 "txt" 입력

    3-5. '실행하기-Power Shell Generic' 액티비티 PowerShellVariables 항목 입력

    PowerShell 스크립트 내에 변수앞에 $가 표기되어야 전달 가능합니다. (단, Param으로 작성된 파라미터는 Parameters를 통해 전달해야 합니다.)
    Ex) $Location = Get-Location       ##현재 위치 가져오기
    PowerShell 명령어(또는 스크립트)는 '입력' 또는 '입력/출력'에 설정된 값을 사용하고 , '출력' 또는 '입력/출력' 에 결과 값을 전달 할 수 있습니다.

    • Option > PowerShellVariables : ... 버튼 클릭 > PowerShellVariables 팝업 오픈됨
    • Param 선언된 변수만큼 아래 반복
      • 인수 만들기 클릭
      • 이름 : 스크립트 입력 또는 출력으로 사용할 변수명 입력 : $ 표시는 제외하고 입력
        • Ex) LastFileName
      • 방향 : 값을 전달할지 결과를 가져올지에 따라 입력, 출력, 입/출력 중 선택
        • Ex) 출력 선택
      • 형식 : 해당 변수의 속성 입력 - 문자는 String 선택 , 숫자는 Int32 등으로 입력
        • Ex) String
      • : Procedure 의 파라미터로 전달할 Antbot 내 변수 입력 또는 값 직접 입력
        • 값을 직접 전달하는 경우는 속성에 맞춰 입력 필요. (String인 경우 : "C:\Users\user\Documents\PowerTest" , Int32인 경우 : 120 )
        • 변수로 입력시엔 쌍따옴표 없이 변수명 바로 기술함. (변수명 입력인 경우 : strPath )
        • Ex) strLastFileName

    3-6. '실행하기-Power Shell Generic' 액티비티 Output 입력

    PowerShell 명령 실행 이후 반환된 데이터를 받을 컬렉션 값을 설정합니다.
    • Output > Output
      • colFileName 변수명 입력

  4. 'If' 액티비티 구성

    Tip
    • 관련 매뉴얼 참고 링크 - If

    4-1. 도구상자에서 'If' 액티비티 가져와서 '실행하기-Power Shell' 액티비티 아래에 구성

    • 흐름제어 > 조건문 > If
      • 검색창에 If 로 검색 후 가져오기도 가능함.

    4-2. 'If' 액티비티 Condition 입력

    • colFileName.Count > 0 입력
      • colFileName 결과물이 0건 초과인지 체크 - 최소 1건 이상이면 대상 확장자에 해당하는 파일이 존재함을 의미.




  5. 'If' 액티비티 Then 영역 구성 : 대상 확장자에 해당하는 파일이 최소 1건이상 존재하는 경우


    5-1. Then 영역 내에 'Assign' 액티비티 구성 : 파일 목록 헤더 구성

    • 변수 : strFileInfo
    • 입력값 : "          파일 목록" + Environment.NewLine + "================="

    5-2. 'ForEach' 액티비티 구성

    Tip
    • 관련 매뉴얼 참고 링크 - ForEach
    • Input Common > Values
      • 입력값 : colFileName
    • 기타 > ArgumentType
      • String 선택


    5-3. 'ForEach' 액티비티 내부 'Assign' 액티비티 구성 : 파일 목록별로 1줄씩 파일명 구성

    • 변수 : strFileInfo
    • 입력값 : strFileInfo + Environment.NewLine + item

    5-4. 'Assign' 액티비티 구성 : 최종 수정파일명 추가 구성

    • 변수 : strFileInfo
    • 입력값 : strFileInfo + Environment.NewLine + "=================" + Environment.NewLine + "최종수정 파일명 : " + strLastFileName

  6. 'If' 액티비티 Else 영역 구성 : 대상 확장자에 해당하는 파일이 1건도 없는 경우


    6-1. 'Assign' 액티비티 구성 : 파일 미존재 관련 안내 문구 구성

    • 변수 : strFileInfo
    • 입력값 : "요청 확장자 파일 미존재"

  7. 'If' 액티비티 하단에 '메세지박스' 액티비티 구성 : 최종 결과 메세지


    • 입력값 : strFileInfo

  8. 실행 결과 확인

    • 액티비티 실행 후 결과 엑셀파일 확인 화면

    8-1. 대상 확장자에 해당하는 파일이 1건도 없는 경우

    8-2. 대상 확장자에 해당하는 파일이 최소 1건이상 존재하는 경우



## 추가 관련 데이터 | 항목명 | 값 | | --- | --- | | 원본 매뉴얼 URL | /AntBot%20Studio/Activity/7.%20흐름제어/실행/실행하기-Power%20Shell%20Generic/ktds.AntBot.Activities.BasicLib.ExecutePowerShell.InvokePowerShellGeneric.html | | 패키지명 | ktds.AntBot.Activities.BasicLib.ExecutePowerShell.InvokePowerShellGeneric | | 매뉴얼 ID | ktds.AntBot.Activities.BasicLib.ExecutePowerShell.InvokePowerShellGeneric |