当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何在 Active Directory 中自动填写计算机描述

作者:精品下载站 日期:2024-12-14 23:18:49 浏览:14 分类:玩电脑

如何在 Active Directory 中自动填写计算机描述


您可以在 Active Directory 中的计算机对象的描述中存储各种有用的信息。例如,有关计算机型号、硬件清单或上次登录用户名的信息。在本文中,我们将了解如何使用 PowerShell 自动填充和更新 Active Directory 中计算机对象的描述字段中的信息。

使用 PowerShell 更新 Active Directory 中的计算机描述字段

例如,您希望 Active Directory 用户和计算机控制台中的计算机和服务器的说明字段显示有关计算机的制造商、型号和序列号的信息。您可以使用以下 PowerShell 命令从 WMI 获取本地计算机上的此信息:

Get-WMIObject  Win32_ComputerSystemProduct | Select Vendor, Name, IdentifyingNumber

WMI 查询返回以下数据:

  • 供应商 - HP

  • 名称 - Proliant DL 360 G5

  • 识别号码 - CZJ733xxxx

[玩转系统] 如何在 Active Directory 中自动填写计算机描述

从环境变量中获取当前计算机的名称并将其分配给

$computer

多变的:

$computer = $env:COMPUTERNAME

然后保存有关计算机硬件的信息:

$computerinfo= Get-WMIObject Win32_ComputerSystemProduct
$Vendor = $computerinfo.vendor
$Model = $computerinfo.Name
$SerialNumber = $computerinfo.identifyingNumber

让我们看看为变量分配了哪些值:

$computer
$vendor
$Model
$SerialNumber

剩下的工作就是将接收到的数据写入 Active Directory 中计算机帐户的“描述”字段中。运行以下 PowerShell 脚本:

$ComputerSearcher = New-Object DirectoryServices.DirectorySearcher
$ComputerSearcher.SearchRoot = "LDAP://$("DC=$(($ENV:USERDNSDOMAIN).Replace(".",",DC="))")"
$ComputerSearcher.Filter = "(&(objectCategory=Computer)(CN=$Computer))"
$computerObj = [ADSI]$ComputerSearcher.FindOne().Path
$computerObj.Put( "Description", "$vendor|$Model|$SerialNumber" )
$computerObj.SetInfo()

您还可以使用 Set-ADComputer cmdlet 更改计算机描述。但是,这需要在计算机上安装 Windows PowerShell 的 Active Directory 模块(来自 RSAT 管理工具包)。

Set-ADComputer $computer -Description "$vendor|$Model|$SerialNumber”

如果要使用 AD PowerShell 模块中的 cmdlet,可以将模块文件复制到所有计算机,而无需安装 RSAT。

验证 ADUC 控制台中的计算机描述字段是否显示制造商和型号信息。

[玩转系统] 如何在 Active Directory 中自动填写计算机描述

这样的脚本只会更新AD中当前的计算机描述属性。您可以使用 Get-ADComputer 远程填充所有域计算机的描述,

foreach

环形。但当用户登录或计算机启动时,让计算机自动更新 AD 中的信息要方便得多。

为此,您需要使用 PowerShell 登录脚本创建组策略并将其应用到所有计算机:

  1. 打开域组策略管理控制台(

    gpmc.msc

    )、创建一个GPO并将其分配给有计算机的OU;

  2. 展开 GPO:用户配置 -> 策略 -> Windows 设置 -> 脚本(登录/注销)-> 登录;

  3. 转到 PowerShell 脚本 选项卡;

  4. 单击显示文件按钮并使用以下代码创建一个FillCompDesc.ps1文件:

    # write information about the computer hardware/model in the Description field in Active Directory
    $computer = $env:COMPUTERNAME
    $computerinfo= Get-WMIObject Win32_ComputerSystemProduct
    $Vendor = $computerinfo.vendor
    $Model = $computerinfo.Name
    $SerialNumber = $computerinfo.identifyingNumber
    $DNSDOMAIN= (Get-WmiObject -Namespace root\cimv2 -Class Win32_ComputerSystem).Domain
    $ComputerSearcher = New-Object DirectoryServices.DirectorySearcher
    $ComputerSearcher.SearchRoot = "LDAP://$("DC=$(($DNSDOMAIN).Replace(".",",DC="))")"
    $ComputerSearcher.Filter = "(&(objectCategory=Computer)(CN=$Computer))"
    $computerObj = [ADSI]$ComputerSearcher.FindOne().Path
    $computerObj.Put( "Description", "$vendor|$Model|$SerialNumber" )
    $computerObj.SetInfo()

    您可以选择记录 PowerShell 脚本操作,以便更轻松地进行故障排除。

  5. 单击添加按钮并设置以下脚本参数:
    脚本名称:

    FillCompDesc.ps1

    脚本参数:

    -ExecutionPolicy Bypass

    [玩转系统] 如何在 Active Directory 中自动填写计算机描述

    在这种情况下,您不必更改 PowerShell 执行策略设置或签署 PS1 脚本文件即可运行 PowerShell 脚本。

  6. 将 AD 权限委派给经过身份验证的用户域组的特定 OU。分配权限以更改 OU 中所有计算机对象的描述属性(

    Write Description

    允许)。这将允许域用户和计算机更改计算机对象的描述属性中的值;

    [玩转系统] 如何在 Active Directory 中自动填写计算机描述

  7. 重新启动目标 OU 中的计算机并更新组策略设置后,AD 中的“描述”字段将自动填写。该字段将包含有关计算机硬件的信息。

    您可以使用以下命令对 GPO 进行故障排除

    gpresult

    工具或使用导致组策略不适用的常见问题一文中的提示。

因此,您可以在 AD 中计算机对象的“描述”字段中添加任何信息。例如,上次登录用户的名称、部门(您可以使用 Get-ADUser cmdlet 获取此信息)、计算机的 IP 地址或您需要的任何其他相关信息。

注意。这种方法的缺点是任何经过身份验证的 AD 用户都可以更改或删除 Active Directory 中任何计算机的描述。

将上次登录的用户名添加到 AD 中的计算机描述中

上面的 PowerShell 脚本可用于将任何其他信息添加到 AD 中计算机对象的描述中。例如,当计算机的描述显示当前登录的用户时,它会很有用。我们还添加用户经过身份验证的域控制器的名称(

LOGONSERVER

)。

将 PowerShell 登录脚本中的一行更改为:

$computerObj.Put("Description","$vendor|$Model|$SerialNumber|$env:username|$env:LOGONSERVER")

注销并使用您的用户帐户登录。检查计算机描述属性现在是否显示当前用户的名称以及您通过身份验证的登录服务器(域控制器)。

[玩转系统] 如何在 Active Directory 中自动填写计算机描述

为了解析 Description 属性中的数据,您可以使用以下 PowerShell 代码:

$ComputerName = 'PC-MUN22s7b2'
$vendor,$Model,$SerialNumber,$Username,$LogonServer = ((Get-ADComputer -identity  $ComputerName -Properties *).description).split("|")

我们将“描述”字段值(用 | 分隔)拆分为多个单独的变量。要获取指定远程计算机上的用户名,只需运行:

$Username

[玩转系统] 如何在 Active Directory 中自动填写计算机描述

您可以使用以下 PowerShell 脚本获取特定用户当前登录的计算机的名称:

$user='*M.Becker*'
Get-ADComputer -Filter "description -like '$user'" -properties *|select name,description |ft

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯