中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 請教 (一) .... 上一主题 | 下一主题
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 ]

2008-1-20 18:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: