質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Q&A

解決済

1回答

3535閲覧

Javaによる「プライベートネットワーク」、「ゲストまたはパブリックネットワーク」の切り替え

teratail2020

総合スコア10

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

0グッド

0クリップ

投稿2020/03/29 09:22

編集2020/03/29 09:24

前提・実現したいこと

Javaからpowershellを起動させて「プライベートネットワーク」、「ゲストまたはパブリックネットワーク」を切り替えを行おうとしております。切り替えを行う前段階としてGet-NetconnectionProfileコマンドを実行したところ、以下のエラーが発生します。

発生している問題・エラーメッセージ

Get-NetconnectionProfile : CIM サーバーに接続できません。指定されたサービスはインストールされたサービスとして存在しませ ん。 発生場所 行:1 文字:1 + Get-NetconnectionProfile + ~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ResourceUnavailable: (MSFT_NetConnectionProfile:String) [Get-NetConnectionProfile], CimJ obException + FullyQualifiedErrorId : CimJob_BrokenCimSession,Get-NetConnectionProfile

該当のソースコード

・Javaソースコード String tempdirect; //コマンドファイルの保管場所 tempdirect = "powershell start-process " + new File("").getAbsoluteFile() + "\Command\PublicChange.bat" + " -verb runas"; ProcessBuilder netSetBat = new ProcessBuilder("cmd.exe", "/c",tempdirect); //batファイルを実行 try {  netSetBat.start(); } catch (IOException e) { // TODO 自動生成された catch ブロック  System.out.println("Fail to change public network"); } ・PublicChange.batファイルソースコード @echo on powershell Set-ExecutionPolicy RemoteSigned powershell Start-process powershell %~dp0\PublicChange.ps1 powershell Set-ExecutionPolicy Restricted Pause ・PublicChange.ps1ファイルソースコード Get-NetConnectionProfile Pause

試したこと

・コマンドプロンプトを立ち上げ powershell Get-NetConnectionProfileを実行:CIM サーバーに接続できません~のエラーが出力されます。

・コマンドプロンプトを立ち上げ、powershellコマンドでpowershellを起動後、Get-NetConnectionProfileコマンドを実行:正常作動(下記表示が出ます)

C:\Users\ユーザー名>powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6
PS C:\Users\ユーザー名>Get-NetConnectionProfile

Name : aterm-
InterfaceAlias : Wi-Fi 2
InterfaceIndex : 5
NetworkCategory : Public
IPv4Connectivity : Internet
IPv6Connectivity : NoTraffic

・PublicChange.batファイルソースコードを以下のようにして実行したところ
@echo on
powershell Set-ExecutionPolicy RemoteSigned
start powershell
powershell Set-ExecutionPolicy Restricted
Pause

以下の画面が出力されました。
PS C:\Windows\system32> Get-NetconnectionProfile
Get-NetconnectionProfile : CIM サーバーに接続できません。 ※以下同じ

一方、powershellを直接起動した後に、Get-NetconnectionProfileを実行すると以下の表示となりました。

新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6

PS C:\Windows\system32> Get-NetconnectionProfile

Name : aterm-
InterfaceAlias : Wi-Fi 2
InterfaceIndex : 5
NetworkCategory : Public
IPv4Connectivity : Internet
IPv6Connectivity : NoTraffic

PS C:\Windows\system32> までは同一なのに表示結果が異なる理由がわかりません。
ご存じの方がおられましたら教えていただけないでしょうか。
よろしくお願いします。

補足情報(FW/ツールのバージョンなど)

batファイルをpowershellで実行しているのは、管理者として実行を行わせるためです。
これにより、powershell Set-ExecutionPolicy RemoteSignedを実行可能としております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/03/29 09:42

> 新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6 Powershell (ICE) をつかえってこと
退会済みユーザー

退会済みユーザー

2020/03/29 09:48

そもそも、管理者実行をするなら 、そのアプリ自体, 管理者起動しないと管理者起動が失敗してるかとまた 管理者起動してないコマンドプロンプトで同じ手順をしてみてください。結果は同じくできないはずです
退会済みユーザー

退会済みユーザー

2020/03/29 09:48

また「Get-NetconnectionProfile」 は現在のネットワークprofileを取得してるのであって パブリックに切り替えるコマンドではありません。
teratail2020

2020/03/29 10:54

asahina1979 コメントありがとうございます。 ・管理者実行の有無にかかわらずpowershell Get-NetConnectionProfile ではCIM サーバーに接続できません。~のエラーがでます。一方、管理者権限無しではpowershell Set-ExecutionPolicy RemoteSignedコマンドにおいてSet-ExecutionPolicy : レジストリ キー 'HKEY_LOCAL_MACHIN~へのアクセスが拒否されました。とエラーが出ますが、管理者で実行したときはエラーは出ませんでした。javaからbatファイルを実行する際にもエラーは出てなく、管理者としての実行を許可するか否かのダイアログが発生しているため管理者起動は" -verb runas"コマンドにより成功していると思います。 ・Get-NetconnectionProfileコマンドはネットワーク切り替えを行う前段階にNetworkCategory でパブリックかプライベートか確認したり、切り替えるべきInterfaceIndexを取得する目的で実施しています。ネットワーク切り替えはここの問題が片付いてから進む予定です
guest

回答1

0

自己解決

ようやく解決方法がわかりました。私はウイルス対策ソフトとしてComodo Antivirusを用いているのですが、これがbatファイルの作動を停止させていました。この制限は「管理者として実行」しても解除されませんでしたが、Comodo Antivirusのアプリケーションのブロックを解除させることで解決することができました。またこの際、batファイル単体では解除後に正常に動作していてもJavaからProcessBuilderクラスを用いて読み込むと新しい制限ができており、bat実行時とは別のブロックを解除する必要がありました。コメントくださったasahina1979、ありがとうございました。またbatファイルを使わずにAdvapi32Utilクラスからレジストリをいじって値を変更/取得することもできそうです…。

投稿2020/03/31 15:24

編集2020/03/31 15:33
teratail2020

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問