Rảnh tay với 5 VB script tự động hóa việc sử dụng máy tính Windows

Cho dù bạn là một chuyên gia công nghệ thông tin hay một người dùng máy tính thông thường, có rất nhiều công việc bạn cần làm thường xuyên trên máy tính của mình. VB Script được thu nhỏ từ các chương trình Visual Basic được sử dụng như các script Windows có thể làm bất cứ điều gì từ việc thu thập thông tin quan trọng về phần cứng máy tính đến dừng và khởi động dịch vụ hoặc cài đặt lại card mạng.

Bạn có thể học cách làm tất cả những điều cá nhân này theo cách thông thường hoặc sử dụng các tệp tin batch. Nhưng VB script tốt hơn batch script vì chúng linh hoạt hơn. Nếu bạn lưu trữ các tập lệnh sau đây ở một nơi thông dụng để có thể truy cập nhanh chóng khi cần, bạn có thể hoàn thành các tác vụ này trong một khoảng thời gian ngắn, chỉ bằng cách nhấp đúp vào script, xác nhận thông báo và nhiệm vụ đã hoàn tất.

Hãy xem các VB script Windows sau và nếu bạn thấy bất kỳ tệp nào muốn sử dụng, chỉ cần sao chép và dán script vào Notepad hoặc công cụ ghi chú mã hóa khác và lưu tệp đó dưới dạng tệp WSF.

Chuẩn bị các script Windows

Mỗi script dưới đây sẽ chạy với chỉ một cú nháy đúp với điều kiện bạn đã đặt tên cho tập tin có đuôi là .WSF và mở code với:

<job>
<script language="VBScript">

Và đóng code với:

WScript.Quit
</script>
</job>

Điều này đảm bảo rằng Windows sẽ nhận ra ngôn ngữ mà script của bạn đã được ghi và xử lý đúng.

1. Sử dụng script Windows để tìm thông tin máy tính

Windows cung cấp một công cụ gọi là WMI, hoặc Windows Management Instrumentation, cung cấp script với một giao diện để truy cập các thành phần của hệ điều hành. Bạn có thể chạy các truy vấn với WMI để có được thông tin hiện tại về hệ thống. Microsoft cung cấp một danh sách đầy đủ tất cả các loại truy vấn có thể thực hiện với hệ thống.

Mặc dù có thể sử dụng VBA để lấy thông tin máy tính vào Excel, nhưng bạn có thể làm điều tương tự bằng cách sử dụng một VB script đơn giản.

Trong ví dụ này, chúng ta sẽ truy vấn hệ thống để lấy thông tin bộ xử lý (dòng máy, nhà sản xuất, số lõi), thông tin pin (mô tả và trạng thái), thông tin đĩa logic (tên, dung lượng còn lại, và kích thước tổng thể). Sau đó, chúng ta sẽ xuất tất cả thông tin này sang tệp CSV để xem dễ dàng.

Bước đầu tiên là thiết lập FileSystemObject sẽ sử dụng để xuất ra tệp CSV và tạo tệp:

Set oFSO = CreateObject("Scripting.FileSystemObject")
sFile1 = "MyComputerInfo.csv"
Set oFile1 = oFSO.CreateTextFile(sFile1, 1)

Bước tiếp theo là thiết lập truy vấn WMI và thực hiện nó:

strQuery = "SELECT Family,Manufacturer,NumberOfCores FROM Win32_Processor"
Set colResults = GetObject("winmgmts://./root/cimv2").ExecQuery( strQuery )

Cuối cùng, sắp xếp các kết quả và đưa thông tin vào tệp CSV.

oFile1.WriteLine "Processor Information"
oFile1.WriteLine "------"

For Each objResult In colResults
strResults = "Family:,"+CStr(objResult.Family)
oFile1.WriteLine strResults
strResults = "Manufacturer:,"+CStr(objResult.Manufacturer)
oFile1.WriteLine strResults
strResults = "Number of Cores:,"+CStr(objResult.NumberOfCores)
oFile1.WriteLine strResults
Next

Nếu chạy code trên bạn sẽ có đầu ra giống như hình bên dưới:

Đầu ra thông tin bộ xử lý

Đối với hai phần tiếp theo của code, bạn chỉ cần lặp lại và thay đổi truy vấn để tìm kiếm thông tin bổ sung. Đây là truy vấn thông tin về pin:

oFile1.WriteLine ""
strQuery = "SELECT Description,Status FROM Win32_Battery"
Set colResults = GetObject("winmgmts://./root/cimv2").ExecQuery( strQuery )
oFile1.WriteLine "Battery Information"
oFile1.WriteLine "------"

For Each objResult In colResults
strResults = "Status:,"+CStr(objResult.Description)
oFile1.WriteLine strResults
strResults = "Description:,"+CStr(objResult.Status)
oFile1.WriteLine strResults
Next

Và đây là phần tiếp theo của truy vấn đĩa logic:

oFile1.WriteLine ""
strQuery = "Select Name, FreeSpace, Size from Win32_LogicalDisk"
Set colResults = GetObject("winmgmts://./root/cimv2").ExecQuery( strQuery )
oFile1.WriteLine "Disk Information"
oFile1.WriteLine "------"

'Identify the Logical Disk Space
For Each objResult In colResults
strResults = "Name:,"+CStr(objResult.Name)
oFile1.WriteLine strResults
strResults = "Free Space:,"+CStr(objResult.FreeSpace)
oFile1.WriteLine strResults
strResults = "Disk Size:,"+CStr(objResult.Size)
oFile1.WriteLine strResults
Next

Cuối cùng, nhớ đóng code bằng cách đóng tệp và đặt các đối tượng thành "Nothing":

oFile1.Close

Set oFile1 = Nothing
set colResults = Nothing
strResults = ""

Đặt tất cả các code đó vào tệp tin .WSF mới, sau đó chạy và đây là kết quả:

Đầu ra thông tin hệ thống

Chỉ cần đổi các truy vấn trên với các thiết bị máy tính hoặc phần mềm khác muốn nhận thông tin và bạn có thể nhận được báo cáo hệ thống đầy đủ bất cứ lúc nào chỉ với một cú nhấp chuột.

2. Dừng và khởi động dịch vụ

Đôi lúc các dịch vụ cụ thể sẽ xảy ra vấn đề và yêu cầu khởi động lại nhanh chóng để có thể chạy bình thường. Nếu muốn nhanh chóng tắt và khởi động lại dịch vụ, bạn chỉ cần lưu script sau. Nó sẽ nhắc người dùng gõ tên của dịch vụ muốn khởi động lại và phần việc còn lại nó sẽ thực hiện.

Vì việc dừng và khởi động các dịch vụ đòi hỏi quyền quản trị đặc biệt, nên bạn cần phải đặt code sau đây khi bắt đầu script để cấp quyền nâng cao cho script.

If Not WScript.Arguments.Named.Exists("elevate") Then
CreateObject("Shell.Application").ShellExecute WScript.FullName _
, """" & WScript.ScriptFullName & """ /elevate", "", "runas", 1
WScript.Quit
End If

Sau khi hoàn tất, thêm phần còn lại của code để chạy hộp nhập liệu cho đầu vào của người dùng, khởi chạy cửa sổ lệnh và gửi "net stop" và "net start commands":

Set cmdShell = CreateObject("WScript.Shell")
strServiceName=Inputbox("Inter Service to Stop","Input Required")
cmdShell.Run "cmd.exe"
WScript.Sleep 1000

cmdShell.SendKeys "net stop "+strServiceName
cmdShell.SendKeys "{Enter}"
WScript.Sleep 1000

cmdShell.SendKeys "net start "+strServiceName
cmdShell.SendKeys "{Enter}"
WScript.Sleep 1000

cmdShell.SendKeys "Exit"
cmdShell.SendKeys "{Enter}"

Vậy là xong, bạn không cần tìm các công cụ dịch vụ, chỉ cần chạy scipt trên để dừng và khởi động bất kỳ dịch vụ nào trong vài giây.

3. Thay đổi cài đặt registry, mật khẩu quản trị mặc định

Với script dưới đây, chúng ta có thể thực hiện được một công đôi việc. Script này sẽ cho bạn thấy cách chỉnh sửa registry với một VB script. Nó cũng sẽ cung cấp một script cho phép đặt tên người dùng và mật khẩu Windows mặc định bằng cách chỉnh sửa các thiết lập registry đó.

Đây là cách hoạt động. Trước tiên, vì chỉnh sửa registry yêu cầu quyền admin, nên bạn cần thiết lập quyền nâng cao cho script:

If Not WScript.Arguments.Named.Exists("elevate") Then
CreateObject("Shell.Application").ShellExecute WScript.FullName _
, """" & WScript.ScriptFullName & """ /elevate", "", "runas", 1
WScript.Quit
End If

Đầu tiên chạy hai hộp đầu vào để yêu cầu tên người dùng và mật khẩu:

strUserName=Inputbox("Enter the default User Name","Input Required")
strPassword=Inputbox("Enter the default Password","Input Required")

Tiếp theo, thiết lập đối tượng trong shell và ghi các giá trị đó vào các key registry thích hợp:

Set wshShell = CreateObject( "WScript.Shell" )
wshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName", strUserName, "REG_SZ"
wshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword", strPassword, "REG_SZ"
Set wshShell = Nothing

Phương pháp "RegWrite" cho phép người dùng viết bất kỳ giá trị nào cho bất kỳ key registry bằng cách sử dụng một VB Windows script. Tất cả những gì bạn cần biết là đường dẫn thích hợp.

Chạy script và trả lời các thông báo hiện ra.

Yêu cầu đầu vào

Các giá trị nhập vào sẽ được chèn vào ngay cài đặt registry bạn đã thiết lập trong script.

Giá trị nhập

4. Thiết lập lại kết nối mạng

Thiết lập lại kết nối mạng bằng cách sử dụng VB script sẽ reset lại tất cả các kết nối đang hoạt động của người dùng để giải quyết bất kỳ vấn đề mạng nào đang gặp phải.

Cũng như các script khác, script này cũng cần quyền quản trị, bạn cần thêm code trong script ở trên vào phần đầu để cấp quyền nâng cao. Tiếp theo, tạo đối tượng WMI và truy vấn nó với một danh sách các adapter mạng được bật trên hệ thống:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_NetworkAdapter Where NetEnabled = 'True'")

Cuối cùng, đi qua tất cả các adapter được kích hoạt và reset lại chúng:

For Each objItem in colItems
objItem.Disable
WScript.Sleep 1000
objItem.Enable
Next

Thao tác này sẽ đặt lại tất cả các adapter mạng hoạt động, đây thường là cách nhanh nhất để giải quyết các sự cố mạng gây phiền nhiễu. Lưu script này và dùng bất cứ khi nào bạn thấy mạng chậm và các vấn đề mạng khác thường khác.

5. Thực hiện ping thiết bị hoặc trang web

Script này là được dùng để kiểm tra xem trang web có đang hoạt động hay không, sau đó nó sẽ gửi email cho người dùng nếu trang web có vấn đề. Bạn có thể sử dụng cùng script này để giám sát các máy chủ hoặc máy tính quan trọng trên mạng và thiết lập gửi email cho mình bất cứ khi nào script không thể ping thiết bị.

Đầu tiên, thiết lập script cho mục tiêu muốn ping, tạo đối tượng shell và sau đó chạy lệnh ping.

strTarget = "topsecretwriters.com"
Set WshShell = WScript.CreateObject("WScript.Shell")
Ping = WshShell.Run("ping -n 1 " & strTarget, 0, True)

Sử dụng một câu lệnh Select Case để chạy qua các kết quả Ping và trả lời tương ứng. Nếu kết quả trở lại bằng không, thì có nghĩa là trang web (hoặc máy chủ) đang trực tuyến và bạn không phải làm bất cứ điều gì. Nếu nó trả về kết quả là "1" thì ping không thành công và bạn cần làm gì đó.

Select Case Ping
Case 0
Case 1
Set objMessage = CreateObject("CDO.Message")
Set objConfig = CreateObject("CDO.Configuration")
objConfig.Load -1
Set Flds = objConfig.Fields
With Flds
.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate")=1
.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername")="xxxxxx@gmail.com"
.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword")="xxxxxxxxxxxxxxxxx"
.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver")="smtp.gmail.com"
.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing")=2
.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport")=465
.Update
End With
With objMessage
Set .Configuration = objConfig
.Subject = "Your site is offline"
.From = "me@mycomputer.com"
.To = "xxxxxx@gmail.com"
.TextBody = "Hey, your website is offline."
.Send
End With
End Select

Khi script chạy và không thể ping thiết bị hoặc trang web, bạn sẽ nhận được một email.

Nhận được email khi trang web hoặc thiết bị có vấn đề

Với cách này bạn có thể nhanh chóng và dễ dàng kiểm tra mạng.

Đây chỉ là một vài ví dụ về một số điều thú vị bạn có thể làm với VB script để hợp lý hóa việc sử dụng máy tính. Có rất nhiều thứ khác người có thể làm như sao lưu tự động với VB và Synctoy, tự động hóa các lệnh telnet, hoặc thậm chí mở và kiểm soát các cửa sổ ứng dụng .

Xem thêm:

Thứ Ba, 23/01/2018 12:41
51 👨 7.169
1 Bình luận
Sắp xếp theo
  • Hùng Lê
    Hùng Lê thực sự không hiểu những đoạn script đó sữ dụng ở chương trình nào? như php, execl, word? hay gì nữa 
    Thích Phản hồi 09/03/22