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


35

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

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


4
今すぐこれを試すことはできませんが、Process Monitorを実行し、レジストリを指定してみてください。設定を切り替えて適用すると変更されるキー/値を確認し、それに応じてスクリプトを記述します。
イスジ


Microsoft-Windows-SharedAccess無人Windowsセットアップコンポーネントはとても近いですが、それだけで、Windowsセットアップで動作します!technet.microsoft.com/en-us/library/ff715511.aspx
ジェイコブクラル

回答:


20

純粋な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のこの質問も参照してください。

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


1
ああ、私はあなたがPowerShellでCOM相互運用ができるとは知りませんでした!私はあなたには、いくつかの必要な仮定[System.Runtime.Interopservices.Marshal]::ReleaseComObject(...)に振りかけた。
ジェイコブ・クラール

EnableSharingPowerShellをAdministrator:Exceptionとして実行しているにもかかわらず、への呼び出しはこの例外をスローしています: "1"引数で "EnableSharing"を呼び出す例外: "イベントはサブスクライバーを呼び出すことができませんでした(HRESULTからの例外: 0x80040201) "->呼び出しのターゲットによって例外がスローされました。->イベントは、サブスクライバーのいずれかを呼び出すことができませんでした(HRESULTからの例外:0x80040201)
ジェイコブクラー

regsvr32 hnetcfg.dll管理者として手動で実行してみてください。
utapyngo

「アダプタのパブリックインターフェイスを有効にする」とはどういう意味でしょうか。
ジェイコブクラル

2
Powershellの新しいバージョンでは、.SharingTypeは.SharingConnectionType
Baodad

9

このための簡単なコマンドラインツールを作成しました。

  1. ダウンロードして解凍するかgit clone git@github.com:utapyngo/icsmanager.git

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

  3. HNetCfgCOMライブラリーの登録:(regsvr32 hnetcfg.dllこれはにある標準ライブラリーです%WINDIR%\System32

コマンドラインの使用

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

    cdicsmanagerディレクトリ(またはicsmanager-master、あなたは、zipファイルをダウンロードした場合)。

  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で問題を開いてください。プルリクエストも歓迎します。


きちんとした。これは、NETCONLibと呼ばれる外部バイナリを使用します。それはどこから来たの?それは何をするためのものか?
ジェイコブクラル

あぁ。これは、Windowsに含まれている「NetCon 1.0タイプライブラリ」のCOMクラスラッパーです。
ジェイコブクラル

@JacobKrall、はい、それはにありC:\Windows\System32\hnetcfg.dllます。
utapyngo

これは私が望んでいることを正確に行うように見えます-私はそれを試してみます。
ジェイコブクラル

1
申し訳ありませんが、私は数ヶ月前にそれをやったので、HNetCfgをに手動で登録する必要があることを忘れていましたregsvr32 hnetcfg.dll。そしてhnetcfg.dllmsdn.microsoft.com
en

5

私の理解では、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

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

何でも試す前にリブートしてください。


1
XPライセンスを持っていない場合、XPからファイルをコピーすることは合法ですか?
utapyngo

1
Windows 7 64ビットでこれを試してみました。XP 64ビットからファイルをコピーしました。管理者として実行しています。エラー:The following helper DLL cannot be loaded: IPMONTR.DLL. The following helper DLL cannot be loaded: IPPROMON.DLL.
utapyngo

1
「ヘルパーの追加」でも試してみましたが、64ビットでは機能しないことを確認して申し訳ありません。両方のOSで正しいdllを移植する合法性に関しては、これは不明です。Windowsファイルを変更する権利はありませんが、それらをコピーすることはXPライセンスで禁止されていない可能性があります(Microsoftがこれを事前に予測できたのは驚かされるでしょう)。
ハリーマック

1
それは64ビットWindowsでは機能しないという答えで言及されるべきです。また、ファイルはXP 32ビットからコピーする必要があることにも言及してください。
utapyngo

@utapyngo:64ビットでこの機能を実行する方法が実際にないことを確信することはできません。私の研究によると、問題はこれら2つより多くのdllをコピーする必要があることですが、問題を完全に分析するには、私が与えることができるよりも多くの時間が必要です。
harrymc

2

以前私の同僚は、Windowsの専用ツールnetshを使用してこれを行っていました。私自身はこれをやったことがないので、Microsoft Netshのドキュメントをご覧になることをお勧めします。

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


6
で行うことが可能であったnetsh routingのWindows XPでが、Windows 7には、彼らはそのコマンドを削除しました。だからこそ、私はWindows 7について質問しているのです。
utapinngo12年

2

以下が動作するはずです

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

8
で行うことが可能であったnetsh routingのWindows XPでが、Windows 7には、彼らはそのコマンドを削除しました。だからこそ、私はWindows 7について質問しているのです。
utapyngo13年

1

残念ながら、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

「」「」が必要であることに注意してください。楽しむ。


1

私が読んだものに基づいて、投稿した人がnetsh7以降で機能しない場合、それは間違っています。厳密に " netsh routing"であれば、正しいかもしれませんが、これは機能します。Windows8.1で作成したバッチファイルの内容を表示しようとしています。通常のコメントや情報を入手する代わりに、完全な情報でそれらを支援します。

まず、共有する接続が実際に接続を共有するように設定されていることを確認する必要があります。ここにあるこのリンクを使用すると、次のことができます。

http://windows.microsoft.com/en-us/windows/set-internet-connection-sharing#1TC=windows-7

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

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

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

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

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

  2. [接続]タブをクリックし、[接続にダイヤルしない]をクリックします。

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

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

  5. [プロキシサーバー]で、[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で機能します。ソースのワイヤレス接続を共有しようとしている場合も同様に機能する場合があります。


スーパーユーザーへようこそ!詳細な回答をありがとう、私はあなたの質問を編集して、テキストの一部を合理化し、バットファイルの内容をコードブロックに入れました。それに問題がある場合は、他のフォーマットの指示を見ることができます。コードの意味を変更していないことを確認してください。
ベルティエブ

ええ、それは結構です、ありがとう。書式設定をもっとうまくやるべきだと思っていました。実際にそこに行かなくて済むように、MSリンクに触れてください。
user2562950

心配する必要はありません。マークダウン構文を十分にすばやく取得できます:)リンクコンテンツを含めることは、質問への回答に関するポリシーの一部です。リンクは古くなったり、変更されたり、消えたりする可能性があります。これは、Microsoftの場合には起こりそうにありませんが、それでも非常に可能です。ソリューションに必要なものすべてを回答自体に含めることをお勧めします。あなたからのより良い答えを見るのを楽しみにしています!
ベルティエブ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.