Maxima's Lab

[Python] .bat 파일을 활용하여 공유 폴더 설정 및 해제(Windows) 본문

Python

[Python] .bat 파일을 활용하여 공유 폴더 설정 및 해제(Windows)

Minima 2024. 5. 10. 22:05
728x90
SMALL

안녕하세요, 오늘은 Windows 운영체제에서 .bat 파일을 활용하여 파이썬에서 공유 폴더 설정 및 해제 하는 방법에 대해서 알아보겠습니다.

 

공유 폴더 설정 및 해제를 위해 유의해야할 부분은 "관리자 권한"으로 실행해야한다는 부분입니다.

 

관리자 권한으로 실행하기 위해서 다음과 같이 .bat 파일을 구성해야 합니다.

 

@echo off

>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
set params = %*:"=""
echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B

:gotAdmin
pushd "%CD%"
CD /D "%~dp0"

{실행할 명령어}
pause

 

위의 .bat 파일에서 {실행할 명령어} 부분만 수정하면 됩니다.

 


위의 파일을 활용하여, 다음과 같이 코드를 수정합니다.

 

def create_admin_batch(script_name):
    batch_content = f"""
@echo off
>nul 2>&1 "%SYSTEMROOT%\\system32\\cacls.exe" "%SYSTEMROOT%\\system32\\config\\system"

if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\\getadmin.vbs"
set params = %*:"=""
echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\\getadmin.vbs"

"%temp%\\getadmin.vbs"
del "%temp%\\getadmin.vbs"
exit /B

:gotAdmin
pushd "%CD%"
CD /D "%~dp0"

{script_name}
pause
"""

    with open("run_as_admin.bat", "w") as file:
        file.write(batch_content)
    print("배치 파일이 생성 완료.")

 

위의 함수를 활용하여, 다음과 같이 관리자 권한으로 batch 파일을 실행 가능합니다.

import subprocess

def run_batch_file(batch_file_path):
    # 프롬프트가 보이지 않도록 설정
    si = subprocess.STARTUPINFO()
    si.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    si.wShowWindow = subprocess.SW_HIDE  # CMD 창을 숨깁니다.

    # subprocess.run을 사용하여 배치 파일 실행
    result = subprocess.run(batch_file_path, shell=True, text=True, capture_output=True, startupinfo=si)
    
    # 실행 결과 출력
    if result.returncode == 0:
        print("배치 파일이 성공적으로 실행되었습니다.")
        print("출력:", result.stdout)
    else:
        print("배치 파일 실행 중 오류가 발생했습니다.")
        print("오류 메시지:", result.stderr)

# 배치 파일 경로 지정
batch_file_path = 'run_as_admin.bat'

# 배치 파일 실행 함수 호출
run_batch_file(batch_file_path)

 


위의 2가지 함수를 활용하여 공유 폴더를 생성하는 함수를 실행할 수 있습니다.

 

import subprocess

def create_shared_folder(share_name, folder_path):
    # 공유명과 폴더 경로를 설정합니다.
    # /grant:everyone,full은 모든 사용자에게 전체 권한을 부여합니다.
    cmd = f'net share {share_name}="{folder_path}" /grant:everyone,full'
    
    create_admin_batch(cmd)
    
    # 배치 파일 경로 지정
    batch_file_path = 'run_as_admin.bat'

    # 배치 파일 실행 함수 호출
    run_batch_file(batch_file_path)
    
    

folder_path = "D:\\새로운 공유 폴더"
share_name = "MySharedFolder"
create_shared_folder(share_name, folder_path)

 


반대로 공유 폴더를 해제하는 함수를 실행할 수 있습니다.

 

import subprocess

def remove_shared_folder(share_name):
    cmd = f'net share {share_name} /delete'
    
    create_admin_batch(cmd)
    
    # 배치 파일 경로 지정
    batch_file_path = 'run_as_admin.bat'

    # 배치 파일 실행 함수 호출
    run_batch_file(batch_file_path)
    
    

share_name = "MySharedFolder"
remove_shared_folder(share_name)

 


지금까지, Windows 운영체제에서 .bat 파일을 활용하여 Python에서 공유 폴더를 설정 및 해제 하는 방법에 대해서 알아보았습니다.

감사드립니다.

728x90
LIST
Comments