web-dev-qa-db-ja.com

コマンドラインを使用してインターネット接続の共有を有効にする方法

ネットワーク接続を右クリックして[共有]タブを開き、[他のネットワークユーザーがこのコンピュータのインターネット接続を介して接続することを許可する]チェックボックスをクリックすることで、手動で行うことができます。

このタスクを自動化する必要があります。これを行うためのコマンドラインツールまたはPowershellコマンドレットはありますか?

36
utapyngo

これは純粋なPowerShellソリューションです(管理者権限で実行する必要があります):

# Register the HNetCfg library (once)
regsvr32 hnetcfg.dll

# Create a NetSharingManager object
$m = New-Object -ComObject HNetCfg.HNetShare

# List connections
$m.EnumEveryConnection |% { $m.NetConnectionProps.Invoke($_) }

# Find connection
$c = $m.EnumEveryConnection |? { $m.NetConnectionProps.Invoke($_).Name -eq "Ethernet" }

# Get sharing configuration
$config = $m.INetSharingConfigurationForINetConnection.Invoke($c)

# See if sharing is enabled
Write-Output $config.SharingEnabled

# See the role of connection in sharing
# 0 - public, 1 - private
# Only meaningful if SharingEnabled is True
Write-Output $config.SharingType

# Enable sharing (0 - public, 1 - private)
$config.EnableSharing(0)

# Disable sharing
$config.DisableSharing()

social.msdn.Microsoft.com でこの質問も参照してください:

接続先のアダプターでパブリックインターフェイスを有効にし、ネットワークで使用できるようにするアダプターのプライベートインターフェイスで共有を有効にする必要があります。

21
utapyngo

シンプルなコマンドラインツール を作成しました。

  1. ダウンロード および解凍またはgit clone [email protected]:utapyngo/icsmanager.git

  2. build.cmdを実行してビルド

  3. HNetCfg COMライブラリを登録します:regsvr32 hnetcfg.dll(これは%WINDIR%\System32にある標準ライブラリです)

コマンドラインの使用法

  1. 管理者としてコマンドラインプロンプトを開く

    cdicsmanagerディレクトリ(またはZipをダウンロードした場合はicsmanager-master)に移動します。

  2. icsmanagerと入力します

    利用可能なネットワーク接続が表示されます。 GUID属性に注意してください。このツールを使用するには、少なくとも2つの接続が必要です。

  3. タイプicsmanager enable {GUID-OF-CONNECTION-TO-SHARE} {GUID-OF-HOME-CONNECTION}

    これでICSが有効になります。

PowerShellの使用法

  1. インポートモジュール:

    Import-Module IcsManager.dll

  2. ネットワーク接続を一覧表示します。

    Get-NetworkConnections

  3. インターネット接続の共有を開始します。

    Enable-ICS「共有する接続」「ホーム接続」

  4. インターネット接続の共有を停止します。

    ICSを無効にする


免責事項:私はまだツールをテストしていません。自己責任で使用してください。何かが機能しない場合は、GitHubで問題を開いてください。プルリクエストも歓迎します。

9
utapyngo

私の理解では、ルーティング機能はVistaからWindowsから削除され、現在Windows Serverでのみ利用可能です。

次のトリックは、インターネットでnetsh routing、ご自身の責任でお試しいただけます。まず、システムの復元ポイントの作成など、通常の予防策を提案します。

  1. 2003またはXPからIPMONTR.DLLおよびIPPROMON.DLLを取得します
  2. それらをWINDOWS\SYSTEM32にコピーします。
  3. 管理者としてコマンドプロンプト(cmd)で実行します。

    netsh add helper ipmontr.dll
    netsh add helper ippromon.dll

また、ルーティングとリモートアクセスサービスを自動起動に設定する必要がある場合もあります。

何かを試す前に再起動してください。

4
harrymc

私の以前の同僚は、Windows独自のツールnetshを介してこれを行っていました。私はこれを自分でやったことがないので、Microsoft netshのドキュメント を参照することをお勧めします。

私が覚えているように、それはそれをする必要がある場所ではかなり貧弱で多くのnetsh呼び出しでしたが、最終的にはうまくいきました...

2
Langhard

残念ながら、Windows 7以降にはそのようなcmdコマンドがないため、このVisual Basic関数を使用して実行しました。

Private Function EnableDisableICS(ByVal sPublicConnectionName As String, ByVal sPrivateConnectionName As String, ByVal bEnable As Boolean)  
    Dim bFound As Boolean
    Dim oNetSharingManager, oConnectionCollection, oItem, EveryConnection, objNCProps
    oNetSharingManager = CreateObject("HNetCfg.HNetShare.1")
    oConnectionCollection = oNetSharingManager.EnumEveryConnection
    For Each oItem In oConnectionCollection
        EveryConnection = oNetSharingManager.INetSharingConfigurationForINetConnection(oItem)
        objNCProps = oNetSharingManager.NetConnectionProps(oItem)
        If objNCProps.name = sPrivateConnectionName Then
            bFound = True
            MsgBox("Starting Internet Sharing For: " & objNCProps.name)
            If bEnable Then
                EveryConnection.EnableSharing(1)
            Else
                EveryConnection.DisableSharing()
            End If
        End If
    Next
    oConnectionCollection = oNetSharingManager.EnumEveryConnection
    For Each oItem In oConnectionCollection
        EveryConnection = oNetSharingManager.INetSharingConfigurationForINetConnection(oItem)
        objNCProps = oNetSharingManager.NetConnectionProps(oItem)
        If objNCProps.name = sPublicConnectionName Then
            bFound = True
            MsgBox("Internet Sharing Success For: " & objNCProps.name)
            If bEnable Then
                EveryConnection.EnableSharing(0)
            Else
                EveryConnection.DisableSharing()
            End If
        End If
    Next
    Return Nothing 'bEnable & bFound
End Function  

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    EnableDisableICS("YOUR ACTIVE NETWORK", "YOUR ADAPTOR TO SHARE", True)
End Sub

「」「」は必須です。楽しんで。

2
imad latch

以下はうまくいくはずです

netsh routing ip autodhcp install
netsh routing ip autodhcp set interface name="Local Area Connection(or whereever your internet connection is from)" mode=enable
netsh routing ip autodhcp set global 192.168.0.1 255.255.255.0 11520
1
Craig

私が読んだことによると、投稿した人がnetshが7以降で機能しない場合、それは誤りです。厳密に言えば「netsh routing "、私はあなたが正しいと思うかもしれませんが、これはうまくいきます-私はWindows 8.1で動作する私が作成したバッチファイルの内容を表示しようとしています。通常のコメントや情報を取得する代わりに、完全な情報でそれらを助けようとする。

まず、共有する接続が実際に接続を共有するように設定されていることを確認する必要があります。このリンクをクリックすると、そのための準備が整います。

WindowsヘルプでICS(インターネット接続の共有) を使用して共有インターネット接続をセットアップします。

  1. スタートボタンをクリックし、次にコントロールパネルをクリックしてネットワーク接続を開きます。検索ボックスに「adapter」と入力し、[ネットワークと共有センター]で[ネットワーク接続を表示

  2. 共有する接続を右クリックし、[プロパティ]をクリックします。管理者のパスワードまたは確認を求められた場合は、パスワードを入力するか、確認を提供します。

  3. 共有タブをクリックし、他のネットワークユーザーがこのコンピューターのインターネット接続を介して接続することを許可するチェックボックス。

上記の手順に従ってホストコンピュータでICSをセットアップした後、他のすべてのコンピュータ(ホストコンピュータではない)で次の変更を行います。

  1. スタートボタンをクリックし、コントロールパネルをクリックしてインターネットオプションを開き、 ネットワークとインターネット、次にインターネットオプションをクリックします。

  2. 接続タブをクリックし、次に接続をクリックしないでください

  3. LAN設定をクリックします。

  4. ローカルエリアネットワーク(LAN)の設定ダイアログボックスの自動構成自動検出設定および自動構成スクリプトを使用チェックボックスをオフにします。

  5. Proxy serverで、Use a proxy server for your LANチェックをオフにしますボックスをクリックし、[〜#〜] ok [〜#〜]をクリックします。

同様の手順も利用できます ここ

私の知る限り、これはWindows 7と8の両方で機能するはずです。

ここでのトピックはコマンドラインソリューションに関するものだったので、これは仮想ワイヤレスアダプターを構成して準備する方法のバッチファイルの内容です。

それが作成されたら、上記の手順を使用して、ワイヤレスデバイスによって表示される新しく作成された仮想アダプタとソース接続を共有していることを確認する必要がある場合があります。

接続共有.batファイル:

@echo off
set _my_datetime=%date%_%time%
set _my_datetime=%_my_datetime: =_%
set _my_datetime=%_my_datetime::=%
set _my_datetime=%_my_datetime:/=_%
set _my_datetime=%_my_datetime:.=_%

cd\
    if NOT EXIST "C:\TEMP\switch.txt" (
        GOTO :START
    ) ELSE (
        GOTO :STOP
    )

:START
REM Create Temp File for On and Off switch.
ECHO WOOHOO >"C:\TEMP\switch.txt"

REM -- Output everything that is happening into a file called wifi.txt.
REM -- Start out with a timestamp at the top to show when it was done.
REM -- All 'netsh' commands are for setting up the SSID and starting the    sharing.
REM -- I stop and start when starting the service just for prosperity.

echo _%_my_datetime% >"C:\TEMP\wifi.txt"
netsh wlan set hostednetwork mode=allow ssid=ITWORKS key=111222333 >>    "C:\TEMP\wifi.txt"
netsh wlan stop hostednetwork >>"C:\TEMP\wifi.txt"
netsh wlan start hostednetwork >>"C:\TEMP\wifi.txt"
echo MSGBOX "Wifi Sharing Started!" > %temp%\TEMPmessage.vbs
call %temp%\TEMPmessage.vbs
del %temp%\TEMPmessage.vbs /f /q
GOTO :END


REM -- This will turn ICS off and give a Prompt via VBS that you're turned off.
REM -- I timestamp when the service is turned off in the output file.
REM -- I delete the switch file to let the code know to turn it on when
REM -- when fired off again.  Tempmessage is the msgbox used to show the service
REM -- has been turned off.  Same for the msgbox above when it's on.

:STOP
echo OFF AT _%_my_datetime% >>"C:\TEMP\wifi.txt"
netsh wlan stop hostednetwork >>"C:\TEMP\wifi.txt"
DEL /Q "C:\TEMP\switch.txt"
echo MSGBOX "Wifi Sharing Stopped!" > %temp%\TEMPmessage.vbs
call %temp%\TEMPmessage.vbs
del %temp%\TEMPmessage.vbs /f /q

:END

いくつかのユニークな状況があり、上で見つけたものをつなぎ合わせなければならなかったので助けたいので、私はこれについての質問に答える以上に幸せです。

しかし、これを全体像として見ると、これはWindows 8.1で動作し、仮想アダプターへの接続を共有するラップトップへのイーサネット接続を使用します。ソースのワイヤレス接続を共有しようとしている場合も同様に機能します。

1
user2562950