プリンタの共有名を得る

wshでは,wshNetworkのEnumPrinterConnectionsでネットワークプリンタの共有名を得ることができるとあるのだが,実際にプリンタの共有名を調べてみるとちょっとおかしな感じだと言うことがわかった。

プリンタ名称   AAA Printer PRN2000
サーバ名       prnsv
共有名         prn_1

上記のような共有プリンタをクライアントに割り当てていた場合には,

\\prnsv\prn_1

このプリンタの共有名というのは,上記のようにになるはずなのに,EnumPrinterConnectionsでは,

\\prnsv\AAA Printer PRN2000

という共有名が返ってくる。

'WSHでのプリンタの共有名列挙
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set oDrives = WshNetwork.EnumNetworkDrives
Set oPrinters = WshNetwork.EnumPrinterConnections
sP = ""
On Error Resume Next
For i = 0 to oPrinters.Count - 1 Step 2
   sP = sP & "ポート " & oPrinters.Item(i) & " = " & oPrinters.Item(i+1) & vbcrlf
Next
WScript.Echo sP

本当の共有名を得るにはWMIを使わなくてはならないようだ。

'WMIでの共有名列挙
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Printer",,48)

sR = ""
For Each objItem in colItems
    sShareName = objItem.ServerName & "\" & objItem.ShareName
    if Len(sShareName)>0 then
        sR = sR & sShareName & ";"
    End If
Next
WSCript.Echo sR

 

トラックバック


URL から "-MoIyadayo" を削除してトラックバックを送信してください。
トラックバックは承認後に表示されます。