VBScript WSHell.Run多个进程

时间:2011-07-29 16:58:40

标签: vbscript wsh

有谁知道如何完成以下任务: 我有一个脚本将运行并从AD中获取分配了homedir的所有用户,并重置此文件夹及其下的所有内容的权限。问题是,它需要很长时间才能完成,如果我没有为等待返回true设置.run变量,我最终会运行数千个cacls进程。我想将进程数限制为50,一旦一个进程完成,就转到下一个用户。脚本非常简单:

' Get Users Home Directories from AD
' Then grant Administrators FULL CONTROL and the USER MODIFY ONLY
'
Set WshShell = WScript.CreateObject("WScript.Shell")
'
' Get users with home directories
WScript.Echo "Retrieving user account names and home directories from active directory. . ."
Set objWMIService = GetObject("winmgmts:root\directory\ldap")
Set colItems = objWMIService.ExecQuery("Select ds_sAMAccountName, ds_homeDirectory From ds_user WHERE ds_homeDirectory IS NOT NULL")

WScript.Echo ""

' Loop through users setting permissions
For Each oUser in colItems
    WScript.Echo "Setting permissions for " & oUser.ds_sAMAccountName & " Directory " & oUser.ds_homeDirectory
    WshShell.Run "xcacls " & oUser.ds_homeDirectory & " /y /t /g Administrators:F", 0, True
    WshShell.Run "xcacls " & oUser.ds_homeDirectory & " /e /t /g " & oUser.ds_sAMAccountName & ":C", 0, True
Next

有谁知道我该怎么做?

由于

编辑:::: 我想我弄清楚了......

For Each oUser in colItems
    numrunning = HowMany
    while numrunning > 25
        WScript.Echo "Waiting for other processes to finish"
        WScript.Sleep 10000
        numrunning = HowManyRunning
    wend
    WScript.Echo "Setting permissions for " & oUser.ds_sAMAccountName & " Directory " & oUser.ds_homeDirectory
    WshShell.Run "xcacls " & oUser.ds_homeDirectory & " /y /t /g Administrators:F", 0, False
    WshShell.Run "xcacls " & oUser.ds_homeDirectory & " /e /t /g " & oUser.ds_sAMAccountName & ":C", 0, False
Next

Function HowManyRunning()
  Dim Proc1,Proc2,Proc3
  Set Proc1 = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
  Set Proc2 = Proc1.ExecQuery("select * from win32_process" )
  HowMany=0
  For Each Proc3 in Proc2
    If LCase(Proc3.Caption) = "xcacls.exe" Then
      HowMany=HowMany + 1
    End If
  Next
End Function

0 个答案:

没有答案