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

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

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

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

PowerShell

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

Q&A

解決済

4回答

3050閲覧

エクセルVBAからPOWERSHELLを利用して「アクティブネットワークの表示」を取得したい

CIBI

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

PowerShell

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

0グッド

0クリップ

投稿2020/06/16 04:50

前提・実現したいこと

実現したいことは、エクセルのマクロで「コントロールパネル]>「ネットワークと共有センター」で
表示される「アクティブなネットワークの表示」の状態を取得したいのです。
ネットで検索していると「POWERSHELL」にて[GET-NETCONNECTIONPROFILE」コマンドを実行すると
表示される結果の「NETWORKCATEGORY」欄が該当することがわかりました。

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

ネットのサンプルを流用しつつ下記のマクロを作成し実行しました。
POWERSHELLは起動していますが結果を得ることが出来ませんでした。

該当のソースコード

Dim WSH As Object
Dim RES As Object
Dim cmdstr As String, tmp As String
Set WSH = CreateObject("WScript.Shell")

cmdstr = "Get-NetConnectionProfile"
Set RES = WSH.Exec("powershell -nologo -ExecutionPolicy Bypass -Command " & cmdstr)

Do While RES.Status = 0
Sleep 100
Loop

tmp = RES.StdOut.ReadAll
MsgBox (tmp)

Set RES = Nothing
Set WSH = Nothing

試したこと

マクロの書き方の問題かと思い、下記の表示を試して見ましたが取得できませんでした。
'Set objExec = objWshShell.Exec("powershell -nologo -command " & cmdstr)
'Set objExec = objWshShell.Exec("powershell -nologo -ExecutionPolicy RemoteSigned -Command """ & cmdstr & """ -Verb Runas")
'Set objExec = objWshShell.Exec("powershell -nologo -ExecutionPolicy RemoteSigned -Command " & cmdstr)
'Set objExec = objWshShell.Exec("powershell -nologo -ExecutionPolicy RemoteSigned -Command " & cmdstr & " -Verb Runas")
但し、
"Get-NetConnectionProfile"コマンドのみ取得できず、
他で試した、"get-date"や"get-volume","ipconfig"などは取得できています。

powershellやwscriptの基本もよく理解していない初心者が
サンプルを見ながらマクロを作成する時点で問題はあるかと思いますが
皆様のお力をお借りしたく質問させていただきました。
宜しくお願い致します

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

OS:WINDOWS 8.1
POWERSHELLバージョン:4.0
EXCEL:2013

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

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

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

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

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

guest

回答4

0

(間違って回答欄に記入してしましましたがそのままにして置きます。)

投稿2020/06/18 00:54

編集2020/06/18 00:59
tosi

総合スコア553

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

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

0

度々すみません。
tosi様のサンプルの
Result = WSH.Run("PowerShell -NoExit -nologo -ExecutionPolicy Bypass -Command " & cmdstr, 4, True)でpowershellを"sysnative"のフルパスで置き換えてもデータ取得できました。
追記しておきます。ありがとうございました。

投稿2020/06/18 00:05

CIBI

総合スコア1

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

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

tosi

2020/06/18 00:59

32bit版VBAから64bitのPowerShel起動出来るんですね。参考になりました。
guest

0

tosi様
有難うございました。
やっと下記の記述でデータを取ることができました。
cmdstr="C:\Windows\sysnative\WindowsPowerShell\v1.0\powershell.exe -nologo -ExecutionPolicy Bypass -Command get-netconnectionprofile"
Set res = WSH.Exec(cmdstr)
32bitプログラムから64bitのpowershellを呼び出す場合system32をsysynativeに置き換えなければならないのですね。勉強になりました。
本当にtosi様のコメントのおかげで解決できました。
感謝いたします。

投稿2020/06/17 23:54

CIBI

総合スコア1

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

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

0

ベストアンサー

Get-NetConnectionProfileは32bitのPowerShellでは動きません。
https://stackoverflow.com/questions/28156066/how-to-resolve-get-netconnectionprofile-provider-load-failure-on-x86-powershel

下記のコードでGet-NetConnectionProfileコマンドが正常に動くか試して見て下さい。

VBA

1Sub Test_Sample_Miniature() 2 Dim WSH As Object 3 Dim cmdstr As String 4 Dim Result 5 Set WSH = CreateObject("WScript.Shell") 6 cmdstr = Chr(34) & "& {Get-NetConnectionProfile}" & Chr(34) 7 Result = WSH.Run("PowerShell -NoExit -nologo -ExecutionPolicy Bypass -Command " & cmdstr, 4, True) 8 Set WSH = Nothing 9End Sub

Get-NetConnectionProfileをPowerShell32/64で動かした画像を添付いたします。
イメージ説明
イメージ説明
同様なエラーが出る様でしたら64bit版のVBAを利用すれば動くと思われます。

投稿2020/06/17 01:28

tosi

総合スコア553

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

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

CIBI

2020/06/17 07:46

tosi様 返信遅くなり申し訳ありません。 貴重なご意見有難うございました。 test_sample_Miniature()実行しましたところ やはり32bitのpowershellが起動しているようで 32bitのエラーが表示されました。 私も64bitのpowershell を起動して試したところ 上手く取得できているので64bit版powershellが起動すれば 取得できそうです。 ”powershell.exe -ExecutionPolicy Bypass Start-Process C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe”と フルパスで入力してもやはり32bitが起動します。 ヒント大変参考になりました。 もう少しトライしてみます。 有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問