Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

vbscriptSampleCode

한국어 | English

AAE(Advanced Adapter Engine) 기반 SAP 연동을 구축하면서 쓴 자동화 스크립트 모음이다. SAP GUI 를 스크립팅 인터페이스로 조작하고, 거기서 떨어지는 Excel export 를 정리하고, 그 둘에 필요한 문자열·파일 헬퍼를 담고 있다.

2019년에 피드백을 받으려고 조각 코드 형태로 올렸던 저장소다. 이번 개정은 시나리오는 그대로 두되 실행을 막고 있던 결함을 고치고, PowerShell 포팅을 나란히 추가했다 — PowerShell 을 함께 두는 이유 참고.

구조

src/vbs/   VBScript. cscript.exe(Windows Script Host)로 실행
src/ps/    같은 시나리오의 PowerShell 5.1+ 포팅
docs/      코드 리뷰 기록과 VBScript → PowerShell 대응표

스크립트

SAP GUI

스크립트 하는 일
src/vbs/SapConnection.vbs 실행 중인 SAP GUI 에 붙어 연결을 열고 로그온
src/vbs/SapTableInput.vbs 구분자 문자열을 GuiTableControl 의 연속 행에 입력
src/ps/Connect-SapGui.ps1 SapConnection.vbs 와 동일. PSCredential 을 받고 세션을 출력
src/ps/Set-SapTableColumn.ps1 SapTableInput.vbs 와 동일. 파이프라인 입력 지원

양쪽 모두 SAP GUI for Windows 에서 스크립팅이 클라이언트(Options > Accessibility & Scripting)와 서버(프로파일 파라미터 sapgui/user_scripting = TRUE) 양쪽에 켜져 있어야 한다.

set SAP_PASSWORD=********
cscript //nologo src\vbs\SapConnection.vbs "/H/sap.example.com/S/3200" KO USER01
$session = .\src\ps\Connect-SapGui.ps1 -ConnectionString '/H/sap.example.com/S/3200' -Language KO
'1000','1010','1020' | .\src\ps\Set-SapTableColumn.ps1 -Session $session -TableId 'wnd[1]/usr/tblX' -ConfirmPopup

Excel

스크립트 하는 일
src/vbs/ExcelOpen.vbs 통합 문서를 보이는 Excel 인스턴스로 열고 그대로 둔다
src/vbs/ReservationExcelEdit.vbs 예약 export 정리: C열 삭제, 납품업체코드 일괄 입력, 생산버전 → STATUS
src/ps/Edit-ReservationWorkbook.ps1 같은 정리. 헤더명을 파라미터로 받고 -WhatIf 지원
cscript //nologo src\vbs\ExcelOpen.vbs "C:\data\reservation.xlsx"
cscript //nologo src\vbs\ReservationExcelEdit.vbs reservation.xlsx 100023
.\src\ps\Edit-ReservationWorkbook.ps1 -WorkbookName reservation.xlsx -SupplierCode 100023 -WhatIf

둘 다 이미 실행 중인 Excel 인스턴스에 붙으며 Quit 을 호출하지 않는다. 체인으로 이어 쓰도록 설계된 스크립트이기 때문이다.

헬퍼

스크립트 하는 일
src/vbs/DateFormatCustom.vbs m/d/y [h:m:s]yyyyMMdd (월·일 zero-pad)
src/vbs/Deduplication.vbs 구분자 문자열의 중복 토큰 제거. 첫 등장 순서 유지
src/vbs/RegexCheck.vbs StripPattern / MatchesPattern
src/vbs/FileLog.vbs AppendLine / WriteAllText / ReadAllText / ReadLines
src/vbs/BackupFolder.vbs + .cmd 폴더를 <루트>\yyyy_MM_dd 로 복사
src/ps/ConvertTo-SapDate.ps1 날짜 정규화. 파이프라인 친화
src/ps/Backup-Folder.ps1 -Retain 보관 윈도우가 있는 폴더 스냅샷

중복 제거·정규식·파일 로깅은 PowerShell 대응 파일을 의도적으로 만들지 않았다 — 거기서는 한 줄이면 끝난다. docs/vbscript-to-powershell.md 참고.

VBScript 헬퍼 파일들은 함수 선언만 담고 있다. Windows Script Host 에는 include 가 없으므로, 호출하는 스크립트에 붙여넣거나 .wsf 잡으로 묶어 쓴다.

<job>
  <script language="VBScript" src="DateFormatCustom.vbs"/>
  <script language="VBScript">
    WScript.Echo FormatCustomDate("6/21/2019 13:05:00", "")
  </script>
</job>

인코딩과 개행

.gitattributes 가 처리한다. git 밖에서 파일을 편집할 때 알아둘 것.

  • cscript.exe.vbs 를 UTF-8 이 아니라 시스템 코드페이지로 읽는다. 한글 리터럴이 있는 스크립트는 디스크에 UTF-16LE + BOM 으로 놓여야 한다. BOM 없는 UTF-8 이면 리터럴이 깨지고 컬럼 검색이 조용히 실패한다. src/vbs/ReservationExcelEdit.vbs 는 저장소에는 UTF-8 로 보관되고 working-tree-encoding 으로 체크아웃 시 변환된다(git ≥ 2.21).
  • Windows PowerShell 5.1 은 BOM 없는 파일을 ANSI 코드페이지로 읽는다. 그래서 비 ASCII 를 담은 .ps1UTF-8 + BOM 으로 저장한다.
  • .vbs, .cmd, .bat, .ps1 은 CRLF 로 체크아웃된다.

보안 주의

  • 비밀번호를 명령행 인자로 넘기지 말 것. argv 는 같은 머신의 아무 프로세스나 읽을 수 있고(작업 관리자의 명령줄 열, WMI Win32_Process, Sysmon 이벤트 ID 1) 대부분의 EDR 이 수집한다. SapConnection.vbs 는 환경변수 SAP_PASSWORD 를 읽고, Connect-SapGui.ps1PSCredential 을 받는다.
  • SAP GUI 스크립팅은 로그온한 사용자의 권한 전체로 세션을 조작한다. 이 스크립트들을 특권 코드로 취급할 것.
  • 여기 있는 스크립트에는 자격 증명이나 호스트명이 박혀 있지 않다. 그대로 유지할 것.

PowerShell 을 함께 두는 이유

Microsoft 는 2023년에 VBScript 를 지원 중단 대상으로 지정했다. Windows 11 24H2 부터는 내장 구성요소가 아니라 주문형 기능(FoD)이고, 이후 단계에서 기본 비활성화 상태로 배포된 뒤 제거될 예정이다.

SAP GUI 의 스크립팅 엔진 자체는 COM 인터페이스라 언어 중립적이고 PowerShell·VBA 등 COM 을 다룰 수 있는 무엇에서든 계속 동작한다 — 수명이 정해진 쪽은 SAP 이 아니라 cscript.exe 호스트다. src/ps/ 가 마이그레이션 대상이고, 기존 스케줄이 계속 돌도록 src/vbs/ 를 남겨 둔다.

요구사항

OS Windows (src/vbs 는 Windows Script Host 필요)
PowerShell 5.1. PowerShell 7+ 에서 COM 부분은 -UseWindowsPowerShell 필요
SAP SAP GUI for Windows. 클라이언트·서버 양쪽 스크립팅 활성화
Excel Microsoft Excel (Excel 스크립트가 COM 으로 조작)

문서

라이선스

MIT

About

SAP GUI Scripting / Excel automation samples for an AAE integration — VBScript with a PowerShell port

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages