【问题标题】:Change samaccountname in .csv with PowerShell使用 PowerShell 更改 .csv 中的 samaccountname
【发布时间】:2019-03-24 03:21:56
【问题描述】:

我需要将 Active Directory 中启用的用户与服务器中的用户配置文件列表进行比较,然后删除同一服务器上禁用的配置文件。

我正在尝试为每个用户获取.csv 列表:一个用于 AD,一个用于服务器。

当我获取服务器文件时,配置文件显示如下:“域\用户名”,但使用 AD 文件我只得到:“用户名”,所以我无法比较它们。

理想情况下,我想在获得 AD 文件以添加域时更改用户名。我试图做这样的事情:

$Name = $_.SamAccountName
ForEach-Object {
    Get-ADUser -Filter 'enabled -eq $true' | select-object SamAccountName

    $Name = "DOMAIN\ + $Name"
}     
$users | Export-Csv c:\USEREnabled.csv -Encoding UTF8

返回包含所有 SamAccountName 但未进行任何更改的 .csv 文件。

【问题讨论】:

    标签: powershell csv active-directory


    【解决方案1】:

    您可以使用一种称为“计算属性”的技术来做到这一点。这是我们通过Select-Object 为对象生成新属性的地方。以下是它对您的工作方式:

    Get-ADUser -Filter 'enabled -eq $true' | 
        Select-Object SamAccountName,@{Name='FullUserName';Expression={"YOURDOMAIN\$($_.SamAccountName)"}} |
        Export-CSV C:\Temp\UsersEnabled.csv -Encoding UTF8
    

    这可以通过将带有 NameExpression 键的哈希表添加到 Select-Object 来实现。在 Expression 键中,一个脚本块用于构建一个新字符串,该字符串将 Domain 添加到管道中每个用户的 SamAccountName 属性(由自动变量 $_ 表示)。

    这样的结果将是一个返回两个属性的对象:SamAccountName 和 FullUserName。

    【讨论】:

    • 如果您总是知道该域,这将工作得很好。但 AD 实际上确实有一个带有 DOMAIN\username 的构造属性:msDS-PrincipalName。所以你可以这样做:Get-ADUser -Filter 'enabled -eq $true' -Properties sAMAccountName,msDS-PrincipalName | Select-Object SamAccountName,msDS-PrincipalName
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多