1

Excel で作成した VBA スクリプトがあり、別の場所にある .ps1 powershell スクリプトを起動します。VB スクリプトは、ドキュメント内のセルから入力を取得し、そのセルの内容を文字列として使用して、powershell スクリプトでコマンドを実行します。たとえば、セル A1 に文字列 が含まれている場合、単純に powershell でコマンド"whoami"が実行されます。whoami

PowerShell を手動で起動して入力"nmap 127.0.0.1"すると、予想どおりの動作になりnmap、localhost で実行されます。私の問題はnmap、VB スクリプトを使用して実行しようとすると、VB で起動された PowerShell がnmapコマンドを認識せず、次のエラーが返されることです。

The term 'nmap' is not recognized as the name of a cmdlet, function, script file, or operable program.

手動で起動したシェルと Excel からのシェルの唯一の顕著な違いは背景です。VB で起動したシェルの背景は黒で、手動で起動したシェルの背景は青色です。それ以外は、exeへのパスは同じです。

私の VisualBasic スクリプトが実行可能な PowerShell を起動できないのはなぜnmapですか?

すべてのコードが保存されている PC に戻ったら、この投稿をソース コードで編集します。

EDIT1: VBA スクリプトのソースは次のとおりです。

a = Range("A1")
b = Range("A2")
Call Shell("powershell -noexit -file ""C:\...\test.ps1"" -cmd " + a + " -ipaddr " + b, vbMaximizedFocus)

これは、A1 (コマンド) と A2 (IP アドレス) から値を取得するだけです。

上記で呼び出される powershell スクリプトを次に示します (test.ps1)。

param (
[string]$cmd = "ERRORNOCMD",
[string]$ipaddr = "0.0.0.0"
)
[string]$execute = $cmd + " " + $ipaddr
invoke-expression $execute

これは、localhost IP でコマンド「nmap」を使用します。上で述べたように、適切に実行されるはずですが、nmap を認識しません。

これは、手動で開始したシェルと VBA シェル (青は手動) でコマンド「nmap 127.0.0.1」を実行した結果のスクリーンショットへのリンクです。重要なことではなく、ブラック ボックスの下にあるものを気にする必要はありません。

スクリーンショット

4

0 に答える 0