将本机ipv6地址复制到粘贴板脚本

准确的来说是将windows主机的ipv6地址复制到粘贴板上的powershell脚本。因为有时候需要远程连接我自己的R9000p,所以与其每次开机去命令行运行ipconfig,不如直接复制到粘贴板里,这样就可以直接打开邮件将地址发送出去。本来想写一个一件发送ipv6地址到指定邮箱的脚本,但是好像很麻烦,就算了。代码由chatgpt生成,再根据我的实际情况改写的。

设备配置

windows为win11,由于学校校园网比较特殊,使用的是拨号上网,拨号名称我设置成了DIANXIN

在命令行中运行ipconfig后会显示很多网络适配器,其中我需要的是:

1
2
3
4
5
6
7
8
9
10
11
Windows IP Configuration


PPP adapter DIANXIN:

Connection-specific DNS Suffix . :
IPv6 Address. . . . . . . . . . . : 240e:360:40b:200:XXXX:XXXX:fc48:XXX
Link-local IPv6 Address . . . . . : fe80::XXXX:XXXX:fc48:XXX%64
IPv4 Address. . . . . . . . . . . : XXX.XX.XXX.XX
Subnet Mask . . . . . . . . . . . : 255.255.255.XXX
Default Gateway . . . . . . . . . : XXXX::ce1a:XXXX:XXXX:bf80%64

其中IPv6 Address是我想要的。

脚本代码

1
2
3
4
5
6
7
8
9
10
11
12
13
# 获取网络适配器的全局 IPv6 地址
$ipv6Addresses = (Get-NetIPAddress -AddressFamily IPv6 |
Where-Object { $_.InterfaceAlias -eq "DIANXIN" -and $_.PrefixOrigin -ne "LinkLayerAddress" }).IPAddress

# 获取第二个全局 IPv6 地址
if ($ipv6Addresses.Count -ge 2) {
$ipv6Address = $ipv6Addresses[1] # 第二个地址的索引为 1
Write-Host "Second IPv6 Address: $ipv6Address"
$ipv6Address | Set-Clipboard # 将 IPv6 地址复制到剪贴板
} else {
Write-Host "Second IPv6 Address not found for specified network adapter."
}

代码解释

  1. $ipv6Addresses = (Get-NetIPAddress -AddressFamily IPv6 | Where-Object { $_.InterfaceAlias -eq "DIANXIN" -and $_.PrefixOrigin -ne "LinkLayerAddress" }).IPAddress
    这行代码获取特定网络适配器(InterfaceAlias为”DIANXIN”)的全局 IPv6 地址,并将结果存储在 $ipv6Addresses 变量中。

  2. if ($ipv6Addresses.Count -ge 2) {
    这是一个条件语句,用于检查变量 $ipv6Addresses 中存储的 IPv6 地址数量是否至少为 2。

  3. $ipv6Address = $ipv6Addresses[1]
    如果存在至少两个 IPv6 地址,那么这行代码将第二个 IPv6 地址(索引为 1)存储在 $ipv6Address 变量中。

  4. Write-Host "Second IPv6 Address: $ipv6Address"
    这行代码输出第二个 IPv6 地址到控制台,并在前面添加一条消息 “Second IPv6 Address: “。

  5. $ipv6Address | Set-Clipboard
    这行代码将第二个 IPv6 地址复制到剪贴板中,以便将其粘贴到其他应用程序中使用。

  6. } else {
    这是条件语句的结尾,用于处理当 IPv6 地址数量小于 2 时的情况。

  7. Write-Host "Second IPv6 Address not found for specified network adapter."
    如果 IPv6 地址数量小于 2,那么这行代码输出一条消息到控制台,提示找不到第二个 IPv6 地址。

  8. Read-Host -Prompt "Press Enter to exit"
    这行代码在脚本执行完毕后等待用户按下 Enter 键,以保持 PowerShell 会话处于打开状态。

因为脚本会获取到两个ipv6地址,一个内网地址和一个外网地址,外网地址是第二个,所以选择了第二个地址。