在windows中编程添加带密码的wifi配置文件

tct7dpnv  于 2023-03-04  发布在  Windows
关注(0)|答案(3)|浏览(323)

是否可以通过编程方式将wifi配置文件添加到windows操作系统(最低版本为windows7)中?
我试过netsh的 add profileconnect,但是它对我不起作用。有没有powershell命令可以做到这一点?
我想为许多客户端自动设置一个特殊的ssid的wifi密码。
我希望有人有一个想法或可以给予我一个命令与此示例信息:

  • SSID:无线网络
  • 密码:密码123

谢谢

goqiplq2

goqiplq21#

我找到了一个添加WiFi配置文件的方法。
首先导出现有的wifi配置文件:

netsh wlan export profile name="WifiNetwork" folder="C:\path\" key=clear

然后,您将得到一个具有以下样式的XML文件:

<?xml version="1.0"?>
<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">
    <name>WifiNetwork</name>
    <SSIDConfig>
        <SSID>
            <hex>576966694E6574776F726B</hex>
            <name>WifiNetwork</name>
        </SSID>
    </SSIDConfig>
    <connectionType>ESS</connectionType>
    <connectionMode>auto</connectionMode>
    <MSM>
        <security>
            <authEncryption>
                <authentication>WPA2PSK</authentication>
                <encryption>AES</encryption>
                <useOneX>false</useOneX>
            </authEncryption>
            <sharedKey>
                <keyType>passPhrase</keyType>
                <protected>false</protected>
                <keyMaterial>Password123</keyMaterial>
            </sharedKey>
        </security>
    </MSM>
</WLANProfile>

那么你可以修改这个文件,并导入它添加此wifi与此命令:

netsh wlan add profile filename="C:\path\WifiNetwork.xml"

通过以下方式检查您的配置文件:

netsh wlan show profile

使用密钥检查您的配置文件:

netsh wlan show profiles WifiNetwork key=clear

我希望我能用这个信息帮助一些人。

9rygscc1

9rygscc12#

我编写了一个power shell脚本-以下代码中的前三行尚未经过测试,因为在我的脚本中,我从CSV文件中获取它-其余部分保持原样-并在我拥有的两个SSID上工作

$profilefile="ACprofile.xml"
$SSID="ACSSID"
$PW="12345678"

$SSIDHEX=($SSID.ToCharArray() |foreach-object {'{0:X}' -f ([int]$_)}) -join''
$xmlfile="<?xml version=""1.0""?>
<WLANProfile xmlns=""http://www.microsoft.com/networking/WLAN/profile/v1"">
    <name>$SSID</name>
    <SSIDConfig>
        <SSID>
            <hex>$SSIDHEX</hex>
            <name>$SSID</name>
        </SSID>
    </SSIDConfig>
    <connectionType>ESS</connectionType>
    <connectionMode>auto</connectionMode>
    <MSM>
        <security>
            <authEncryption>
                <authentication>WPA2PSK</authentication>
                <encryption>AES</encryption>
                <useOneX>false</useOneX>
            </authEncryption>
            <sharedKey>
                <keyType>passPhrase</keyType>
                <protected>false</protected>
                <keyMaterial>$PW</keyMaterial>
            </sharedKey>
        </security>
    </MSM>
</WLANProfile>
"

$XMLFILE > ($profilefile)
netsh wlan add profile filename="$($profilefile)"
netsh wlan show profiles $SSID key=clear
netsh wlan connect name=$SSID
zyfwsgd6

zyfwsgd63#

我使用了这里的内容,但在尝试添加配置文件时出现错误,因为我们的密码包含“无效字符”。(我得到的错误是“试图加载格式不正确的程序。”在谷歌搜索后发现了原因。)所以我添加了一些逻辑来替换那些不可接受的字符,使它们可以接受。
它还强制在脚本所在的文件夹中创建XML文件(出于某种原因,如果没有这个文件夹,我会遇到问题)。
最后,我在命令中添加了一个(注解掉的)user=all,如果您想为所有用户添加这个配置文件,而不仅仅是运行脚本的用户(我正在使用),可以很容易地取消注解。

$profilefile = "ACprofile.xml"
$SSID = "WifiNetwork"
$PW = "Password1234"

function Get-ScriptPath()
{
    # If using PowerShell ISE
    if ($psISE)
    {
        $ScriptPath = Split-Path -Parent -Path $psISE.CurrentFile.FullPath
    }
    # If using PowerShell 3.0 or greater
    elseif($PSVersionTable.PSVersion.Major -gt 3)
    {
        $ScriptPath = $PSScriptRoot
    }
    # If using PowerShell 2.0 or lower
    else
    {
        $ScriptPath = split-path -parent $MyInvocation.MyCommand.Path
    }

    # If still not found
    # I found this can happen if running an exe created using PS2EXE module
    if(-not $ScriptPath) {
        $ScriptPath = [System.AppDomain]::CurrentDomain.BaseDirectory.TrimEnd('\')
    }

    # Return result
    return $ScriptPath
}

# Replace Unacceptable values in password
function FormatKey($key) {
    $key = $key.replace("""", "&quot;")
    $key = $key.replace("&", "&amp;")
    $key = $key.replace("'", "&pos;")
    $key = $key.replace("<", "&lt;")
    $key = $key.replace(">", "&gt;")
    return $key
}

$PW = FormatKey($PW)
$SSIDHEX = ($SSID.ToCharArray() |foreach-object {'{0:X}' -f ([int]$_)}) -join''
$xmlfile = "<?xml version=""1.0""?>
<WLANProfile xmlns=""http://www.microsoft.com/networking/WLAN/profile/v1"">
    <name>$SSID</name>
    <SSIDConfig>
        <SSID>
            <hex>$SSIDHEX</hex>
            <name>$SSID</name>
        </SSID>
    </SSIDConfig>
    <connectionType>ESS</connectionType>
    <connectionMode>auto</connectionMode>
    <MSM>
        <security>
            <authEncryption>
                <authentication>WPA2PSK</authentication>
                <encryption>AES</encryption>
                <useOneX>false</useOneX>
            </authEncryption>
            <sharedKey>
                <keyType>passPhrase</keyType>
                <protected>false</protected>
                <keyMaterial>$PW</keyMaterial>
            </sharedKey>
        </security>
    </MSM>
</WLANProfile>
"

#Create XML File
$XMLFILE > "$(Get-ScriptPath)\$profilefile"

#Create, display, then connect to the new network
netsh wlan add profile filename="$(Get-ScriptPath)\$profilefile" #user=all
netsh wlan show profiles $SSID key=clear
netsh wlan connect name=$SSID

# Delete the XML file we created
Remove-Item "$(Get-ScriptPath)\$profilefile" -Force

相关问题