公司最近新采购了一批笔记本,为后期加域等需求,需要每个电脑不重名。
另外还有其他需求,可以在监控平台和资产系统打通以后通过获取到的计算机名定位到人,于是有了这个东西。
两种实现方式,一是通过bat调用ps1,二是单个bat实现。
分别说一下。
一、bat调用ps1改名(注意修改文件中路径)
bat:
@echo off
:: Get Administrator Rights
set _Args=%*
if "%~1" NEQ "" (
set _Args=%_Args:"=%
)
fltmc 1>nul 2>nul || (
cd /d "%~dp0"
cmd /u /c echo Set UAC = CreateObject^("Shell.Application"^) : UAC.ShellExecute "cmd.exe", "/k cd ""%~dp0"" && ""%~dpnx0"" ""%_Args%""", "", "runas", 1 > "%temp%\GetAdmin.vbs"
"%temp%\GetAdmin.vbs"
del /f /q "%temp%\GetAdmin.vbs" 1>nul 2>nul
exit
)
@set Path=%Path%;%SystemRoot%\system32\WindowsPowerShell\v1.0\& powershell -ExecutionPolicy Unrestricted "X:\x\renamesn.ps1"
del X:\x\sn.txt
::del %0
exit
ps1(建议放在%temp%下):
wmic bios get serialnumber > sn.txt
$sn = (Get-Content sn.txt -TotalCount 3)[-1] -replace "(?m)\s",""
Rename-Computer -NewName $sn
exit
二、单个bat直接实现:
@echo off
setlocal enabledelayedexpansion
REM 获取笔记本电脑的序列号
for /f "tokens=2 delims==" %%a in ('wmic csproduct get identifyingnumber /value') do (
set "serial_number=%%a"
)
REM 设置计算机名为序列号
wmic computersystem where name="%COMPUTERNAME%" call rename name="%serial_number%"
echo 计算机名已设置为 %serial_number%
::del %0
exit