github地址:alittlemc/toy: 編寫些指令碼將運維經常所用到小玩意所整合在一起 (github.com)
名字叫toy吧,沒有啥技術含量,幫不了大忙,但是可以作為在一旁遞工具的小弟,還是可減少自己一定的工作量的,畢竟有一些太長的命令也不是很好記憶的,Windows按tab又不出提示!
持續更新!
做過桌面運維的大佬們應該可以很明顯感受到這份工作所需要的技能不高,但是內容很雜,很煩索,有時候內容重複性很多,同時也很浪費運維人員的寶貴青春,時間久了對這份工作就產生了厭惡的情緒,人覺得不爽。今天心血來潮寫一份指令碼(今天10月4日我以為要加班,就來辦公室了,結果空無一人,乾脆閒來無事寫一下)。隨便分享一下桌面運維需要學會的一些命令。
桌面運維大部分是和系統打交道。
模擬一下背景,現在有一些企業是配備Windows電腦使用AD域來集中的管理電腦使用者。也就是每一次當有新電腦需要使用時候,除了設定賬號密碼、分割區、安裝作業系統等等步驟,還需要給新設定AD域、安裝標準化的軟體等等操作。
具體的步驟有:
大致可以分為這兩步,其中最麻煩的一步就是在電腦現場設定,電腦批次安裝軟體要登入到域賬號中安裝軟體,因為域賬號沒有安裝軟體的許可權,所以需要切換的原生的.\administrator賬號的身份去安裝。對著安裝程式按Shift選擇其他賬戶登入,才可安裝,每一次安裝新的程式還要重新登入,浪費了大量時間。
圖1.郵件以其他使用者執行
再加上桌面運維和系統打交道,有一些故障其實其實都是類似的,比如需要重新啟動網路卡才可以解決、需要重置輸入法、需要重置網路設定等等解決方法。
又或者是命令太多,功能太多,比如登入檔經常用,regedit的啟動命令就還記得,但是組策略、系統元件用得比較少的一點陌生記不住。如果可以寫個指令碼,把這些問題的解決方法都整合到一起,遇到問題一步到位那麼解決問題就很方便了。
於是我想寫一個專案toy,把我在運維上遇到問題整理來解決:
圖2.WindowsToy目前擁有的功能
其實初衷很簡單,就是可以輔助運維人員快速解決問題或者當個遞工具的小弟也可以。
這個指令碼是使用bat編寫的,之前使用if else語句來生成全部,發現經常有bug,乾脆就使用程式設計的流氓goto來實現,目前使用goto來實現,效果類似於switch case的效果。 話說bat真的無語啊,經常有錯的地方,比如for內的需要括號跳脫,bat相比於python、lua之類的指令碼語言不適合作為開發,但是奈何目前桌面運維遇到的大部分都是接觸到Windows的多,插個U盤直接雙擊直接可以使用bat,不需要設定安裝python、lua的解釋環境,所以嘛,也只好大概講究一下。
也許你經常遇到一些情況,win+r開啟cmd視窗,鍵入一些命令執行,然後提示許可權不夠,一般情況我們都可以在右鍵「以管理員方式執行」,但是也可以使用命令來實現:
net user administrator /active:yes
net user administrator cmd
當然,這裡的命令可以靈活點使用,使用其他使用者將administrator修改即可。
有時候Windows不知道發生了啥情況,網路無法使用,就連重新啟動大法都不管用了,這時候可以嘗試重置網路設定
netsh winsock reset
輸入法有時候也不知道藏哪去了,打字也不出來,重置一下吧。
ctfmon
就像之前說的,因為域賬號沒有安裝軟體的許可權,所以需要切換的原生的.\administrator賬號的身份去安裝,但是每一個安裝程式安裝都要輸入一次賬號密碼。
我寫了個小指令碼來實現,對當前目錄(即可bat所在或者執行所在目錄)下的常見可執行程式字尾進行安裝開啟。只需要第一次切換為administrator賬號,後面的軟體包都會使用administrator許可權進行安裝。
for %%f in (*.msu,*.msi,*.exe) do ( start /wait %%f )
設定主機名,方便DHCP和DNS伺服器管理
netdom.exe renamecomputer %COMPUTERNAME% /newname:域地址
@echo off echo %~0 by alittlemc;version 1.0;updatetime 2022-10-04 午 echo hostname %COMPUTERNAME%;user %USERNAME% :start0 echo ----------====start====---------- echo ID NOTES echo 00 退出 echo 0 切換到administrator執行 echo 0a 切換到指定使用者執行 echo 1 重置網路設定 echo 2 修復輸入法 echo 3 清空回收站 echo 4 批次安裝%~dp0目錄下全部*.msu,*.msi,*.exe可執行檔案 echo 5 重命計算機名字 echo 6 新電腦設定域 echo 6a 老電腦修改域 echo. set dev=裝置管理器(devmgmt.msc) set reg=登入檔(regedit) set dco=系統元件(dcomcnfg) set com=計算機管理(compmgmt.msc) set mst=遠端桌面(mstsc) set cle=磁碟清理(cleanmgr) set lus=本機使用者/組(lusrmgr.msc) set osk=螢幕鍵盤(osk) set info=顯示系統資訊 set win=檢查Windows系統(winver) set fsm=共用資料夾管理(fsmgmt.msc) set gpe=組策略(gpedit.msc) set uti=輔助功能(utilman) set off=登出(logoff) echo =其他= echo 01 %dev% echo 02 %reg% echo 03 %dco% echo 04 %com% echo 05 %mst% echo 06 %cle% echo 07 %lus% echo 08 %osk% echo 09 %win% echo 10 %fsm% echo 11 %gpe% echo 12 %uti% echo off %off% echo info %info% ::echo systemreset 重置Windows ::echo systemreset-cleanpc 更新並重置Windows echo. set /p sr=請輸入需要的功能ID: goto %sr% 2>nul||echo 未匹配到的ID&%~0%&pause>nul :0 echo get administrator net user administrator /active:yes echo administrator goto start :0a set /p user=輸入使用者名稱: echo change %user% net user %user% /active:yes echo %user% goto start :00 exit goto start :1 echo 重置網路設定(netsh winsock reset) set y=<nul set /p y=確認重置網路?(y/n) if %y%==y (netsh winsock reset) set y=<nul goto start :2 echo 修復輸入法(ctfmon) ctfmon goto start :3 echo 清空回收站 set y=<nul set /p y=確認清空回收站?(y/n): if %y%==y ( ::清空Win7/Win8回收站 for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do ( if exist %%a: ( del /f /s /q "%%a:$recycle.bin*.*" >nul 2>nul ) ) ::清空XP回收站 del /f /s /q "%systemdrive% ecycled*.*" >nul 2>nul echo 清空回收站完成! ) else (echo no) set y=<nul goto start :4 setlocal enabledelayedexpansion echo 批次安裝 set y=<nul set /p "y=安裝當前目錄中可執行程式?(y/n)" for %%f in (*.msu,*.msi,*.exe) do ( start /wait %%f ) ::子目錄也安裝/R 預設安裝/s set y=<nul goto start :5 :rename set y=<nul echo 當前的主機名:%COMPUTERNAME% set /p id=請輸入新主機名: set /p y=確認將%COMPUTERNAME%修改為%id%?(y/n/r) if %y%==r (goto rename) if %y%==y (netdom.exe renamecomputer %COMPUTERNAME% /newname: %id%) echo 當前的主機名:%COMPUTERNAME% goto start :6 :redomain set /p domain=請輸入AD域名: set /p y=確認將域更新為%domain%?(y/n/r) if %y%==r (goto redomain) if %y%==y (netdom join %COMPUTERNAME% /DOMAIN:%domain%) ::/UserD:%user%(使用者帳號) /PasswordD:%passwd%(使用者密碼) goto start :info hostname wmic baseboard list brief wmic bios get serialnumber ::wmic nic get macaddress wmic cpu get caption, name, deviceid, numberofcores, maxclockspeed, status wmic memorychip get banklabel,devicelocator,capacity,speed wmic computersystem get totalphysicalmemory wmic computersystem get caption,dnshostname,model,systemtype wmic nic list brief wmic diskdrive get model,size wmic logicaldisk get name,size :wmic partition get name,size,type wmic ntdomain get caption,dnsforestname,domaincontrolleraddress,domaincontrollername,status goto start ::其他 :01 echo %dev% devmgmt.msc goto start :02 echo %reg% regedit goto start :03 echo %dco% dcomcnfg goto start :04 echo %com% compmgmt.msc goto start :05 echo %mst% mstsc goto start :06 echo %cle% fsmgmt.msc goto start :07 echo %lus% lusrmgr.msc goto start :08 echo %osk% osk goto start :09 echo %win% winver goto start :10 echo %fsm% fsmgmt.msc goto start :11 echo %gpe% gpedit.msc goto start :12 echo %uti% utilman goto start :off set y=<nul set /p y=確認登出?(y/n): if %y%==y (logoff) set y=<nul goto start :start echo -----------====end====----------- echo. goto start0 pause>nul
目前還在github更新中!
alittlemc/toy: 編寫些指令碼將運維經常所用到小玩意所整合在一起 (github.com)