通过执行 Bat 文件重命名计算机

通过执行 Bat 文件重命名计算机

我正在尝试创建一个 FAST API,通过执行 bat 文件来更改系统名称。名称已更改,但不接受诸如-,和 之类的特殊字符'

我搜索了很多,但没有找到任何解决方案。我尝试执行 PowerShell 命令,但它要求管理员访问权限。

这是我的 bat 文件代码:

@ECHO OFF
### For Admin Previleges
set "params=%*"
cd /d "%~dp0" && ( if exist "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" ) && fsutil dirty query %systemdrive% 1>nul 2>nul || (  echo Set UAC = CreateObject^("Shell.Application"^) : UAC.ShellExecute "cmd.exe", "/k cd ""%~sdp0"" && %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" && "%temp%\getadmin.vbs" && exit /B )

set arg1=%1
set arg2=%2

wmic computersystem where caption='%arg1%' rename '%arg2%'

move nul 2>&0

下面是我的执行批处理文件的python代码:

def set_Computer_Name(computer_name : str):
    current_computer_name = platform.node()
    process = subprocess.run(['computer_name.bat', current_computer_name, computer_name])
    return {"status" : process.returncode}

我怎样才能解决这个问题?

答案1

如果你首先提升/以管理员身份运行你的 python 进程,那么你的子进程也会被提升。然后你就可以Rename-Computer正常运行,而不必尝试通过三种语言来管理特殊字符:

# python running as admin
process = subprocess.run(['powershell.exe', 'Rename-Computer', computer_name])

如果由于某种原因无法提升 python,则可以使用 powershell 而不是批处理来提升其自己的子进程:

process = subprocess.run([
  'powershell.exe', 
  'Start-Process powershell.exe -Verb runas', 
  '-ArgumentList { Rename-Computer -Newname', computer_name, '}'
])

需要明确特殊字符的是,Windows 计算机名称必须为字符a-zA-Z, 并且可能包括0-9-。不允许使用'或 之类的字符。,


当计算机加入 Windows 域时,基本提升的一个例外情况是。用户必须同时拥有本地管理员权限,对 AD 中的计算机对象的权限。通常只需使用本地管理员用户即可提升权限,因此我在此提及。

相关内容