在Win10上通过powershell脚本实现静态IP与文件夹共享的配置方法

想把家里的台式机的电脑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

内容声明与版权协议

  • 版权协议:本文采用 CC BY-NC-SA 4.0(署名-非商业性使用-相同方式共享) 协议进行许可。转载、演绎请务必保留作者署名及原文链接,且不得用于商业目的。
  • AI 辅助说明:本博客部分内容(如排版设计、个别局部、特定对话片段等)可能由 AI(LLM大语言模型)辅助生成。作者在此明确声明:本人对文章的核心框架、思想立论与最终呈现拥有绝对主导权与最终解释权。
  • 观点免责:文中明示的由 AI 生成的特定文本、对话输出,仅作为理性探讨以及观点展示,不代表本人真实立场、价值观或事实背书。对于因 AI 幻觉造成的客观事实偏差,请读者审慎甄别。
  • 认知时效性:文章仅代表作者在撰写当下的认知状态与情绪切片。随着个人心智迭代与客观事物发展,作者观点可能发生演变。欢迎基于理性的交流与批评。