한국어 | 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 대응표
| 스크립트 | 하는 일 |
|---|---|
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| 스크립트 | 하는 일 |
|---|---|
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 를 담은
.ps1은 UTF-8 + BOM 으로 저장한다. .vbs,.cmd,.bat,.ps1은 CRLF 로 체크아웃된다.
- 비밀번호를 명령행 인자로 넘기지 말 것.
argv는 같은 머신의 아무 프로세스나 읽을 수 있고(작업 관리자의 명령줄 열, WMIWin32_Process, Sysmon 이벤트 ID 1) 대부분의 EDR 이 수집한다.SapConnection.vbs는 환경변수SAP_PASSWORD를 읽고,Connect-SapGui.ps1은PSCredential을 받는다. - SAP GUI 스크립팅은 로그온한 사용자의 권한 전체로 세션을 조작한다. 이 스크립트들을 특권 코드로 취급할 것.
- 여기 있는 스크립트에는 자격 증명이나 호스트명이 박혀 있지 않다. 그대로 유지할 것.
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 으로 조작) |
- docs/CODE_REVIEW.md — 2019년 원본의 결함 10건과 수정 근거
- docs/vbscript-to-powershell.md — 관용구 변환표와 포팅 함정