37 lines
1.4 KiB
Python
37 lines
1.4 KiB
Python
from __future__ import annotations
|
|
|
|
import argparse
|
|
from pathlib import Path
|
|
|
|
|
|
def _validate_batch_input(value: str) -> str:
|
|
suffix = Path(value).suffix.lower()
|
|
if suffix not in {".csv", ".xlsx"}:
|
|
raise argparse.ArgumentTypeError("batch 输入文件仅支持 .csv 或 .xlsx")
|
|
return value
|
|
|
|
|
|
def build_parser() -> argparse.ArgumentParser:
|
|
parser = argparse.ArgumentParser(description="AD 用户自动化创建工具")
|
|
parser.add_argument("--config", default="config/config.yaml", help="yaml 配置文件路径")
|
|
|
|
subparsers = parser.add_subparsers(dest="command", required=True)
|
|
|
|
interactive_parser = subparsers.add_parser("interactive", help="交互式创建 AD 用户")
|
|
interactive_parser.add_argument("--dry-run", action="store_true", help="仅演练,不写入 LDAP")
|
|
|
|
batch_parser = subparsers.add_parser("batch", help="批量创建 AD 用户")
|
|
batch_parser.add_argument("--input", required=True, type=_validate_batch_input, help="输入文件(.csv/.xlsx)")
|
|
batch_parser.add_argument("--dry-run", action="store_true", help="仅演练,不写入 LDAP")
|
|
batch_parser.add_argument(
|
|
"--continue-on-error",
|
|
choices=["true", "false"],
|
|
default="true",
|
|
help="遇错是否继续处理后续行",
|
|
)
|
|
|
|
init_parser = subparsers.add_parser("init-state", help="初始化状态文件")
|
|
init_parser.add_argument("--dry-run", action="store_true", help="仅打印,不落盘")
|
|
|
|
return parser
|