有没有办法根据活动目录策略安全组和计算机主机名设置默认打印机?
我在公司遇到一个问题。在我们的打印服务器上,有几个打印机,我们按照成本中心进行了分类。有多个打印机连接到同一个IP地址,而在Active Directory中,有一个特定的安全组会自动与用户关联。
我的问题是这样的:公司里很多用户,比如医生,常常在不同的地方工作,比如:工作站、手术室、医疗办公室。他们遇到很大的困难;每次他们换地方时,都无法去电脑的设置选项,把某个打印机设为默认打印机。
我想做的是创建一个Python代码,让它一直运行。当用户在域上登录电脑时,这段代码能够识别他们的登录信息,检查他们登录的电脑的主机名,以及他们的安全组成员身份。比如:用户“igorcarmona”属于安全组“IMP_TIC_COLOR”,如果他登录到电脑“TIC0068”,那么就会把打印机X设为默认打印机。
这里有一段代码草稿,但我在编写时遇到了一些困难。有没有人经历过类似的事情,可以帮我一下吗?
我已经尝试过这样做:
import os
import time
import pyad.adquery
import win32print
import socket
AD_SERVER_IP = "192.168.0.193"
PRINT_SERVER_IP = "192.168.0.230"
def check_user_login():
query = pyad.adquery.ADQuery()
query.execute_query(
type=AD_SERVER_IP,
attributes=["memberOf"],
where_clause="objectClass = 'user' AND sAMAccountName = '" + os.getlogin() + "'"
)
result = query.get_single_result()
if result:
groups = result['memberOf']
return groups
return []
def get_host_name():
return socket.gethostname()
def set_default_printer(printer_name):
printer_info = win32print.EnumPrinters(win32print.PRINTER_ENUM_CONNECTIONS, None, 1)
for printer in printer_info:
if printer_name in printer[2]:
win32print.SetDefaultPrinter(printer[2])
print("Default printer set to:", printer[2])
break
def main():
while True:
groups = check_user_login()
hostname = get_host_name()
if groups:
for group in groups:
print(group)
if "IMP_TIC_COLOR" in group and hostname.startswith("TIC"):
set_default_printer("IMP_TIC_COLOR")
time.sleep(30) # Verifica a cada 30 segundos
if __name__ == "__main__":
main()
1 个回答
0
你可以在组策略对象(GPO)的偏好设置部分使用项目级别的定位。
“在一个组策略对象(GPO)中,你可以包含多个偏好项,每个项都可以根据特定的用户或计算机进行定制,并且每个项的设置只会应用于相关的用户或计算机。”
所以,你可以根据用户登录的计算机名称来设置默认打印机。
“计算机名称定位项允许偏好项仅在计算机名称与指定的计算机名称匹配时应用于计算机或用户。”
请注意,使用计算机名称选择的项目级别定位并不意味着这是一个计算机策略,但这应该是一个应用于用户的单一GPO,其中包含多个偏好设置,以便根据登录的计算机名称为域用户设置不同的默认打印机。