Chinaunix首页 | 论坛 | 博客
  • 博客访问: 310320
  • 博文数量: 65
  • 博客积分: 2570
  • 博客等级: 少校
  • 技术积分: 730
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 14:04
个人简介

苦逼房奴一枚

文章分类

全部博文(65)

文章存档

2017年(19)

2016年(5)

2013年(6)

2012年(1)

2011年(3)

2009年(5)

2008年(26)

我的朋友

分类: WINDOWS

2008-09-17 17:08:56

可以转载,请写明作者和出处,谢谢
 
附件里是已经编译好的程序。其实说白了就是一个dos下面for循环的一个使用,命令也会显示在一个listbox上,自己使用一下就会明白
 
 
 
 
文件: usermanagent.rar
大小: 60KB
下载: 下载
远程机器的登入验证使用wmi验证方式(我之前贴过,这里就不写了),本地帐号状态的的代码如下,已经启用的的帐号显示蓝色,禁用的帐号显示红色
 
        Dim processReturn As New Management.ManagementObject
        For Each processReturn In wmicommand("Select * from Win32_useraccount")
            Dim item As New ListViewItem()
            item.SubItems.Clear()
            item.UseItemStyleForSubItems = False
            item.SubItems(0).Text = (processReturn("name"))
            item.SubItems.Add(processReturn("domain"))
            item.SubItems.Add(processReturn("description"))
            If processReturn("status") = "OK" Then
                item.SubItems.Add(processReturn("status"), Color.Blue, Color.White, Font)
            Else
                item.SubItems.Add(processReturn("status"), Color.Red, Color.White, Font)
            End If
            ListView1.Items.Add(item)
        Next

 

右键菜单里的启用和禁用帐号是使用dos命令net user实现的,关键代码如下

        Dim a As String
        a = ListView1.SelectedItems.Item(0).Text
        Dim o As New Management.ObjectGetOptions()
        Dim path As Management.ManagementPath = New Management.ManagementPath("Win32_Process")
        Dim processClass As Management.ManagementClass = New Management.ManagementClass(_scope, path, o)
        Dim inParams As Management.ManagementBaseObject = processClass.GetMethodParameters("Create")
        inParams("CommandLine") = "cmd.exe /c net user " & a & " /active:yes"
        Dim outparams As Management.ManagementBaseObject = processClass.InvokeMethod("Create", inParams, Nothing)

 

另外执行完之后刷新一次,我就不重复贴了,有个要点,代码顺序执行,有时候刷新速度超快,所以你命令执行成功了,但是显示的状态不会改变,于是我在代码里增加了一句

       System.Threading.Thread.Sleep(10000)

执行批量修改本地密码是利用了微软提供的cusrmgr这个工具和dos下的一个for循环,验证过程使用当前系统帐号的验证方式,所以权限问题要搞清楚在执行

 Sub doscommand(ByVal Doscomm As String)
        Dim p As New Process
        p.StartInfo.FileName = "cmd.exe"
        p.StartInfo.UseShellExecute = False
        p.StartInfo.RedirectStandardInput = True
        p.StartInfo.RedirectStandardOutput = True
        p.StartInfo.RedirectStandardError = True
        p.StartInfo.CreateNoWindow = True

        p.Start()
        p.StandardInput.WriteLine(Doscomm)
        p.StandardInput.WriteLine("exit")
        Dim strrst As String
        Do
            strrst = p.StandardOutput.ReadLine()
            If Not (strrst Is Nothing) Then
                ListBox1.Items.Add(strrst)
            End If
        Loop While Not (strrst Is Nothing)


    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MsgBox("使用此功能请先检查cusrmgr.exe是否和软件放在同一个目录下,此外该工具使用的是当前系统身份验证,请确保身份验证问题,如是在域内使用,建议放在备用域控制器上")
        Dim dir As String
        dir = System.Environment.CurrentDirectory
        ListBox1.Items.Clear()

        Call doscommand("FOR /L %i IN (" & TextBox6.Text & "," & TextBox3.Text & "," & TextBox9.Text & ") DO " & dir & "\cusrmgr.exe -u " & TextBox10.Text & " -m \\" & TextBox1.Text & "." & TextBox4.Text & "." & TextBox5.Text & ".%i  -r " & TextBox11.Text & " -P " & TextBox12.Text & ">>" & dir & "\log.txt")
        MsgBox("执行日志存放在" & dir & "目录下")
    End Sub

 


阅读(2324) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~