🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
WMI

WMIは、Windowsのシステムを管理する共通インターフェース。OSやコンピュータに関するインベントリ情報を取得し、設定・管理することが可能です。監視情報のデータ構造をCIMで標準化し、監視対象に関係なく共通のインターフェースを利用できます。

VBA

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

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

解決済

1回答

3322閲覧

WMIでリモートコンピューターにアクセスした際のAccessでファイルが読み込めない

odango

総合スコア3

WMI

WMIは、Windowsのシステムを管理する共通インターフェース。OSやコンピュータに関するインベントリ情報を取得し、設定・管理することが可能です。監視情報のデータ構造をCIMで標準化し、監視対象に関係なく共通のインターフェースを利用できます。

VBA

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

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

0クリップ

投稿2019/08/08 06:17

編集2019/08/08 06:33

現在、社内システムの開発中です。
LAN系がAとBの二つがあり、1台両方のLANに属しているPC X (Windows)があります。
このとき、LAN AのPCから LAN BのファイルサーバYの閲覧を行おうとしております。
ある程度はやってみたのですが、Access でファイルが読み込めないことが発覚しました。
良い方法はありませんでしょうか。

現在は、PC X にAccess VBAを置いて、LAN A上のPCからWMIにて Xにログイン、
バッチを叩いてAccess VBAを実行しています。
Access VBA はLAN B上のサーバにクエリを発行してaccdb上にコピーした後、
クエリで選択されたLAN B上のパスのテキストファイルからデータをクロールします。
あとは Access を Xの共有フォルダ上においておき、
LAN Aからアクセスを開いてテーブルをコピーするだけでデータをクロールできるようにしよう、と考えておりました。

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

LAN AからAccessを実行した際、 LAN B ファイルサーバ Y 上のテキストファイルが見つかりません。 WMI は添付の通りで、Xが見れるファイルはすべて見れると思っておりました。 実態は違うのでしょうか。 回避策はありませんでしょうか。 WMIの設定を変える必要があるのでしょうか。 お手数ですが、ご指導のほどよろしくお願いいたします。

該当のソースコード

VBScript

1'RemoteCrawl.vbs (A上で実行) 2RemoteExecute "PCX",".\PCXUSER","","cmd.exe /c D:\共有フォルダ\データベース\DoAccess.vbs" 3 4Function RemoteExecute(strServer, strUser, strPassword, CmdLine) 5Const Impersonate = 3 6RemoteExecute = -1 7Set Locator = CreateObject("WbemScripting.SWbemLocator") 8Set Service = Locator.ConnectServer(strServer, "root\cimv2", strUser, strPassword) 9Service.Security_.ImpersonationLevel = Impersonate 10Set Process = Service.Get("Win32_Process") 11result = Process.Create(CmdLine, , , ProcessId) 12If (result <> 0) Then 13WScript.Echo "Creating Remote Process Failed: " & result 14Wscript.Quit 15End If 16RemoteExecute = ProcessId 17End Function

VBScript

1'DoAccess.vbs(b上で実行) 2Set objArgs = Wscript.Arguments 3runXLmacro 4 5Function runXLmacro() 6On Error Resume Next 7Dim AcApp 8Set AcApp = CreateObject("Access.Application") 9AcApp.visible = true 10AcApp.OpenCurrentDatabase "D:\共有フォルダ\データベース\データ収集.accdb" 11AcApp.Run("Crawl") 12 13if err.Number <> 0 then 14Set fso = CreateObject("Scripting.FileSystemObject") 15Set tso = fso.CreateTextFile("Error.txt", true) 16tso.Write(err.description) 17tso.Close 18End if 19 20End Function

VBA

1'Access データ収集.accdb 2Public Sub Crawl() 3 'LAN B 上のSQL Server からファイルパスをSelectしてローカルテーブルにInsert(これは問題なく完了) 4 GetURLs 5 6  'ファイルサーバ Y からテキストファイルを開いてローカルテーブルにInsert 7 InsertCrawlData 8End Sub 9 10 11Public Sub InsertCrawlData() 12 13 Dim rs As ADODB.Recordset 14 Set rs = New ADODB.Recordset 15 16 Dim rs2 As ADODB.Recordset 17 Set rs2 = New ADODB.Recordset 18 19 rs.Open "Select Path From FilePaths ", cn, adOpenDynamic, adLockPessimistic 20 rs2.Open "TextDataTable", cn, adOpenDynamic, adLockPessimistic 21 22 Do While Not rs.EOF 23 24 On Error Resume Next 25 'テキストセット 26 27 Dim ts As TextStream 28 Set ts = fso.GetFile(Trim(rs("Path").Value)).OpenAsTextStream 29 30 InsertMain ts, rs, rs2 31 32 Err.Number = 0 33 rs.MoveNext 34 Loop 35 36End Sub 37 38Public Sub InsertMain(ts As TextStream, rs As ADODB.Recordset, rs2 As ADODB.Recordset) 39 Dim s As String 40 41 Do Until ts.AtEndOfStream 42 43 s = ts.ReadLine 44 If Err.Number = 0 Then 45 rs2.AddNew 46 rs2("Path").Value = s 47 End If 48 rs2.Save 49 Loop 50End Sub

試したこと

・Xをリモートデスクトップで起動してAccessを実行→◎
・ファイルサーバYをXのネットワークドライブにする→×

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

A上のPC Windows 10
X Windows 7
Y Windoes Server 2016

WMI の参照元 https://okwave.jp/qa/q6806531.html

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

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

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

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

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

odango

2019/08/08 06:34

修正しました。 ご指摘ありがとうございました。 初めての利用につき、非常に助かります。
guest

回答1

0

ベストアンサー

直接AからYを参照しようとする形になり、別のネットワークなので参照できていないのではないでしょうか。

できるだけルーティング設定などを触らない簡易な方法であれば、XでVBAを実行してYからXにファイルコピーしておき、AからはXのファイルを参照するのが安全牌なように思います。

投稿2019/08/08 10:41

Secret

総合スコア220

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

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

odango

2019/08/09 02:49

ご返答、ありがとうございました。 おっしゃられる通り、AからYとして認識されているようです。 WMIの ImpersonationLevel = Impersonate がかなり怪しいかとは思うのですが、 いい方法が思いつかず… あきらめて夜間バッチでY上のファイルをX上にコピーするツールを作成しようかと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問