2011-08-08 23 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

単純に2回実行すると何が問題になりますか?結局、それを2回実行すると何も悪いことはありません... – Tomalak

+0

すべてのネットワークプリンタが削除されます。それから私はGPPを持っていて、ログオン時にたくさんのプリンタを追加します。ユーザーが毎回デフォルトプリンタを再選択する必要はありません。プリンタを複数回取り外す必要はありません。私たちはオフィスを移転し、新しいプリンタをすべて持っているので、プリンタごとにプリンタを1回だけ取り外す必要があります。 – 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 
関連する問題