我正在尝试创建一个 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 中的计算机对象的权限。通常只需使用本地管理员用户即可提升权限,因此我在此提及。