将计算机IP地址与CSV中的IP进行比较

6bc51xsx  于 2023-07-31  发布在  其他
关注(0)|答案(3)|浏览(119)

在这里用头撞墙,我确信这是超级简单的事情。我正在尝试比较计算机的ipv4 wifi地址,如果它与导入的CSV中的IP匹配,请执行操作。
如果我手动输入一个IP进行比较,它工作正常,并返回一个匹配。

$IP = (Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias wi-fi).IPAddress
$CSV = Import-Csv "C:\Windows\Temp\List.csv"

foreach ($CPU in $CSV){
if ($CPU.IP -like "10.101*"){write-host "match found"}
}

字符串
如果我尝试与CSV中的数据进行比较,它不匹配。

$IP = (Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias wi-fi).IPAddress
$CSV = Import-Csv "C:\Windows\Temp\List.csv"

foreach ($CPU in $CSV){
if ($CPU.IP -like $IP){write-host "match found"}
}


CSV的内容如下
| IP| IP |
| --| ------------ |
| 10.101| 10.101 |
| 10.102| 10.102 |
我已经尝试了匹配的每一个变化,喜欢,包含等...我尝试在Get-NetIPAddress的开头使用[STRING]....
看起来当我使用-像$IP它真的想要-像$IP* 与通配符,但我不知道如何让它工作。

mwyxok5s

mwyxok5s1#

我能够让它工作与以下…

$IP -like ($CPU.IP + "*")

字符串
我不知道还能加个通配符。感谢Reddit上的紫猴子!

zbdgwd5y

zbdgwd5y2#

PowerShell中的-like运算符期望在您要比较的模式中使用通配符(*),这是正确的。
因此,如果你想找到一个以$IP开头的IP地址,你需要在它后面加上一个 *,这可以使用字符串连接来完成:

$IP = (Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias wi-fi).IPAddress
$CSV = Import-Csv "C:\Windows\Temp\List.csv"

foreach ($CPU in $CSV){
    if ($CPU.IP -like "$IP*"){write-host "match found"}
}

字符串
如果$CPU.IP以与$IP相同的字符串开始,则现在应该匹配。
但要注意-like不区分大小写。如果你想要区分大小写的匹配,使用-clike。
如果这仍然不起作用,请确保$IP确实包含您期望它包含的值。
如果你想比较$CPU.IP是否在任何地方包含$IP(不仅仅是在开头),你应该在$IP的两边使用 *:

$IP = (Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias wi-fi).IPAddress
$CSV = Import-Csv "C:\Windows\Temp\List.csv"

foreach ($CPU in $CSV){
    if ($CPU.IP -like "*$IP*"){write-host "match found"}
}


如果$CPU.IP中的任何地方都包含字符串$IP,则匹配。

ct2axkht

ct2axkht3#

首先,您将IPv4地址的第一个数字隔离为第二个数字。在我的例子中是“192.168”

$IPMatchKey = (Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias "wi-fi").IPAddress -replace "\.\d+\.\d+$"

字符串
接下来,您将在CSV文件中找到$IPMatchKey的网站。在我的例子中,它返回“HomeSite”

(Import-Csv -Path "<AnyPath>\IPSites.csv" -Delimiter ";" | Where-Object { $PSItem.IP -like $IPMatchKey }).Site


CSV文件是这个...

SITE;IP
Site01;10.101
Site02;10.102
HomeSite;192.168


就这样

相关问题