Soru Windows Server'da Yerel Alan Bağlantınız için IP Adresi nasıl alınır?


Bir url oluşturacak ve yürütecek bir toplu iş veya vbs dosyası oluşturmak istiyorum. Bu URL'nin bir kısmı, makinenin gerçek ip adresi olmalıdır. Bu IP adresini bir değişkene betikte eklemek için nasıl alabilirim?

DÜZEN 1:

Aşağıdaki komutun bana IP Adresini vereceğini öğrendim, ancak yine de bu değeri bir betikte kullanmak için bir değişkene nasıl alacağını bilmiyorum.

c:\> wmic NICCONFIG WHERE IPEnabled=true GET IPAddress /format:csv

Node,IPAddress
IP-0AFB,{10.25.5.2}

4
2017-07-31 15:14


Menşei




Cevaplar:


İşte eski bir betikte kullandığım bazı örnek kodlar ...

Dim myIPAddress : myIPAddress = ""
Dim objWMIService : Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Dim colAdapters : Set colAdapters = objWMIService.ExecQuery("Select IPAddress from Win32_NetworkAdapterConfiguration Where IPEnabled = True")
Dim objAdapter
For Each objAdapter in colAdapters
  If Not IsNull(objAdapter.IPAddress) Then myIPAddress = trim(objAdapter.IPAddress(0))
  exit for
Next

Wscript.echo "My IPAddress is " & myIPAddress

5
2017-07-31 15:30



Teşekkürler! Çalışma zamanı hatası alıyorum: Nesne Gerekli 'idLocalIPAddress'. Sonra bir satır Dim idLocalIPAddress ekledim ve şimdi çalışma zamanı hatası alıyorum: Nesne gerekli: ''. Herhangi bir yorum? - Geo
Option Explict set ile her değişken için bir Dim olmasını sağlamanız gerekir ... benim örneğim için size sadece hızlı ve kirli bir şekilde verdim, Dim deyimlerini eklemek size kalmış ... Vbscript'e adım atmak için WSCRIPT.EXE // X scriptname.vbs komut dosyası ve Visual Studio'daki kodunuzu kullanarak adım atmanıza olanak tanıyan Just-In-Time hata ayıklayıcısını başlatır. Umarım kodunuzu atlatırsanız, arızanızın nedenini belirtebilirsiniz. - Dscoduc
Güncellenen kodlara bakın ... - Dscoduc


IP adresini bir değişkene döndürmek isterseniz, aşağıdakileri yapabilirsiniz:

Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled='TRUE'", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)
For Each objItem In colItems
            strIPAddress = Join(objItem.IPAddress, ",")
            *yourFunctionName*(strIPAddress)
Next

Bu kod Microsoft'un TechNet Scriptcenter'ından Scriptomatic v2.0'dan alınmıştır. Burada bulundu: http://technet.microsoft.com/en-us/scriptcenter/dd939957.aspx


2
2017-07-31 15:50





WMIC sonuçlarını bir cmd komut dosyasında bir değişkene ayıklamanın bir yolu:

@echo off
setlocal
set varcounter=0
set wmicmd="wmic NICCONFIG WHERE IPEnabled=true GET IPAddress"
for /f "tokens=1 delims={, skip=1" %%a in ('%wmicmd%') do call :SETVAR %%a
endlocal
goto :eof

:SETVAR
set /a varcounter=%varcounter% + 1
if not {%1}=={} (
    echo NIC %varcounter% address is {%1}
    set NIC%varcounter%=%1
)
goto :eof

Birden fazla NIC olabileceğinden, WMIC'in çıktısını çağıracağımıza dikkat edin: her bir WMIC çıktısı için SETVAR (birincisini atlamak ve herhangi bir boş takip çizgisini test etmek). Her bir etkin NIC bulundu - değişkenler% NIC1%,% NIC2%, vb.

12. satır ile başlıyor "echo NIC", sizin memnuniyeti için çalıştıktan sonra kaldırılabilir.


1
2017-08-18 10:52





Bu REALLLLLY'yi faydalı hale getirmek için bilirsin, ekledim /node:%1 (uzak bilgisayarın IP adresini almak için) Sistem yöneticileri ve ağ yöneticileri vs ping veya nslookup için bazı ayak işi kaydeder. Ekleyeceğim diğer şeyin 'hata denetimi' olduğundan eminim ki, sistem mevcut olmadığında, komut dosyası "bu bilgiyi kaydedebilir" - System %1 not available - ve sonra bir sonraki sistemin ipini almak için devam edin.

Çoğu zaman, 'yarasa' demek için bir 'yarasa' yaparım Yani, sadece aşağıdaki "getall.bat" gibi bir toplu iş dosyası oluşturabilirim:

Sonra sadece şöyle çalıştır: getall > getall-log.txt 2>&1

(Yukarıdaki bilgiler, karşılaşılan tüm hatalar dahil olmak üzere tüm bilgileri bir metin dosyasına dağıtır)

getall.bat

rem getall.bat
call getnic.bat workstation1
call getnic.bat workstation2
call getnic.bat server1
call getnic.bat server2
rem end of getall.bat

getnic.bat

rem - getnic.bat
@echo off
setlocal
set varcounter=0
set wmicmd="wmic /node:%1 NICCONFIG WHERE IPEnabled=true GET IPAddress"
for /f "tokens=1 delims={, skip=1" %%a in ('%wmicmd%') do call :SETVAR %%a
endlocal
goto :eof

:SETVAR
set /a varcounter=%varcounter% + 1
if not {%1}=={} (
    echo NIC %varcounter% address is {%1}
    set NIC%varcounter%=%1
)
goto :eof
rem end of getnic.bat

1
2018-06-01 13:55



Düzenleme için teşekkürler 'jscott'. Seninle aynı zamanda düzenleme ortasındaydım. Çok takdir! - Jeff


IPv6 için dönüştürüldü

@echo off
setlocal
set varcounter=0
set wmicmd="wmic NICCONFIG WHERE IPEnabled=true GET IPAddress"
for /f "tokens=2 delims={, skip=1" %%a in ('%wmicmd%') do call :SETVAR %%a
endlocal
goto :eof

:SETVAR
set /a varcounter=%varcounter% + 1
if not {%1}=={} (
    echo NIC %varcounter% IPv6 address is {%1}
    set NIC%varcounter%=%1
)
goto :eof

1
2017-08-29 02:10





VBS veya Batch stili komut dosyası istediğini biliyorum, ancak bu rotayı denemek veya bu soruyu arayan başka biri için de bir PowerShell snippet'i ekleyeceğimi düşündüm.

[System.Net.Dns]::GetHostAddresses([System.Net.Dns]::GetHostName()) | foreach {write $_.IPAddressToString}

Bu, o anda makineye atanan tüm IP Adreslerini döndürür.


0
2018-06-01 14:27