vbs脚本大全,配有实例 DOS命令,批处理 脚本 代码
程序员文章站
2022-03-20 14:06:38
vbs 取得本机ip strcomputer = "." set objwmiservice = getobject("wi...
vbs
取得本机ip
strcomputer = "."
set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")
set ipconfigset = objwmiservice.execquery("select ipaddress from
win32_networkadapterconfiguration where ipenabled=true")
for each ipconfig in ipconfigset
if not isnull(ipconfig.ipaddress) then
for each straddress in ipconfig.ipaddress
wscript.echo straddress
next
end if
next
2 取得本机计算机名
strcomputer = "."
set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")
set colcomputers = objwmiservice.execquery("select * from win32_computersystem")
for each objcomputer in colcomputers
wscript.echo objcomputer.name
next
4 检查升级包
strcomputer = "."
set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")
set coloperatingsystems = objwmiservice.execquery("select * from win32_operatingsystem")
for each objoperatingsystem in coloperatingsystems
wscript.echo objoperatingsystem.servicepackmajorversion & "." &
objoperatingsystem.servicepackminorversion
next
5 检查 hot fix
strcomputer = "."
set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")
set colquickfixes = objwmiservice.execquery ("select * from win32_quickfixengineering")
for each objquickfix in colquickfixes
wscript.echo "description: " & objquickfix.description
wscript.echo "hot fix id: " & objquickfix.hotfixid
next
6 检查本地管理员数目
set objnetwork = createobject("wscript.network")
strcomputer = objnetwork.computername
set objgroup = getobject("winnt://" & strcomputer & "/administrators,group")
for each objuser in objgroup.members
wscript.echo objuser.name
next
7 磁盘系统
strcomputer = "."
set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")
set coldisks = objwmiservice.execquery("select * from win32_logicaldisk where drivetype =
3")
for each objdisk in coldisks
wscript.echo "disk drive: "& objdisk.deviceid & " -- " & objdisk.filesystem
next
8 检测自动登录是否开启
const hkey_local_machine = &h80000002
strcomputer = "."
set objreg=getobject("winmgmts:\\" & strcomputer & "\root\default:stdregprov")
strkeypath = "software\microsoft\windows nt\currentversion\winlogon"
strvaluename = "autoadminlogon"
objreg.getdwordvalue hkey_local_machine, strkeypath, strvaluename,dwvalue
if dwvalue = 1 then
wscript.echo "auto logon is enabled."
else
wscript.echo "auto logon is disabled."
end if
9 关闭自动登录
const hkey_local_machine = &h80000002
strcomputer = "."
set objreg=getobject("winmgmts:\\" & strcomputer & "\root\default:stdregprov")
strkeypath = "software\microsoft\windows nt\currentversion\winlogon"
strvaluename = "autoadminlogon"
dwvalue = 0
oreg.setdwordvalue hkey_local_machine, strkeypath, strvaluename, dwvalue
10 检查guest是否禁用
set objnetwork = createobject("wscript.network")
strcomputer = objnetwork.computername
set objuser = getobject("winnt://" & strcomputer & "/guest")
if objuser.accountdisabled then
wscript.echo "the guest account is disabled."
else
wscript.echo "the guest account is enabled."
end if
11 关闭guest
set objnetwork = createobject("wscript.network")
strcomputer = objnetwork.computername
set objuser = getobject("winnt://" & strcomputer & "/guest")
if objuser.accountdisabled then
wscript.echo "the guest account is already disabled."
else
objuser.accountdisabled = true
objuser.setinfo
wscript.echo "the guest account has been disabled."
end if
12 检索本地共象
strcomputer = "."
set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")
set colshares = objwmiservice.execquery("select * from win32_share")
for each objshare in colshares
wscript.echo "name: " & objshare.name
wscript.echo "path: " & objshare.path
wscript.echo "type: " & objshare.type
next
13 脚本检索一个文件夹下.txt文件 汗哦 值得学习
set objwmiservice = getobject("winmgmts:\\.\root\cimv2")
set colfiles = objwmiservice.execquery("select * from cim_datafile where path = '\\documents
and settings\\administrator\\桌面\\' and drive = 'e:' and extension = 'txt'")
wscript.echo "number of .txt files found: " & colfiles.count
for each aa in colfiles
nl=nl & vbcrlf & aa.name
next
wscript.echo nl
14 我如何向用户显示一个用来选择文件的对话框?
问:
嗨,scripting guy!有没有什么方法可以让我使用脚本向用户显示一个对话框,供用户选择文件使用?
-- bf
答:
您好,bf。如果您使用的是 windows 2000,我们不知道实现此操作的方法,至少操作系统中没有内置这
样的方法。但如果您使用的是 windows xp,情况就不同了。在 windows xp 上,您可以使用
“useraccounts.commondialog”对象向用户显示一个标准的“文件打开”对话框。可以用类似以下代码
的脚本:
set objdialog = createobject("useraccounts.commondialog")
objdialog.filter = "all files|*.*" objdialog.initialdir = "c:\" intresult =
objdialog.showopen
if intresult = 0 then wscript.quit else wscript.echo objdialog.filename end if
这是一个小脚本,所以让我们逐行进行解释吧。我们首先创建一个对 useraccounts.commondialog 对象
的对象引用(名为“objdialog”)。接着,我们设置对话框的“筛选”属性。我们要显示所有文件,所
以我们将筛选设置成这样:
objdialog.filter = "all files|*.*"
假如我们只想显示文本文件,那该怎么办?在这种情况下,我们将使用以下筛选:
objdialog.filter = "text files|*.txt"
您也许能够看出它是如何运行的:我们为文件类型提供说明 (text files),然后插入一个竖线分隔符
(|),最后使用标准的通配符来指示所有 .txt 文件 (*.txt)。是不是想默认显示 .txt 文件,然后为用
户提供查看所有文件的选项?那么可以使用以下代码:
objdialog.filter = "text files|*.txt|all files|*.*"
试一试,您就明白我们的意思了。
然后,我们指定默认文件夹。默认情况下,我们希望对话框显示位于驱动器 c 的根文件夹中的文件,所
以我们这样设置“initialdir”属性:
objdialog.initialdir = "c:\"
希望显示 c:\windows 文件夹中的文件吗?那么可以使用以下代码:
objdialog.initialdir = "c:\windows"
不必担心:这是一个真正的“文件打开”对话框,所以您可以随意单击,并且可以随时停下来。您从
c:\windows 开始并不意味着您只能打开该文件夹中的文件。
最后,我们使用下面这行代码显示对话框:
intresult = objdialog.showopen
现在,我们只需坐下来,等待用户选择文件并单击“确定”(或者等待用户单击“取消”)。如果用户单
击“取消”,则变量 intresult 将被设置为 0。在我们的脚本中,我们检查 intresult 的值,如果是 0
,我们将只需要使用 wscript.quit 来终止此脚本。
但是如果用户实际上选择了文件并单击了“确定”,那该怎么办?在这种情况下,intresult 将被设置为
-1,“filedialog”属性将被设置为所选文件的路径名。我们的脚本只回显路径名,这意味着我们将得到
类似以下内容的输出:
c:\windows\prairie wind.bmp
不用说,您并不局限于只回显文件路径。实际上,您可以使用 wmi、filesystemobject 或一些其他技术
来绑定该文件,然后对其执行删除、复制、压缩或检索文件属性等操作 — 您对文件能够执行的操作差不
多都可以对它执行。
但无论如何,您都需要使用脚本。
顺便说一句,使用此方法,您一次只能选择一个文件,而不能按住“ctrl”键选择多个文件。有一种方法
可以选择多个文件,至少在 xp 计算机上可以,但是我们只能将此问题留到以后的专栏中讨论了。
15 我如何确定进程是在哪个帐户下运行的?
问:
嗨,scripting guy!我有一个脚本,它返回关于计算机上运行的所有进程的信息,只是我不知道如何获
得这些进程在其下运行的用户帐户的名称。您可以帮助我吗?
-- dl
答:
您好,dl。是的,我们可以帮助您。确定进程是在哪个帐户下运行的,实际上相当简单,只是如何着手执
行此操作并不是特别显而易见的。如果您与大多数人一样,那么您可能会通过扫描 win32_process 类的
属性来查找名为 account 或 username 或类似的属性。您很有可能找不到。出现这种情况的原因是:
win32_process 没有可以告诉您进程在哪个帐户下运行的属性。
您需要使用“getowner”方法来捕捉此信息。下面这个脚本可以告诉您 microsoft word (winword.exe)
在哪个帐户下运行:
strcomputer = "."set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")
set colprocesslist = objwmiservice.execquery _ ("select * from win32_process where name =
'winword.exe'")
for each objprocess in colprocesslist objprocess.getowner strusername, struserdomain
wscript.echo "process " & objprocess.name & " is owned by " _ & struserdomain & "\" &
strusername & "."next
我们最感兴趣的是下面这行代码:
objprocess.getowner strnameofuser, struserdomain
我们在此所做的就是调用“getowner”方法。getowner 返回两个“输出参数”,一个返回负责该进程的
用户的名称,一个返回该用户所属的域。为捕获这两个输出参数,我们需要为 getowner 方法提供两个变
量。在这个示例脚本中,我们使用了两个分别叫做 strusername 和 struserdomain 的变量。名称可以随
意选择;您可以将变量称为 a 和 b 或 x 和 y 或任何其他您想要的名称。
不过,变量的顺序不能随意设置:返回的第一个值总是用户名,第二个值总是域。这意味着,如果您希望
用 x 表示用户名,用 y 表示域,那么您要确保您的代码像下面这行代码一样:
objprocess.getowner x, y
调用 getowner 之后,我们就可直接回显进程名和所有者。请注意,我们可以稍微来点儿花样儿 – 使用
域\用户格式。这样,我们就可以回显类似于“fabrikam\kenmyer”的名称。
下面附带提供了另一个脚本,该脚本可以列出计算机上的所有进程以及各个进程的所有者:
strcomputer = "."set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")
set colprocesslist = objwmiservice.execquery _ ("select * from win32_process")
for each objprocess in colprocesslist objprocess.getowner strusername, struserdomain
wscript.echo "process " & objprocess.name & " is owned by " _ & struserdomain & "\" &
strusername & "."next
可能有人感到奇怪,2005 年 1 月 3 日正好是 microsoft 员工的正式休息日。那么今天为什么会有“嗨
,scripting guy!”专栏?这只能是由于 microsoft 脚本专家表现出来的对工作的难以置信的奉献和投
入精神。或者,也可能是由于某个脚本专家 – 还说不出他或她的名字 – 没有意识到今天是假日,所以
照常来了(而且是在早上 7 点啊!)。
16 可以将脚本的输出复制到剪贴板吗?
问:
嗨,scripting guy!有办法将脚本输出复制到剪贴板吗?
-- zw, marseilles, france
答:
您好,zw.如果您不介意用一些疯狂的解决方法,那么实际上将脚本输出复制到剪贴板相当容易。首先,
您需要构造一个字符串,其中包含想要的输出。然后,创建 internet explorer 的一个实例,然后在其
中打开一个空白页。接着,利用 internet explorer 对象模型的内置功能,将字符串复制到剪贴板;特
别是, 可以使用 clipboarddata.setdata 方法来实现这个技巧。将某些数据复制到剪贴板的示例脚本如
下:
strcopy = "this text has been copied to the clipboard."
set objie = createobject("internetexplorer.application")
objie.navigate("about:blank")
objie.document.parentwindow.clipboarddata.setdata "text", strcopy
objie.quit
运行脚本,然后打开 notepad,然后单击“粘贴”;应该可以看到所复制的字符串。
顺便说一下,所有这一切都是在“幕后”发生的,internet explorer 并不会真的出现在屏幕上。这是因
为,在默认情况下,通过脚本创建的任何 ie 实例在运行时都是隐藏的,除非您利用如下语句将其显示出
来:
objie.visible = true
取得本机ip
strcomputer = "."
set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")
set ipconfigset = objwmiservice.execquery("select ipaddress from
win32_networkadapterconfiguration where ipenabled=true")
for each ipconfig in ipconfigset
if not isnull(ipconfig.ipaddress) then
for each straddress in ipconfig.ipaddress
wscript.echo straddress
next
end if
next
2 取得本机计算机名
strcomputer = "."
set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")
set colcomputers = objwmiservice.execquery("select * from win32_computersystem")
for each objcomputer in colcomputers
wscript.echo objcomputer.name
next
4 检查升级包
strcomputer = "."
set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")
set coloperatingsystems = objwmiservice.execquery("select * from win32_operatingsystem")
for each objoperatingsystem in coloperatingsystems
wscript.echo objoperatingsystem.servicepackmajorversion & "." &
objoperatingsystem.servicepackminorversion
next
5 检查 hot fix
strcomputer = "."
set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")
set colquickfixes = objwmiservice.execquery ("select * from win32_quickfixengineering")
for each objquickfix in colquickfixes
wscript.echo "description: " & objquickfix.description
wscript.echo "hot fix id: " & objquickfix.hotfixid
next
6 检查本地管理员数目
set objnetwork = createobject("wscript.network")
strcomputer = objnetwork.computername
set objgroup = getobject("winnt://" & strcomputer & "/administrators,group")
for each objuser in objgroup.members
wscript.echo objuser.name
next
7 磁盘系统
strcomputer = "."
set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")
set coldisks = objwmiservice.execquery("select * from win32_logicaldisk where drivetype =
3")
for each objdisk in coldisks
wscript.echo "disk drive: "& objdisk.deviceid & " -- " & objdisk.filesystem
next
8 检测自动登录是否开启
const hkey_local_machine = &h80000002
strcomputer = "."
set objreg=getobject("winmgmts:\\" & strcomputer & "\root\default:stdregprov")
strkeypath = "software\microsoft\windows nt\currentversion\winlogon"
strvaluename = "autoadminlogon"
objreg.getdwordvalue hkey_local_machine, strkeypath, strvaluename,dwvalue
if dwvalue = 1 then
wscript.echo "auto logon is enabled."
else
wscript.echo "auto logon is disabled."
end if
9 关闭自动登录
const hkey_local_machine = &h80000002
strcomputer = "."
set objreg=getobject("winmgmts:\\" & strcomputer & "\root\default:stdregprov")
strkeypath = "software\microsoft\windows nt\currentversion\winlogon"
strvaluename = "autoadminlogon"
dwvalue = 0
oreg.setdwordvalue hkey_local_machine, strkeypath, strvaluename, dwvalue
10 检查guest是否禁用
set objnetwork = createobject("wscript.network")
strcomputer = objnetwork.computername
set objuser = getobject("winnt://" & strcomputer & "/guest")
if objuser.accountdisabled then
wscript.echo "the guest account is disabled."
else
wscript.echo "the guest account is enabled."
end if
11 关闭guest
set objnetwork = createobject("wscript.network")
strcomputer = objnetwork.computername
set objuser = getobject("winnt://" & strcomputer & "/guest")
if objuser.accountdisabled then
wscript.echo "the guest account is already disabled."
else
objuser.accountdisabled = true
objuser.setinfo
wscript.echo "the guest account has been disabled."
end if
12 检索本地共象
strcomputer = "."
set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")
set colshares = objwmiservice.execquery("select * from win32_share")
for each objshare in colshares
wscript.echo "name: " & objshare.name
wscript.echo "path: " & objshare.path
wscript.echo "type: " & objshare.type
next
13 脚本检索一个文件夹下.txt文件 汗哦 值得学习
set objwmiservice = getobject("winmgmts:\\.\root\cimv2")
set colfiles = objwmiservice.execquery("select * from cim_datafile where path = '\\documents
and settings\\administrator\\桌面\\' and drive = 'e:' and extension = 'txt'")
wscript.echo "number of .txt files found: " & colfiles.count
for each aa in colfiles
nl=nl & vbcrlf & aa.name
next
wscript.echo nl
14 我如何向用户显示一个用来选择文件的对话框?
问:
嗨,scripting guy!有没有什么方法可以让我使用脚本向用户显示一个对话框,供用户选择文件使用?
-- bf
答:
您好,bf。如果您使用的是 windows 2000,我们不知道实现此操作的方法,至少操作系统中没有内置这
样的方法。但如果您使用的是 windows xp,情况就不同了。在 windows xp 上,您可以使用
“useraccounts.commondialog”对象向用户显示一个标准的“文件打开”对话框。可以用类似以下代码
的脚本:
set objdialog = createobject("useraccounts.commondialog")
objdialog.filter = "all files|*.*" objdialog.initialdir = "c:\" intresult =
objdialog.showopen
if intresult = 0 then wscript.quit else wscript.echo objdialog.filename end if
这是一个小脚本,所以让我们逐行进行解释吧。我们首先创建一个对 useraccounts.commondialog 对象
的对象引用(名为“objdialog”)。接着,我们设置对话框的“筛选”属性。我们要显示所有文件,所
以我们将筛选设置成这样:
objdialog.filter = "all files|*.*"
假如我们只想显示文本文件,那该怎么办?在这种情况下,我们将使用以下筛选:
objdialog.filter = "text files|*.txt"
您也许能够看出它是如何运行的:我们为文件类型提供说明 (text files),然后插入一个竖线分隔符
(|),最后使用标准的通配符来指示所有 .txt 文件 (*.txt)。是不是想默认显示 .txt 文件,然后为用
户提供查看所有文件的选项?那么可以使用以下代码:
objdialog.filter = "text files|*.txt|all files|*.*"
试一试,您就明白我们的意思了。
然后,我们指定默认文件夹。默认情况下,我们希望对话框显示位于驱动器 c 的根文件夹中的文件,所
以我们这样设置“initialdir”属性:
objdialog.initialdir = "c:\"
希望显示 c:\windows 文件夹中的文件吗?那么可以使用以下代码:
objdialog.initialdir = "c:\windows"
不必担心:这是一个真正的“文件打开”对话框,所以您可以随意单击,并且可以随时停下来。您从
c:\windows 开始并不意味着您只能打开该文件夹中的文件。
最后,我们使用下面这行代码显示对话框:
intresult = objdialog.showopen
现在,我们只需坐下来,等待用户选择文件并单击“确定”(或者等待用户单击“取消”)。如果用户单
击“取消”,则变量 intresult 将被设置为 0。在我们的脚本中,我们检查 intresult 的值,如果是 0
,我们将只需要使用 wscript.quit 来终止此脚本。
但是如果用户实际上选择了文件并单击了“确定”,那该怎么办?在这种情况下,intresult 将被设置为
-1,“filedialog”属性将被设置为所选文件的路径名。我们的脚本只回显路径名,这意味着我们将得到
类似以下内容的输出:
c:\windows\prairie wind.bmp
不用说,您并不局限于只回显文件路径。实际上,您可以使用 wmi、filesystemobject 或一些其他技术
来绑定该文件,然后对其执行删除、复制、压缩或检索文件属性等操作 — 您对文件能够执行的操作差不
多都可以对它执行。
但无论如何,您都需要使用脚本。
顺便说一句,使用此方法,您一次只能选择一个文件,而不能按住“ctrl”键选择多个文件。有一种方法
可以选择多个文件,至少在 xp 计算机上可以,但是我们只能将此问题留到以后的专栏中讨论了。
15 我如何确定进程是在哪个帐户下运行的?
问:
嗨,scripting guy!我有一个脚本,它返回关于计算机上运行的所有进程的信息,只是我不知道如何获
得这些进程在其下运行的用户帐户的名称。您可以帮助我吗?
-- dl
答:
您好,dl。是的,我们可以帮助您。确定进程是在哪个帐户下运行的,实际上相当简单,只是如何着手执
行此操作并不是特别显而易见的。如果您与大多数人一样,那么您可能会通过扫描 win32_process 类的
属性来查找名为 account 或 username 或类似的属性。您很有可能找不到。出现这种情况的原因是:
win32_process 没有可以告诉您进程在哪个帐户下运行的属性。
您需要使用“getowner”方法来捕捉此信息。下面这个脚本可以告诉您 microsoft word (winword.exe)
在哪个帐户下运行:
strcomputer = "."set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")
set colprocesslist = objwmiservice.execquery _ ("select * from win32_process where name =
'winword.exe'")
for each objprocess in colprocesslist objprocess.getowner strusername, struserdomain
wscript.echo "process " & objprocess.name & " is owned by " _ & struserdomain & "\" &
strusername & "."next
我们最感兴趣的是下面这行代码:
objprocess.getowner strnameofuser, struserdomain
我们在此所做的就是调用“getowner”方法。getowner 返回两个“输出参数”,一个返回负责该进程的
用户的名称,一个返回该用户所属的域。为捕获这两个输出参数,我们需要为 getowner 方法提供两个变
量。在这个示例脚本中,我们使用了两个分别叫做 strusername 和 struserdomain 的变量。名称可以随
意选择;您可以将变量称为 a 和 b 或 x 和 y 或任何其他您想要的名称。
不过,变量的顺序不能随意设置:返回的第一个值总是用户名,第二个值总是域。这意味着,如果您希望
用 x 表示用户名,用 y 表示域,那么您要确保您的代码像下面这行代码一样:
objprocess.getowner x, y
调用 getowner 之后,我们就可直接回显进程名和所有者。请注意,我们可以稍微来点儿花样儿 – 使用
域\用户格式。这样,我们就可以回显类似于“fabrikam\kenmyer”的名称。
下面附带提供了另一个脚本,该脚本可以列出计算机上的所有进程以及各个进程的所有者:
strcomputer = "."set objwmiservice = getobject("winmgmts:\\" & strcomputer & "\root\cimv2")
set colprocesslist = objwmiservice.execquery _ ("select * from win32_process")
for each objprocess in colprocesslist objprocess.getowner strusername, struserdomain
wscript.echo "process " & objprocess.name & " is owned by " _ & struserdomain & "\" &
strusername & "."next
可能有人感到奇怪,2005 年 1 月 3 日正好是 microsoft 员工的正式休息日。那么今天为什么会有“嗨
,scripting guy!”专栏?这只能是由于 microsoft 脚本专家表现出来的对工作的难以置信的奉献和投
入精神。或者,也可能是由于某个脚本专家 – 还说不出他或她的名字 – 没有意识到今天是假日,所以
照常来了(而且是在早上 7 点啊!)。
16 可以将脚本的输出复制到剪贴板吗?
问:
嗨,scripting guy!有办法将脚本输出复制到剪贴板吗?
-- zw, marseilles, france
答:
您好,zw.如果您不介意用一些疯狂的解决方法,那么实际上将脚本输出复制到剪贴板相当容易。首先,
您需要构造一个字符串,其中包含想要的输出。然后,创建 internet explorer 的一个实例,然后在其
中打开一个空白页。接着,利用 internet explorer 对象模型的内置功能,将字符串复制到剪贴板;特
别是, 可以使用 clipboarddata.setdata 方法来实现这个技巧。将某些数据复制到剪贴板的示例脚本如
下:
strcopy = "this text has been copied to the clipboard."
set objie = createobject("internetexplorer.application")
objie.navigate("about:blank")
objie.document.parentwindow.clipboarddata.setdata "text", strcopy
objie.quit
运行脚本,然后打开 notepad,然后单击“粘贴”;应该可以看到所复制的字符串。
顺便说一下,所有这一切都是在“幕后”发生的,internet explorer 并不会真的出现在屏幕上。这是因
为,在默认情况下,通过脚本创建的任何 ie 实例在运行时都是隐藏的,除非您利用如下语句将其显示出
来:
objie.visible = true