mirror of
https://github.com/bin456789/reinstall.git
synced 2025-01-19 04:49:13 +08:00
core: 不用 powershell 获取网络配置
This commit is contained in:
parent
1604af1dac
commit
ea3dc1ddcf
89
reinstall.sh
89
reinstall.sh
@ -720,26 +720,83 @@ is_efi() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
to_upper() {
|
||||||
|
tr '[:lower:]' '[:upper:]'
|
||||||
|
}
|
||||||
|
|
||||||
|
to_lower() {
|
||||||
|
tr '[:upper:]' '[:lower:]'
|
||||||
|
}
|
||||||
|
|
||||||
|
del_cr() {
|
||||||
|
sed 's/\r//g'
|
||||||
|
}
|
||||||
|
|
||||||
# TODO: 多网卡 单网卡多IP
|
# TODO: 多网卡 单网卡多IP
|
||||||
collect_netconf() {
|
collect_netconf() {
|
||||||
if is_in_windows; then
|
if is_in_windows; then
|
||||||
echo_conf() {
|
convert_net_str_to_array() {
|
||||||
grep -w "$1" <<<"$netconf" | awk '{ print $2 }'
|
config=$1
|
||||||
|
key=$2
|
||||||
|
var=$3
|
||||||
|
IFS=',' read -r -a "${var?}" <<<"$(grep "$key=" <<<"$config" | cut -d= -f2 | sed 's/[{}"]//g')"
|
||||||
}
|
}
|
||||||
curl -L $confhome/windows-get-netconf.ps1 -o /tmp/windows-get-netconf.ps1
|
|
||||||
ps1="$(cygpath -w /tmp/windows-get-netconf.ps1)"
|
# 部分机器精简了 powershell
|
||||||
netconf=$(
|
# 所以不要用 powershell 获取网络信息
|
||||||
powershell -nologo -noprofile -NonInteractive \
|
ids=$(wmic nic where "PhysicalAdapter=true and MACAddress is not null and PNPDeviceID like '%VEN_%&DEV_%'" get InterfaceIndex | del_cr | sed '1d')
|
||||||
-ExecutionPolicy bypass \
|
for id in $ids; do
|
||||||
-File "$ps1" |
|
config=$(wmic nicconfig where "InterfaceIndex='$id'" get MACAddress,IPAddress,IPSubnet,DefaultIPGateway /format:list | del_cr)
|
||||||
sed 's/://' |
|
# 排除 IP/子网/网关为空的
|
||||||
sed 's/\r//' # 删除 windows \r 换行符
|
if grep -q '=$' <<<"$config"; then
|
||||||
)
|
continue
|
||||||
mac_addr=$(echo_conf MACAddress)
|
fi
|
||||||
ipv4_addr=$(echo_conf IPAddress4)
|
|
||||||
ipv6_addr=$(echo_conf IPAddress6)
|
mac_addr=$(grep "MACAddress=" <<<"$config" | cut -d= -f2 | to_lower)
|
||||||
ipv4_gateway=$(echo_conf DefaultIPGateway4)
|
convert_net_str_to_array "$config" IPAddress ips
|
||||||
ipv6_gateway=$(echo_conf DefaultIPGateway6)
|
convert_net_str_to_array "$config" IPSubnet subnets
|
||||||
|
convert_net_str_to_array "$config" DefaultIPGateway gateways
|
||||||
|
|
||||||
|
# IPv4
|
||||||
|
# shellcheck disable=SC2154
|
||||||
|
for ((i = 0; i < ${#ips[@]}; i++)); do
|
||||||
|
ip=${ips[i]}
|
||||||
|
subnet=${subnets[i]}
|
||||||
|
if [[ "$ip" = *.* ]]; then
|
||||||
|
cidr=$(ipcalc -b "$ip/$subnet" | grep Network: | cut -d/ -f2 | xargs)
|
||||||
|
ipv4_addr="$ip/$cidr"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# IPv6
|
||||||
|
ipv6_type_list=$(cmd /c "chcp 437 & netsh interface ipv6 show address $id normal")
|
||||||
|
for ((i = 0; i < ${#ips[@]}; i++)); do
|
||||||
|
ip=${ips[i]}
|
||||||
|
cidr=${subnets[i]}
|
||||||
|
if [[ "$ip" = *:* ]]; then
|
||||||
|
ipv6_type=$(grep "$ip" <<<"$ipv6_type_list" | awk '{print $1}')
|
||||||
|
# 还有类型 Temporary,不过有 Temporary 肯定还有 Public,因此不用
|
||||||
|
if [ "$ipv6_type" = Public ] ||
|
||||||
|
[ "$ipv6_type" = Manual ]; then
|
||||||
|
ipv6_addr="$ip/$cidr"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# 网关
|
||||||
|
# shellcheck disable=SC2154
|
||||||
|
for gateway in "${gateways[@]}"; do
|
||||||
|
if [[ "$gateway" = *.* ]]; then
|
||||||
|
ipv4_gateway="$gateway"
|
||||||
|
elif [[ "$gateway" = *:* ]]; then
|
||||||
|
ipv6_gateway="$gateway"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
break
|
||||||
|
done
|
||||||
else
|
else
|
||||||
nic_name=$(ip -o addr show scope global | head -1 | awk '{print $2}')
|
nic_name=$(ip -o addr show scope global | head -1 | awk '{print $2}')
|
||||||
mac_addr=$(ip addr show scope global | grep link/ether | head -1 | awk '{print $2}')
|
mac_addr=$(ip addr show scope global | grep link/ether | head -1 | awk '{print $2}')
|
||||||
|
@ -1,64 +0,0 @@
|
|||||||
# 物理网卡
|
|
||||||
foreach ($NetAdapter in Get-NetAdapter -Physical) {
|
|
||||||
$Name = $NetAdapter.Name
|
|
||||||
$MACAddress = $NetAdapter.MACAddress -replace '-', ':'
|
|
||||||
|
|
||||||
# IP条目
|
|
||||||
$IPEntries = (Get-NetIPAddress -InterfaceAlias $Name |
|
|
||||||
Where-Object {
|
|
||||||
$_.PrefixOrigin -match "RouterAdvertisement|DHCP|Manual" -and
|
|
||||||
$_.AddressState -eq "Preferred"
|
|
||||||
})
|
|
||||||
|
|
||||||
if (!$IPEntries) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
# IPv4
|
|
||||||
foreach ($IPEntry in $IPEntries) {
|
|
||||||
if ($IPEntry.AddressFamily -eq "IPv4") {
|
|
||||||
$IPAddress4 = $IPEntry.IPAddress
|
|
||||||
$PrefixLength4 = $IPEntry.PrefixLength
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# IPv6
|
|
||||||
foreach ($IPEntry in $IPEntries) {
|
|
||||||
if ($IPEntry.AddressFamily -eq "IPv6") {
|
|
||||||
$IPAddress6 = $IPEntry.IPAddress
|
|
||||||
$PrefixLength6 = $IPEntry.PrefixLength
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# IPv4 网关
|
|
||||||
foreach ($NetRoute in Get-NetRoute | Where-Object {
|
|
||||||
$_.InterfaceAlias -eq $Name -and
|
|
||||||
$_.DestinationPrefix -eq "0.0.0.0/0"
|
|
||||||
}) {
|
|
||||||
$DefaultIPGateway4 = $NetRoute.NextHop
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
# IPv6 网关
|
|
||||||
foreach ($NetRoute in Get-NetRoute | Where-Object {
|
|
||||||
$_.InterfaceAlias -eq $Name -and
|
|
||||||
$_.DestinationPrefix -eq "::/0"
|
|
||||||
}) {
|
|
||||||
$DefaultIPGateway6 = $NetRoute.NextHop
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
$OutputObj = New-Object -Type PSObject -Property @{
|
|
||||||
MACAddress = "$MACAddress".ToLower() # 和linux保持一致
|
|
||||||
IPAddress4 = $(If ($IPAddress4) { "$IPAddress4/$PrefixLength4" })
|
|
||||||
IPAddress6 = $(If ($IPAddress6) { "$IPAddress6/$PrefixLength6" })
|
|
||||||
DefaultIPGateway4 = $DefaultIPGateway4
|
|
||||||
DefaultIPGateway6 = $DefaultIPGateway6
|
|
||||||
}
|
|
||||||
|
|
||||||
# 按指定顺序输出
|
|
||||||
$OutputObj | Select-Object MACAddress, IPAddress4, IPAddress6, DefaultIPGateway4, DefaultIPGateway6
|
|
||||||
break
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user