tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル「コンピューター名」「ユーザー名」「所有者名」も表示
記事No16506
投稿日: 2019/09/27(Fri) 10:15
投稿者しずく
はじめまして、超初心者です。

VBSの掲示板を探したのですが、良い所がなくここにたどりつきました。
ネットワーク上のフォルダを監視するソースをネット上で見つけました。
基本的には、これでいいのですが、ただ
「コンピューター名」「ユーザー名」「所有者名」も表示したいのですが
皆目、分りません。どうか、先生方宜しく、お願い致します。

;;;見つけたソースです。

' --------------------------------------------------------------------
' VBAの時はSleepのAPI宣言(Declare)が必要
' Private Declare Sub Sleep Lib "kernel32" (ByVal dwMs As Long)
' --------------------------------------------------------------------
' 監視するフォルダの設定

fol_path = "D:\仕掛図"

' (変更前)フォルダ内のファイル一覧(更新日時付き)の取得
Redim path_list1(0)
GetFDate fol_path, path_list1

'Dim path_list0() ' VBAの時に必要
path_list0 = path_list1

Do
    WScript.Sleep(1000)   ' VBSの時
    'Sleep 1000: DoEvents ' VBAの時

    ' (変更後)フォルダ内のファイル一覧(更新日時付き)の取得
    Redim path_list2(0)
    GetFDate fol_path, path_list2

    ' 変更前後のファイル一覧(更新日時付き)の比較
    Redim comp_list(0)
    FComp path_list0, path_list2, comp_list

    ' 比較結果表示
    For i = 1 To Ubound(comp_list)
        MsgBox comp_list(i)
    Next

    ' 変更後を変更前として設定
    path_list0 = path_list2
Loop
' --------------------------------------------------------------------

' フォルダ内のファイル一覧(更新日時付き)の取得------------------------
Public Sub GetFDate(ByVal fol_path, ByRef path_list())
    Set fso = CreateObject("Scripting.FileSystemObject")

    For Each f In fso.GetFolder(fol_path).files
        ReDim Preserve path_list(UBound(path_list) + 1)
        path_list(UBound(path_list)) = _
            f.path & vbTab & fso.GetFile(f.path).DateLastModified
    Next

    For Each f In fso.GetFolder(fol_path).SubFolders
        GetFDate f.path, path_list
    Next

    Set fso = Nothing
End Sub
' --------------------------------------------------------------------

' ファイル一覧(更新日時付き)の比較------------------------------------
Public Sub FComp(ByRef ls1(), ByRef ls2(), ByRef comp_list())
    p1 = 1
    p2 = 1
    Do
        If p1 > Ubound(ls1) And p2 > Ubound(ls2) Then
            Exit Do
        End If

        fd1 = ""
        fd2 = ""
        If p1 <= Ubound(ls1) Then
            fd1 = Split(ls1(p1), vbTab)
        End If
        If p2 <= Ubound(ls2) Then
            fd2 = Split(ls2(p2), vbTab)
        End If

        If IsArray(fd1) = True And IsArray(fd2) = True Then
            fn1 = LCase(fd1(0))
            fn2 = LCase(fd2(0))
            If fn1 = fn2 Then
                If fd1(1) = fd2(1) Then
                ElseIf fd1(1) <> fd2(1) Then
                    ReDim Preserve comp_list(UBound(comp_list) + 1)
                    comp_list(UBound(comp_list)) = "(Mod)" & fd1(0)
                End If
                p1 = p1 +1
                p2 = p2 +1
            ElseIf fn1 < fn2 Then
                ReDim Preserve comp_list(UBound(comp_list) + 1)
                comp_list(UBound(comp_list)) = "(Del)" & fd1(0)
                p1 = p1 +1
            ElseIf fn1 > fn2 Then
                ReDim Preserve comp_list(UBound(comp_list) + 1)
                comp_list(UBound(comp_list)) = "(Add)" & fd2(0)
                p2 = p2 +1
            End If
        ElseIf IsArray(fd1) = True And IsArray(fd2) = False Then
            ReDim Preserve comp_list(UBound(comp_list) + 1)
            comp_list(UBound(comp_list)) = "(Del)" & fd1(0)
            p1 = p1 +1
        ElseIf IsArray(fd1) = False And IsArray(fd2) = True Then
            ReDim Preserve comp_list(UBound(comp_list) + 1)
            comp_list(UBound(comp_list)) = "(Add)" & fd2(0)
            p2 = p2 +1
        Else
            p1 = p1 +1
            p2 = p2 +1
        End If
    Loop

End Sub
' --------------------------------------------------------------------

[ツリー表示へ]
タイトルRe: 「コンピューター名」「ユーザー名」「所有者名」も表示
記事No16507
投稿日: 2019/10/01(Tue) 17:02
投稿者魔界の仮面弁士
> ネットワーク上のフォルダを監視するソースをネット上で見つけました。
> 基本的には、これでいいのですが、ただ

提示頂いたコードは、「ネットワーク上のフォルダ」ではなく、
D:\仕掛図\ を調べているように見えます。

D: ドライブがネットワークフォルダーに割り当てられているということでしょうか。



> 「コンピューター名」「ユーザー名」「所有者名」も表示したいのですが

ここでいう「コンピューター名」とは、何を指しているのでしょうか。
共有フォルダーを提供しているサーバーを指しているのか、
変更を行ったクライアント端末を指しているのか、それとも…?

同様に「ユーザー名」というのも、何を意味しているのか良く分かりませんでした。



「所有者名」というのが、ファイルのプロパティから
[セキュリティ]タブ → [詳細設定]ボタン → [所有者]欄で
参照できる情報のことだとしたら、下記の手段が思い当たります。


(案1) コマンドプロンプトから「DIR /q 対象ファイル」コマンドで調べる


(案2) PowerShell で「Get-Acl 対象ファイル」を呼び、Owner プロパティを調べる


(案3) WMI の Win32_LogicalFileSecuritySetting クラスの
 GetSecurityDescriptor メソッドから Win32_SecurityDescriptor クラスを得る
https://gallery.technet.microsoft.com/scriptcenter/de23dadf-9fc3-4994-adb3-d78cd8719e66

[ツリー表示へ]