Menyambungkan ke WMI Dari Jarak Jauh dengan VBScript

Anda dapat membuat koneksi jarak jauh ke WMI dengan VBScript dengan membuat objek koneksi. Objek ini berisi nama komputer, ruang nama WMI yang ingin Anda sambungkan, serta kredensial dan tingkat autentikasi yang relevan.

Untuk menyambungkan ke sistem jarak jauh menggunakan VBScript

  1. Tentukan informasi koneksi seperti nama komputer jarak jauh, kredensial, dan tingkat autentikasi untuk koneksi.

    Jika Anda menyambungkan ke komputer jarak jauh menggunakan kredensial yang sama (domain dan nama pengguna) yang Anda gunakan untuk masuk, maka Anda dapat menentukan informasi koneksi di monikerGetObject, seperti yang dijelaskan dalam sampel kode berikut.

    strComputer = "Computer_B"
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & strComputer & "\Root\CIMv2")
    

    Secara umum, Anda harus menentukan namespace WMI yang akan disambungkan di komputer jarak jauh. Ini karena ada kemungkinan bahwa namespace default tidak sama pada komputer yang berbeda. Menentukan namespace layanan memastikan bahwa Anda tersambung ke namespace yang sama di semua komputer.

    Untuk informasi selengkapnya tentang konstanta VBScript dan string skrip untuk menggunakan koneksi moniker, lihat Mengatur Tingkat Keamanan Proses Default Menggunakan VBScript.

  2. Jika Anda tersambung ke komputer jarak jauh di domain lain atau menggunakan nama pengguna dan kata sandi yang berbeda, maka Anda harus menggunakan metode SWbemLocator.ConnectServer .

    Seperti halnya moniker, Anda menggunakan ConnectServer untuk menentukan kredensial, tingkat autentikasi, dan namespace layanan untuk koneksi jarak jauh. Contoh kode berikut menjelaskan penggunaan ConnectServer untuk mengakses komputer jarak jauh menggunakan akun administrator dan kata sandi.

    strComputer = "Computer_B"
    Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
                                                         "Root\CIMv2", _
                                                         "fabrikam\administrator", _
                                                         "password")
    
  3. Saat menggunakan fungsi ConnectServer untuk koneksi jarak jauh, atur peniruan identitas dan autentikasi pada objek keamanan yang diperoleh melalui panggilan ke SWbemServices.Security. Anda dapat menggunakan enumerasi WbemImpersonationLevelEnum untuk menentukan tingkat peniruan.

    Sampel kode berikut menetapkan tingkat peniruan untuk sampel kode VBScript sebelumnya.

    objSWbemServices.Security_.ImpersonationLevel = 3
    

    Perhatikan bahwa beberapa koneksi memerlukan tingkat autentikasi tertentu. Untuk informasi selengkapnya, lihat Mengatur Keamanan Proses Aplikasi Klien dan Mengamankan Klien Scripting.

    Secara khusus, Anda harus mengatur tingkat autentikasi ke RPC_C_AUTHN_LEVEL_PKT_PRIVACY atau 6 jika namespace yang Anda sambungkan di komputer jarak jauh memerlukan koneksi terenkripsi sebelum akan mengembalikan data. Anda juga dapat menggunakan tingkat autentikasi ini, meskipun namespace tidak memerlukannya. Ini memastikan bahwa data dienkripsi saat melintasi jaringan. Jika Anda mencoba mengatur tingkat autentikasi yang lebih rendah dari yang diizinkan, pesan akses ditolak akan dikembalikan. Untuk informasi selengkapnya, lihat Memerlukan Koneksi Terenkripsi ke Namespace.

Setelah membuat koneksi, Anda dapat terus mengakses data WMI. Untuk informasi selengkapnya, lihat Tugas WMI untuk Skrip dan Aplikasi.

Contoh

Untuk sampel VBScript yang lebih besar, lihat bagian Contoh di halaman referensi SWbemLocator.ConnectServer .

Contoh kode VBScript berikut terhubung ke sekelompok komputer jarak jauh di domain yang sama dengan membuat array nama komputer jarak jauh lalu menampilkan nama perangkat Plug and Play—instans Win32_PnPEntity—di setiap komputer. Untuk menjalankan skrip di bawah ini, Anda harus menjadi administrator pada komputer jarak jauh. Perhatikan bahwa "\\" diperlukan sebelum nama komputer jarak jauh ditambahkan oleh skrip setelah pengaturan tingkat peniruan. Untuk informasi selengkapnya tentang jalur WMI, lihat Menjelaskan Lokasi Objek WMI.

On Error Resume Next 
arrComputers = Array("Computer1","Computer2","Computer3")
For Each strComputer In arrComputers
    WScript.Echo
    WScript.Echo "===================================="
    WScript.Echo "Computer: "& strComputer
    WScript.Echo "===================================="

    Set objWMIService = GetObject("winmgmts:\\" & strComputer& "\Root\CIMv2") 
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PnPEntity",,48) 
    For Each objItem in colItems 
        Wscript.Echo "-----------------------------------"
        Wscript.Echo "Win32_PnPEntity instance"
        Wscript.Echo "-----------------------------------"
        Wscript.Echo "Name: "& objItem.Name
        Wscript.Echo "Status: "& objItem.Status
    Next
Next

Contoh kode VBScript berikut memungkinkan Anda menyambungkan ke komputer jarak jauh menggunakan kredensial yang berbeda. Misalnya, komputer jarak jauh di domain lain atau menyambungkan ke komputer jarak jauh yang memerlukan nama pengguna dan kata sandi yang berbeda. Dalam hal ini, gunakan koneksi SWbemServices.ConnectServer .

' Full Computer Name
' can be found by right-clicking My Computer,
' then click Properties, then click the Computer Name tab)
' or use the computer's IP address
strComputer = "FullComputerName" 
strDomain = "DOMAIN" 
Wscript.StdOut.Write "Please enter your user name:"
strUser = Wscript.StdIn.ReadLine 
Set objPassword = CreateObject("ScriptPW.Password")
Wscript.StdOut.Write "Please enter your password:"
strPassword = objPassword.GetPassword()
 
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
                                                     "Root\CIMv2", _
                                                     strUser, _
                                                     strPassword, _
                                                     "MS_409", _
                                                     "ntlmdomain:" + strDomain)
Set colSwbemObjectSet = objSWbemServices.ExecQuery("Select * From Win32_Process")
For Each objProcess in colSWbemObjectSet
    Wscript.Echo "Process Name: " & objProcess.Name 
Next

Menyambungkan ke WMI pada Komputer Jarak Jauh