2017-02-26 56 views
0

我有一個PowerShell腳本,其中包含此方法:
1. Invoke-WebRequest:獲取我的json文件。
2. Invoke-RestMethod:從(1)中獲取所有ip信息。添加成員 - ForEach項目從其他信息獲取價值

我想Add-Member$gip.city每個r.users信息

這裏是我的錯誤的語法:

$r = Invoke-WebRequest -Uri http://schoolfordesign.net/grabber.json | ConvertFrom-Json 
$expip = $r.users | select -expand ipaddress 


ForEach($ips in $expip){ 

    $infoService = "http://ipinfo.io/$ips/json" 
    $gip = Invoke-RestMethod -Method Get -URI $infoService 

    $r.users| Add-Member -NotePropertyName city -NotePropertyValue $gip.city -Force 
} 

#Resilt: 
$r.users 

當我運行它,新成員 '市' 不是包含任何值,則顯示此結果:
pic

+0

@jessehouwing是,爲每個用戶添加一個城市$ gip – Aso

+0

@ jessehouwing謝謝。但我仍然得到錯誤。我不知道。簡單地說$ gip有許多收藏,比如(city,ip,location..etc),我想從它抓到City到我的收藏,這是$ r.users,請參閱我的博文鏈接照片。 – Aso

+0

@jessehouwing LINQ風格的腳本塊是怎麼回事? '$ user => $ user.ipaddress ...'? '=>'不是PowerShell-operator AFAIK :-) –

回答

4

http://schoolfordesign.net/grabber.json初始JSON包含用戶記錄是這樣的:

{ 
    "ipaddress": "66.249.93.218", 
    "date": "2017\/02\/23", 
    "time": "07:03:34pm", 
    "device": "Mozilla\/5.0 (Windows NT 10.0; Win64; x64) ......." 
} 

最簡單的解決方法是通過每一個這些記錄作爲一個整體,而不僅僅是IP地址進行迭代:

$r = Invoke-WebRequest -Uri http://schoolfordesign.net/grabber.json | ConvertFrom-Json 

ForEach ($user in $r.users) { 
    $info = Invoke-RestMethod -Method Get -URI "http://ipinfo.io/$($user.ipaddress)/json" 
    $user | Add-Member city $info.city -force 
} 

$r.users 
1

正如我說你需要查找正確的項目$users集合之前,給城市附加:

$r = Invoke-WebRequest -Uri http://schoolfordesign.net/grabber.json | ConvertFrom-Json 
$expip = $r.users | select -expand ipaddress 


ForEach($ips in $expip){ 

    $infoService = "http://ipinfo.io/$ips/json" 
    $gip = Invoke-RestMethod -Method Get -URI $infoService 
    $r.users| ?{ $_.ipaddress -eq $ips } | %{ Add-Member -InputObject $_ -NotePropertyName city -NotePropertyValue $gip.city -Force } 
} 

#Result: 
$r.users 

或者遍歷單獨作爲最初並很好地通過@wOxxOm

導致擴大了意見建議的用戶,(請注意,某些IP記錄不返回城市信息):

ipaddress : 66.249.93.218 
date  : 2017/02/23 
time  : 07:03:34pm 
device : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 
city  : 

ipaddress : 66.249.93.219 
date  : 2017/02/23 
time  : 11:18:38pm 
device : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 
city  : 

ipaddress : 95.84.129.28 
date  : 2017/02/24 
time  : 08:56:23am 
device : Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.5072 
city  : Presnenskiy 

ipaddress : 37.204.200.135 
date  : 2017/02/24 
time  : 12:59:51pm 
device : Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/7.0) 
city  : Moscow 

ipaddress : 66.249.93.217 
date  : 2017/02/24 
time  : 03:13:06pm 
device : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 
city  : 

ipaddress : 46.242.121.90 
date  : 2017/02/24 
time  : 08:27:51pm 
device : Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.450 
city  : Moscow 

ipaddress : 89.179.106.75 
date  : 2017/02/24 
time  : 09:15:15pm 
device : Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.3 
city  : Rostov-on-Don 

ipaddress : 176.193.111.146 
date  : 2017/02/25 
time  : 11:25:49am 
device : Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0) 
city  : Moscow 

ipaddress : 37.204.142.237 
date  : 2017/02/25 
time  : 05:49:15pm 
device : Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.5072 
city  : Moscow 

ipaddress : 5.228.95.51 
date  : 2017/02/25 
time  : 07:47:42pm 
device : Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/7.0) 
city  : Moscow 

ipaddress : 109.63.236.189 
date  : 2017/02/25 
time  : 11:40:26pm 
device : Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.3 
city  : Moscow 

ipaddress : 176.195.116.125 
date  : 2017/02/26 
time  : 12:12:28am 
device : Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.450 
city  : Andreyevka 

ipaddress : 66.249.93.218 
date  : 2017/02/26 
time  : 04:05:01am 
device : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 
city  :