none
グループポリシー ログオン MACアドレス取得 RRS feed

  • 質問

  • 質問がございます。

    グループポリシーを活用して、LAN上に存在しているPC群のMACアドレスをテキスト出力したいと思っています。

    サンプルとなるスクリプトのご紹介をいただけると大変助かります。

    よろしくお願いいたします。

    2017年11月29日 4:26

すべての返信

  • フォーラムオペレーターの栗下 望です。
    ruykwqef さん、ご投稿いただきありがとうございます。

    ご質問いただいた内容について回答とは無関係で恐縮ですが
    以下スレッドは ruykwqef さんの投稿されたスレッドでしょうか?

    ・グループポリシー ログオン MACアドレス取得
    https://okwave.jp/qa/q9402617.html

    もしそうでしたら、複数の場所で同一内容のスレッドを投稿されますと、
    回答が寄せられた際に、情報が分散してしまいますので、
    どちらか1つのスレッドに絞っていただければ幸いです。

    どうぞよろしくお願いいたします。


    MSDN/TechNet Community Support 栗下 望

    2017年11月29日 8:19
    モデレータ
  • oooohです。

    とりあえずサンプル投下します。

    NICの数やOS種類等に左右されると思いますので適宜加減してください。

    (表示上改行されると思いますがコマンドは一行です。)

    for /f "tokens=1,2,3 delims=," %%i in ('getmac /v /fo csv ') do ( echo %computername%,%%i,%%k>>%logonserver%\netlogon\MAC回収.txt )

    2017年11月29日 8:33
  • oooohさま、

    ありがとうございます。不在にしておりましたので応答が遅くなりました。

    サンプル1行をこのまま実行できるものですか?

    初心者にてわからず、教えてください。

    よろしくお願いいたします。

    2017年12月4日 6:07
  • oooohです。

    吐き出し先を「>>%logonserver%\netlogon\MAC回収.txt」にしてますので、

    ドメインアカウントにてログオンしており、

    netlogonに対する書き込み権限があるユーザーであればそのまま実行できます。

    権限が無い場合は吐き出し先を任意の書き込み権限がある共有フォルダ等に変えればよいです。

    netlogonに対するアクセス権があるかどうかはACLをみるか、実際に

    ①「%logonserver%\netlogon」がまず開けるかどうか、

    ②netlogon内にファイル作成ができるかどうかで確認できます。

    2017年12月5日 1:05
  • ご返信ありがとうございます。

    ご指摘のとおり、書き込み可能なパスへ変更し、書き込みを確認後、次のようにメッセージされます。

    上記の現在のディレクトリで CMD.EXE を開始しました。
    UNC パスはサポートされません。Windows ディレクトリを既定で使用します。

    C:\Windows>・ソfor /f "tokens=1,2,3 delims=," %i in ('getmac /v /fo csv ') do ( echo hostname,%i,%k ) 1>>\\hostname\pass1\filename.txt
    '・ソfor' は、内部コマンドまたは外部コマンド、
    操作可能なプログラムまたはバッチ ファイルとして認識されていません。

    ソfor・・・と出ている部分が気になります。

    よろしくお願いいたします。

    2017年12月5日 1:57
  • 次のサンプルスクリプトを検索いたしました。

    出力される内容としては期待どおりなのですが、

    グループポリシーのログオンへ当て込みたいので、書出し先をSYSVOL配下にしたいためパスの指定方法、

    加えて、UAC管理者パスのステップを外すにはどのようにアレンジすべきかご指導のほどお願いいたします。


    Option Explicit

    '
    ' 管理者権限に昇格  
    '

    Dim wmi
    Dim os
    Dim shapp
    Dim val

    do while WScript.Arguments.Count = 0 and WScript.Version >= 5.7  
      ' OSのチェック
      Set wmi = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")  
      Set os = wmi.ExecQuery("SELECT *FROM Win32_OperatingSystem")  
      For Each val in os
        if left(val.Version, 3) < 6.0 then 
        exit do  'Exit if not vista  
        End If
      Next  
       
      ' 管理者権限で実行
      Set shapp = CreateObject("Shell.Application")  
      shapp.ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """ uac", "", "runas"  
     
      WScript.Quit  
    loop  


    '
    ' 取得したい情報の変数定義
    '
    '
    Dim oClassSet ' クラスセット
    Dim oLocator ' ロケーター
    Dim oService ' サービス
    Dim oClass

    Dim strNow ' 日付取得
    Dim strProduct ' 型名
    Dim strSerial ' BIOSシリアル番号
    Dim strComputer ' コンピュータ名
    Dim strNICInfo
    Dim strSubnet ' サブネットマスク
    Dim strGateway ' デフォルトゲートウエイ
    Dim strDNS ' DNS

    Dim strTmp

    ' 日付情報取得
    strNow = Now


    ' ローカルコンピュータに接続する
    'Set oLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
    'Set oService = oLocator.ConnectServer
    strComputer = "." 
    Set oService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")  

    ' Win32_ComputerSystemProductクラスを使う
    Set oClassSet = oService.ExecQuery("Select * From Win32_ComputerSystemProduct")
    ' 型名を取得する
    For Each oClassSet in oClassSet
      strProduct = Trim(oClassSet.Name)
    Next
    Set oClassSet = Nothing


    ' Win32_BIOSクラスを使う
    Set oClassSet = oService.ExecQuery("Select * From Win32_BIOS")
    'コレクションを解析し、シリアル番号を取得する
    For Each oClass In oClassSet
      strSerial = Trim(oClass.SerialNumber)
    Next
    Set oClassSet = Nothing


    'Win32_OperatingSystemクラスを使う(オペレーティングシステム)
    Set oClassSet = oService.ExecQuery("Select * From Win32_OperatingSystem")
    'コレクションを解析し、コンピュータ名を取得する
    For Each oClass In oClassSet
      strComputer = Trim(oClass.CSName)
    Next
    Set oClassSet = Nothing

    ' Win32_NetworkAdapterConfigurationクラスを使う(ネットワークアダプターの属性と動作)
    Set oClassSet = oService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration")
    For Each oClass In oClassSet

      If oClass.IPEnabled = True Then ' IPアドレス無効は、無視する

        ' サブネット
        If isNull(oClass.IPSubnet) Then 
          strSubnet = ""
        Else 
          strSubnet = oClass.IPSubnet(0)
      'strSubnet = Join(oClass.IPSubnet, ",") 
          'strSubnet = Replace(strTmp, ",", "/")
        End If 
        
        
    ' デフォルトゲートウエイ
        If isNull(oClass.DefaultIPGateway) Then 
          strGateway = ""
        Else 
          strGateway = Join(oClass.DefaultIPGateway, ",")
        End If
        
        ' 優先DNS、代替DNS
        If isNull(oClass.DNSServerSearchOrder) Then 
          strDNS= ""
        Else
          strDNS = Join(oClass.DNSServerSearchOrder, ",") 
        End If  
        
        ' NIC名称、MACアドレス、IPアドレス
        If strNICInfo = "" Then
      ' 最初
      strNICInfo = Trim(oClass.Description) & "," & Trim(oClass.MACAddress) & "," & _
      oClass.IPAddress(0) & "," & strSubnet & "," & strGateway & "," & strDNS
        Else
      ' 2つ目以降
      strNICInfo = strNICInfo & "," & Trim(oClass.Description) & "," & Trim(oClass.MACAddress) & "," & _
      oClass.IPAddress(0) & "," & strSubnet & "," & strGateway & "," & strDNS
        End If
      End If
    Next


    '使用した各種オブジェクトを解放する
    Set oClassSet = Nothing
    Set oClass = Nothing
    Set oService = Nothing
    Set oLocator = Nothing


    '
    ' CSVファイルへの保存
    '

    Dim fso
    Dim tso
    Dim strOpenFile
    Dim strScriptPath

    ' ファイルの読み書きモードの指定(追加書き込みを使う)
    Const ForReading = 1, ForWriting = 2, ForAppending = 8

    ' ファイルシステムオブジェクトを使う
    Set fso = CreateObject("Scripting.FileSystemObject")
    ' スクリプトのあるパスを取得する
    strScriptPath = Replace(WScript.ScriptFullName,WScript.ScriptName,"")
    ' 保存するCSVファイル名を合成する(スクリプトのあるパスに保存)
    strOpenFile = fso.BuildPath(strScriptPath,"inventory.csv")
    ' ファイルを開く
    Set tso = fso.OpenTextFile(strOpenFile, ForAppending, true)
    ' 情報を書き込む(追加書き込みモード)
    tso.Write(strNow & "," & strProduct & "," & strSerial & "," & strComputer & "," & strNICInfo & vbCrLf)
    ' ファイルを閉じる
    tso.Close

    '使用した各種オブジェクトを解放する
    Set fso = Nothing
    Set tso = Nothing

    2017年12月5日 2:34
  • oooohです。

    >ソfor・・・と出ている部分が気になります。

    ちゃんとコピペしてください。

    2017年12月5日 3:17