PythonでWindowsコンピューターユーザーのフルネームを取得したい。
同等のバッチコマンドを見つけました。
Net User "%USERNAME%" /domain | FIND /I "Full Name"
フルネームを返します(例:Full Name John Doe
)。
私はsubprocess
を使用して次の方法を実行しましたが、いくつかのPythonモジュールでそれを行うためのよりネイティブな方法があるかどうか疑問に思っています。
import getpass
import subprocess
import re
username = getpass.getuser()
p = subprocess.Popen(
'Net User %s /domain' % username,
stdout=subprocess.PIPE, stderr=subprocess.PIPE
)
info, err = p.stdout.read(), p.stderr.read()
full_name = re.findall(r'Full Name\s+(.*\S)', info)
print(full_name)
ありがとう
@Bobからのコメントに基づいて、以下はWindowsで動作し、純粋にPythonですが、_pywin32
_をインストールする必要があります( this Recipe に基づいて) :
_import win32api
import win32net
user_info = win32net.NetUserGetInfo(win32net.NetGetAnyDCName(), win32api.GetUserName(), 2)
full_name = user_info["full_name"]
_
subprocess
のみを使用する問題のスクリプトの別の短いバージョンは次のとおりです。
_import subprocess
name = subprocess.check_output(
'Net User "%USERNAME%" /domain | FIND /I "Full Name"', Shell=True
)
full_name name.replace(b"Full Name", b"").strip()
_
注:最後の例では、最後の行を次のように変更する必要があります...replace("Full Name", "").strip()
Python 2.7。の場合
これを行うより直接的な方法は、Active Directoryにクエリを実行することです。ユーザーの検索を実行してから、displayName
属性を取得します。 (これは、Windowsに表示される_Full Name
_にマップされます。)
ここには2つのオプションがあります。
これはWindows固有のものであり、_pywin32
_ライブラリが必要です。 ADSI APIに依存しているため、Windowsでのみ機能します。
_from pyad import aduser
user = aduser.ADUser.from_cn(username)
print user.get_attribute("displayName")
_
ユーザー名の取得方法はあなた次第です。 getpass.getuser()
、_os.environ["USERNAME"]
_(Windowsのみ)などを使用できます。
これは標準のLDAPプロトコルに準拠しており、純粋なPython実装なので、どのクライアントOSからでも動作するはずです。
生のLDAPクエリの使用は、ADSIの抽象化よりもかなり複雑です。ドキュメント(きちんとしたチュートリアルがあります)を読み、ldap3を介したMicrosoft ADの操作に関するチュートリアルを検索することをお勧めします。
考えられる問題の1つは、ユーザー名(CN)だけで検索すると、間違ったオブジェクトが表示される可能性があることです。複数のOUにわたって同じCNを持つ複数のオブジェクトを持つことが可能です。より正確にしたい場合は、SIDなどの一意の識別子を使用できます。