想把家里的台式机的电脑IP固定下来,但是Win10的设备UI跟控制面板两套设置GUI经常冲突不一致。这是是使用powershell的版本。在此基础上,希望在局域网内共享一个文件夹,方便手机跟其他电脑之间文件通信。
静态IP配置
以下是静态IP的powershell的配置脚本,需要用管理员身份打开powershell
# ==========================================
# WiFi 静态 IP 暴力锁定脚本 (绕过所有 GUI 干扰)
# ==========================================
Write-Host "正在扫描当前活动的 WiFi 网卡..." -ForegroundColor Cyan
# 1. 精准抓取当前正在联网的 WiFi 网卡
$Adapter = Get-NetAdapter | Where-Object { $_.Status -eq 'Up' -and ($_.Name -match "WLAN|Wi-Fi|无线" -or $_.InterfaceDescription -match "Wireless|Wi-Fi|802.11") } | Select-Object -First 1
if (-not $Adapter) {
Write-Host "[错误] 未找到已连接的 WiFi 网卡,请确认已连上 WiFi!" -ForegroundColor Red
exit
}
$NetName = $Adapter.Name
Write-Host "找到 WiFi 网卡: [$NetName]" -ForegroundColor Green
# 2. 通过 WMI 获取当前正确的网络参数(防止用户瞎猜网关导致断网)
$WmiConfig = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object { $_.InterfaceIndex -eq $Adapter.ifIndex -and $_.IPEnabled -eq $true }
$CurrentIP = $WmiConfig.IPAddress[0]
$CurrentMask = $WmiConfig.IPSubnet[0]
$CurrentGateway = $WmiConfig.DefaultIPGateway[0]
$CurrentDNS = if ($WmiConfig.DNSServerSearchOrder) { $WmiConfig.DNSServerSearchOrder[0] } else { "223.5.5.5" } # 默认给个阿里DNS
Write-Host "`n当前 WiFi 动态分配的网络信息如下:"
Write-Host "IP 地址: $CurrentIP"
Write-Host "子网掩码: $CurrentMask"
Write-Host "默认网关: $CurrentGateway"
Write-Host "首选 DNS: $CurrentDNS"
# 3. 交互确认
Write-Host "`n是否将上述 IP 直接锁定为静态 IP?" -ForegroundColor Yellow
$choice = Read-Host "输入 Y 锁定当前IP,输入 N 手动指定新IP (Y/N)"
if ($choice -match "^[Yy]") {
$TargetIP = $CurrentIP
$TargetMask = $CurrentMask
$TargetGateway = $CurrentGateway
$TargetDNS = $CurrentDNS
} else {
$TargetIP = Read-Host "请输入新的静态 IP (如 192.168.1.88)"
$TargetMask = Read-Host "请输入子网掩码 (直接回车默认为 $CurrentMask)"
if ([string]::IsNullOrWhiteSpace($TargetMask)) { $TargetMask = $CurrentMask }
$TargetGateway = Read-Host "请输入网关 (直接回车默认为 $CurrentGateway)"
if ([string]::IsNullOrWhiteSpace($TargetGateway)) { $TargetGateway = $CurrentGateway }
$TargetDNS = Read-Host "请输入 DNS (直接回车默认为 $CurrentDNS)"
if ([string]::IsNullOrWhiteSpace($TargetDNS)) { $TargetDNS = $CurrentDNS }
}
Write-Host "`n正在绕过 GUI,向系统底层强制写入静态 IP..." -ForegroundColor Cyan
# 4. 使用 netsh 暴力写入(最可靠的方式,无视 GUI 状态)
# 设置 IP、掩码、网关
$ipCmd = "netsh interface ip set address name=`"$NetName`" source=static addr=$TargetIP mask=$TargetMask gateway=$TargetGateway"
Invoke-Expression $ipCmd
# 设置 DNS
$dnsCmd = "netsh interface ip set dns name=`"$NetName`" source=static addr=$TargetDNS register=primary"
Invoke-Expression $dnsCmd
# 备用 DNS(可选,设为 114.114.114.114 增加稳定性)
$dnsCmd2 = "netsh interface ip add dns name=`"$NetName`" addr=114.114.114.114 index=2"
Invoke-Expression $dnsCmd2 | Out-Null
Write-Host "`n==========================================" -ForegroundColor Green
Write-Host "配置完成!你的 WiFi IP 已被底层焊死为: $TargetIP" -ForegroundColor Green
Write-Host "GUI 里的显示如果不同步,请直接无视,以实际生效为准。" -ForegroundColor Green
Write-Host "==========================================" -ForegroundColor Green
按提示操作即可。
配置指定文件夹共享
可以重开一个powershell,然后以管理执行
# ================= 配置区 =================
$SharePath = "E:\bhshare"
$ShareName = "bhshare"
$ShareUser = "你的新建的用于共享的用户"
$SharePass = "你的共享密码" # 设置一个标准强密码
# ==========================================
Write-Host "开始部署终极局域网共享..." -ForegroundColor Cyan
# 1. 启动必要服务并放行防火墙
$services = @("lanmanserver", "lanmanworkstation", "fdPHost", "FDResPub")
foreach ($s in $services) {
Set-Service -Name $s -StartupType Automatic -ErrorAction SilentlyContinue
Start-Service -Name $s -ErrorAction SilentlyContinue
}
Enable-NetFirewallRule -DisplayGroup "文件和打印机共享" -ErrorAction SilentlyContinue
Enable-NetFirewallRule -DisplayGroup "File and Printer Sharing" -ErrorAction SilentlyContinue
# 2. 彻底重建用户并加入 Users 组(确保权限完整)
if (Get-LocalUser -Name $ShareUser -ErrorAction SilentlyContinue) {
Remove-LocalUser -Name $ShareUser -ErrorAction SilentlyContinue
}
$SecPass = ConvertTo-SecureString $SharePass -AsPlainText -Force
New-LocalUser -Name $ShareUser -Password $SecPass -FullName "局域网专用共享账户" -PasswordNeverExpires -ErrorAction Stop | Out-Null
# 核心关键:必须加入 Users 组
Add-LocalGroupMember -Group "Users" -Member $ShareUser -ErrorAction SilentlyContinue
# 3. 修复注册表:允许本地账户进行网络验证(解决不弹密码框、直接拒绝的问题)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name "LimitBlankPasswordUse" -Value 1 -Type DWord -Force
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" -Name "LocalAccountTokenFilterPolicy" -Value 1 -Type DWord -Force
# 4. 创建目录并配置 NTFS 磁盘权限
if (-not (Test-Path $SharePath)) { New-Item -ItemType Directory -Path $SharePath -Force | Out-Null }
& icacls "$SharePath" /grant "${ShareUser}:(OI)(CI)F" /T /C /Q | Out-Null
# 5. 重建 SMB 网络共享
if (Get-SmbShare -Name $ShareName -ErrorAction SilentlyContinue) {
Remove-SmbShare -Name $ShareName -Force -Confirm:$false
}
New-SmbShare -Name $ShareName -Path $SharePath -FullAccess $ShareUser -ErrorAction Stop | Out-Null
# 6. 严谨获取【真实物理网卡】IPv4(过滤掉虚拟网卡)
$RealIP = (Get-NetIPConfiguration | Where-Object {
$_.IPv4DefaultGateway -ne $null -and
$_.InterfaceAlias -notmatch "vEthernet|WSL|Loopback|Default Switch|VMware|VirtualBox|Tailscale|ZeroTier|TAP"
} | Select-Object -ExpandProperty IPv4Address | Select-Object -First 1).IPAddress
if (-not $RealIP) {
# 备选提取常规局域网IP
$RealIP = (Get-NetIPAddress -AddressFamily IPv4 | Where-Object {
$_.IPAddress -match "^(192\.168\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.)" -and
$_.InterfaceAlias -notmatch "vEthernet|WSL"
} | Select-Object -First 1).IPAddress
}
Write-Host "`n=================================================" -ForegroundColor Green
Write-Host "【共享配置完成!】" -ForegroundColor Green
Write-Host "本机真实局域网 IP: $RealIP" -ForegroundColor Yellow
Write-Host "本机计算机名: \\$env:COMPUTERNAME" -ForegroundColor Yellow
Write-Host "访问路径: \\$RealIP\$ShareName" -ForegroundColor Yellow
Write-Host "共享用户名: $ShareUser" -ForegroundColor Yellow
Write-Host "共享密码: $SharePass" -ForegroundColor Yellow
Write-Host "=================================================" -ForegroundColor Green