国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > VBScript > 正文

用vbs針對一個 IP 地址范圍運行腳本

2020-06-26 18:08:50
字體:
來源:轉載
供稿:網友
問: 
嗨,Scripting Guy!我想在一個子網中的所有計算機上運行腳本。有沒有辦法不必將所有 IP 地址都硬編碼到腳本中就能完成這項任務呢? 

-- RB 

答: 
嗨,RB。根據您在電子郵件中的描述,看來您的設置類似于:您的子網的 IP 地址范圍為 192.168.1.1 到 192.168.1.254。您想創建一個腳本,可以先從第一個 IP 地址開始,在相應的計算機上運行某個代碼,然后轉到第二個地址,運行相同的代碼,按地址順序在每臺計算機上都運行相同的腳本。此外,您想通過盡可能最少的代碼行就能辦到這一點,并且不必硬編碼好幾百個 IP 地址。 

那么,有辦法能做到嗎?當然有,而且比您想象的還要簡單。 

首先,讓我們向您介紹如何某個 IP 地址范圍進行循環。這是一個示例代碼,所以只用于回顯每個 IP 地址的名稱。在介紹了該腳本的工作原理后,我們將舉一個更實際的例子: 

復制代碼代碼如下:

On Error Resume Next  

intStartingAddress = 1  
intEndingAddress = 254  
strSubnet = "192.168.1."  

For i = intStartingAddress to intEndingAddress  
    strComputer = strSubnet & i  
    Wscript.Echo strComputer  
Next 

不,真的,這就是整個腳本了。我們先指派了一些變量:將值“1”指派給 intStartingAddress;將值“254”指派給 intEndingAddress;并將值“192.168.1.”指派給 strSubnet。(注意“1”后面的英文句號)。正如您可能猜到的,這些值將作為建立 IP 地址的構建塊。 

指派了這些變量之后,我們創建了一個 For-Next 循環,用以運行 1 (intStartingAddress) 到 254 (intEndingAddress) 的變量。為何要循環 1 到 254 呢?原因很簡單:那是您的 IP 范圍。如果 IP 范圍是 192.168.1.7 到 109.168.1.54,又該怎么辦呢?沒有問題:使用相同的循環,但要將intStartingAddress 的值改為“7”,并將 intEndingAddress 的值改為“54”。 

在此循環中,我們將字符串值 192.168.1. 與循環變量 (i) 的當前值相串聯。在首次運行循環——當“i”等于“1”時,我們將 192.168.1. 和 1 相結合。您猜怎么樣?我們得到了值 192.168.1.1,恰好是第一個 IP 地址。最后一次運行循環時,我們將把 192.168.1. 和 254 相結合,從而得到最后一個 IP 地址的值——192.168.1.254。運行該腳本,將得到: 

192.168.1.1 
192.168.1.2 
192.168.1.3 
192.168.1.4 

非常簡單吧? 

當然,您可能對于回顯一組 IP 地址不會多感興趣;您想運行某種 WMI 代碼。好的: 

On Error Resume Next 

intStartingAddress = 1 
intEndingAddress = 254 
strSubnet = "192.168.1." 

For i = intStartingAddress to intEndingAddress 
    strComputer = strSubnet & i 

    Set objWMIService = GetObject _ 
        ("winmgmts://" & strComputer & "/root/cimv2") 
    Set colItems = objWMIService.ExecQuery _ 
        ("Select * From Win32_OperatingSystem") 
    For Each objItem in ColItems 
        Wscript.Echo strComputer & ": " & objItem.Caption 
    Next 

Next 

正如您所看到的,我們再次把 strComputer 變量的值設為某個 IP 地址。然后連接到該地址所表示的計算機上的 WMI 服務。這很容易辦到,因為 WMI 既可以使用計算機名,也可以使用 IP 地址連接到計算機。 

現在,我們要加入一項小技巧。您在電子郵件中提到,想要排除幾個 IP 地址(可能代表路由器或其他東西)。好的。這里有一個經過修改的腳本,其使用 Select Case 語句來排除某些計算機: 

intEndingAddress = 254 
strSubnet = "192.168.1." 

For i = intStartingAddress to intEndingAddress 
    Select Case i 
        Case 10 
        Case 50 
        Case 100 

        Case Else 
            strComputer = strSubnet & i 
            Set objWMIService = GetObject _ 
                ("winmgmts://" & strComputer & "/root/cimv2") 
            Set colItems = objWMIService.ExecQuery _ 
                ("Select * From Win32_OperatingSystem") 
            For Each objItem in ColItems 
                Wscript.Echo strComputer & ": " & objItem.Caption 
            Next 

    End Select 
Next 

注意一下當“i”值等于 10、50 或 100 時,所發生的變化。沒錯:一點都沒變化。如果計算機的 IP 地址為 192.168.1.10、192.168.1.50 或 192.168.1.100,不會發生任何變化;不會運行任何 WMI 代碼,腳本將照樣執行循環。該 WMI 代碼將僅在擁有其他 IP 地址(上面三個地址除外)的計算機上執行。這是一種用以在該腳本的 WMI 部分中排除特定 IP 地址的既簡單又有效的辦法。 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 清新县| 夏邑县| 玛沁县| 榆社县| 定南县| 华坪县| 哈巴河县| 堆龙德庆县| 时尚| 荥阳市| 曲水县| 临桂县| 抚宁县| 大姚县| 榆中县| 花莲市| 朝阳区| 裕民县| 枣庄市| 柘荣县| 南靖县| 休宁县| 三亚市| 合山市| 澄城县| 富蕴县| 大兴区| 莒南县| 池州市| 林甸县| 九寨沟县| 湄潭县| 阿拉善左旗| 新乡市| 梧州市| 综艺| 潜江市| 四平市| 安平县| 北流市| 自贡市|