首页 > 解决方案 > 解锁锁定域用户的命令

问题描述

我一直在使用这些来列出我域中的锁定用户,并提示我输入 samaccountname 以解锁所需的用户:我用 3 个文件完成了它。

第一个是 ps1 列出所有这些

    import-module activedirectory
    search-adaccount -lockedout | select  name, samaccountname, OU

第二个是另一个 ps1 文件:

    $user = Read-Host "Enter user account (SAMACCOUNTNAME) to unlock or press ENTER to refresh list"
    Search-ADAccount -LockedOut | Where {$_.samaccountname -eq $user} | Unlock-ADAccount

为了执行上述文件,我使用了一个 .bat 文件:

    :loop
    powershell.exe -ExecutionPolicy Bypass -File c:\ps\lockedlist.ps1
    powershell.exe -ExecutionPolicy Bypass -File c:\ps\unlock.ps1
    cls
    goto loop

当我运行它时......它列出了所有锁定的用户,我可以复制粘贴每个 samaacount 名称来解锁它们

但问题是,当我想使用一个 ps1 文件时它不起作用。它只是要求 samaccountname 但它没有列出它

    import-module activedirectory
    search-adaccount -lockedout | select  name, samaccountname, OU
    $user = Read-Host "Enter user account (SAMACCOUNTNAME) to unlock or press ENTER to refresh list"
    Search-ADAccount -LockedOut | Where {$_.samaccountname -eq $user} | Unlock-ADAccount

我知道 .bat 文件将是相同的...

感谢任何阅读和帮助的人。

标签: powershelldnsdirectorycommandlocked

解决方案


Powershell 总是尝试优化它为您提供的输出。因此,输出的顺序可能与您对脚本中的命令所期望的不同。如果可能的话,它将连接输出以提高可读性,尤其是当它是相同类型的对象时。要打破这一点,您可以使用格式 cmdlet,例如Format-Tablepar 示例。

Search-ADAccount -LockedOut | 
    Select-Object -Property Name, sAMAccountName, DistinguishedName |
        Format-Table
$user = Read-Host -Prompt 'Enter user account (SAMACCOUNTNAME) to unlock or press ENTER to refresh list'
Search-ADAccount -LockedOut | 
    Where-Object -FilterScript {$_.samaccountname -eq $user} | 
        Unlock-ADAccount

至少,它在我的环境中有效。顺便说一句:从 Powershell 版本 3 开始,您不再需要显式导入模块。它们将被自动导入。最好在脚本顶部使用#Requires语句。#Requires -Modules activedirectory如果没有安装活动目录模块,这甚至会阻止脚本运行


推荐阅读