- PR -

dsgetで得た値を環境変数へ代入したい

1
投稿者投稿内容
める
会議室デビュー日: 2008/01/30
投稿数: 8
投稿日時: 2008-01-30 22:20
いつも大変参考にさせていただいています。

Windows2003 ActiveDirectory下で、ユーザーがドメインログオン時にディレクトリ情報内の社員番号をローカルPCの環境変数へ代入したいのですが良い方法は無いでしょうか。

クライアントPCへdsquery.exe、dsget.exeをコピーし、dsquery user -name hogehoge | dsget user -empid とすればhogehogeの社員番号が取得できることは確認できたのですが、この返り値は余計な文字列が入ってる、環境変数への代入方法がわからないの2点で悩んでいます。

ぜひご指導いただけますよう、よろしくお願いします。
deanna
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 118
投稿日時: 2008-01-30 22:57
Windowsのバッチファイルならこんな方法で部分文字列が取得できますけど
SET DT=%date:~-10%
SET yy=%DT:~0,4%
SET mm=%DT:~5,2%
SET dd=%DT:~8,2%
ぴよこ
ベテラン
会議室デビュー日: 2006/12/11
投稿数: 61
投稿日時: 2008-01-31 09:16
こんなvbsでいけるかな?
テストしてません。
エラー処理も適当。
不要なコードも多数あり。

コード:
strDcName="DCName"  ' あなたのドメインコントローラ名
strAttribute="employeeID"
scope="subtree"

set net=CreateObject("Wscript.Network")
strFilter="(&(objectClass=user)(samaccountname="& net.UserName &"))"
strQuery="<LDAP://" & strDCName & ">;" & strFilter & ";" & strAttribute & ";" & scope

Set objConnection=CreateObject("ADODB.Connection")
objConnection.Provider="ADsDSOObject"
objConnection.Open "ADs Provider"
Set objCommand=CreateObject("ADODB.Command")
objCommand.ActiveConnection=objConnection
objCommand.Properties("Page Size")=1000
objCommand.CommandText=strQuery
Set objRecordSet=objCommand.Execute(strUserQuery)

if not objRecordSet.EOF then
  strEmployeeNumber=objRecordSet.Fields(strAttribute)
  if not strEmployeeNumber="" then
  strEmployeeNumber=Cstr(strEmployeeNumber)
    set shell =Wscript.CreateObject("Wscript.Shell")
    set WshEnvironment=shell.Environment("User")
    WshEnvironment.Item(strAttribute)=strEmployeeNumber
  end if
end if

める
会議室デビュー日: 2008/01/30
投稿数: 8
投稿日時: 2008-01-31 10:50
deannaさん、ぴよこさん早速のご回答ありがとうございます。

>> deannaさん
文字列操作なんですが、この操作の画面への返り値が複数行あります。
例)
empid
01234
dsget 成功

この場合はどのように変数に入るかでご教示いただいた手法が使えそうですね。

>> ぴよこさん
私自身vbsを理解していませんのでいただいたスクリプトの検証を勉強含めてさせていただきます。

ありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)