2011-08-08 37 views
1

因此,我有以下scipt,当用户使用组策略中的注销脚本部分注销时运行(我想运行检查以查看它是否已经在特定计算机上运行过,如果它之前运行过我想脚本退出如果它没有那么我希望它运行的脚本和自己标记为“已运行”我怎么能做到这一点):?检查脚本是否已经在特定机器上运行过?

strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 

Set colInstalledPrinters = objWMIService.ExecQuery _ 
    ("Select * from Win32_Printer Where Network = TRUE") 

For Each objPrinter in colInstalledPrinters 
    objPrinter.Delete_ Next 
+0

简单地运行两次会出现什么问题?毕竟,如果你第二次运行它,它不会做任何坏事...... – Tomalak

+0

它删除所有的网络打印机。然后我有GPP,在登录时添加了一堆打印机。我不希望用户每次都必须重新选择默认打印机。不需要多次删除打印机。我们正在移动办公室,并拥有所有新打印机,因此我只需要在每台计算机上一次卸下打印机。 – user597875

+0

那么,简单地写一个锁定文件(或一些注册表项)作为脚本的最后一步,并将其作为第一步检查。当它在那里,你已经运行脚本,并可以立即退出。 – Tomalak

回答

1

我想通了。这里是修改后的脚本:

Option Explicit 

Dim oShell,strComputer,objWMIService,colInstalledPrinters,objPPrinter 

Private Function KeyExists (keyName) 
    Dim bKey 

    On Error Resume Next 

    bKey = oShell.RegRead(keyName) 

    If TypeName (bKey) = "Empty" Then 
     KeyExists = False 
    Else 
     KeyExists = True 
    End If 
End Function 



Set oShell = CreateObject("Wscript.Shell") 

If keyExists("HKEY_LOCAL_MACHINE\Software\CRusse\RemovePrinters") Then 
    wscript.quit 
Else 

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 

Set colInstalledPrinters = objWMIService.ExecQuery _ 
    ("Select * from Win32_Printer Where Network = TRUE") 

For Each objPrinter in colInstalledPrinters 
    objPrinter.Delete_ 
Next 
    oshell.RegWrite "HKEY_LOCAL_MACHINE\Software\CRusse\RemovePrinters", 1, "REG_SZ" 
End If 

Set oShell = Nothing 
相关问题