qoozen
初级用户
积分 22
发帖 7
注册 2008-1-20
状态 离线
|
『楼 主』:
請教 (一) ....
各位好,我剛學寫CMD的腳本,從這個論壇學到不小關於這方面的使用技巧,
先謝過各高手的之前的文章(獲益良多)...在此有這問題想請教一下大家一些問題..
處境:
我是一個Desktop support來的,有時懶得很就會想寫一些cmd腳本去處理問題...
例如好像我最近想實現一個腳本就是可以遠端幫用戶加Network printer,
我的概念是只知道電腦名稱(IP也可以), Printer 的號碼 (我工作環境很搞笑的...Printer Name就是用一些Barcode來設定,但公司又經常改動設定名稱的方式,有時會加些數字,有時又會加個英文字,一個printer又有多個print Q ,而且又有2個Print server,有些會在Printerserver01有些則在02)
基本上這些問題在腳本中我都已經解決了, 但是就是如何幫遠端的用戶加裝Network Printer 而煩惱,之前找到個指令 rundll32.exe printui.dll, PrintUIEntry /il /c\\pc name /n\\server name\printer name來實現,但又不知如何用rundll32.exe printui.dll根本執行不到遠端加裝的功能,那唯有在Red Add入手,用上reg QUERY來取得當前用戶的SID,取改動HKU裡面的Printers\Connections來實現加裝的功能.....但問題又出現了,因為Windows如果多一個用戶登陸就會產生多個SID在HKU裡, 執行我的腳本後根本不能準確地加裝到正確的用戶中...我只能做到排除localadmin的SID,不是高手們有沒有方法能實現這個功能呢 ?
以下是小弟的腳本,順便高手們看看有沒有能簡化或改進的地方....
@Echo off
TITLE Remote Add printer
setlocal enabledelayedexpansion
Echo.
Set 'PC'=''
Set 'BC'=''
Set 'result'=''
Set /p PC= PC Name :
Set /p BC= Printer Barcode : BC
Ping -n 1 %PC%>nul >2 >nul || Echo Can't PING %PC% && pause && goto :eof
:A
for %%i in (01,02) do (
for /f %%b in ('net view \\PrinterServer%%i ^| find "%BC%"') do (
Set /A result+=1
if !result! == 1 Set P1=\\PrinterServer%%i\%%b
if !result! == 2 Set P2=\\PrinterServer%%i\%%b
if !result! == 3 Set P3=\\PrinterServer%%i\%%b
)
)
echo.
if '%P1%' == '' (
echo No Printer Find in Printer Server & goto :End
) else (
echo [ 1 ] -- %P1%
)
if not '%P2%' == '' echo [ 2 ] -- %P2%
if not '%P3%' == '' echo [ 3 ] -- %P3%
:B
Set /p AA=Please choice the printer :
if %AA% gtr %result% echo "error !!" & goto :B
if %AA% == 1 Set AA=%P1%
if %AA% == 2 Set AA=%P2%
if %AA% == 3 Set AA=%P3%
:C
for /f %%e in ('reg QUERY \\%PC%\HKU') do (
for /f "eol= tokens=10,11 delims=\-_ " %%n in ("%%e") do (
if not %%n == 500 (
if '%%o' == '' Set SID=%%e
)
)
)
Echo.
Echo Add %AA% to %PC%
Reg Add \\%PC%\!SID:_Classes=!\Printers\Connections\%AA:\=,% /v Server /t REG_MULTI_SZ /d %AA:~0,13%
Reg Add \\%PC%\!SID:_Classes=!\Printers\Connections\%AA:\=,% /v Provider /t REG_MULTI_SZ /d win32spl.dll>nul >2 >nul
:End
echo Done...
Pause & goto :eof
[ Last edited by qoozen on 2008-1-20 at 06:48 PM ]
|
|