报告帐户锁定策略设置的 Powershell 脚本?
Posted
技术标签:
【中文标题】报告帐户锁定策略设置的 Powershell 脚本?【英文标题】:Powershell script to report account lockout policy settings? 【发布时间】:2020-02-07 17:01:03 【问题描述】:我有几台外网电脑,不允许安装PS AD模块。
我只想使用 Powershell 报告一些帐户锁定设置,特别是锁定阈值、锁定持续时间以及这台机器是否被锁定。
我在搜索过程中发现的只是使用 Active Directory PS 模块的信息。此外,处理 remoteAccess 的其他参考资料。 都不符合我的需要。
我还查找了与“本地”锁定设置相关的注册表项,但没有找到任何内容(例如,仅引用 remoteaccess maxDenial;而不是本地设置)。
除了启动 gpedit 并查看本地策略之外,我希望有一种方法可以使用 Powershell 来简单地报告当前的本地设置。
无论如何帮助/指针/知识将不胜感激。
【问题讨论】:
如果他们在网络之外,你打算如何在没有远程连接的情况下联系他们?至于这个......“安装了 PS AD 模块。”,他们不需要安装它来使用 AD cmdlet。只要它们可以访问 DC 或安装/启用 RSAT 工具的计算机,您就可以使用隐式 PowerShell 远程处理在正在运行的 PowerShell 会话中代理 cmdlet。这是一个记录良好的事情,在 docs/blogs/articles 中,在整个网络上。否则,您需要利用 ADSI。 @postanote...我通过sneakerNet 联系到他们。我走向他们。我只想问:有没有办法在没有安装 ActiveDirectory 模块的情况下使用简单的 PS 脚本访问这些信息?我通过 gpedit 知道信息在哪里;我可以通过 PS 脚本阅读它吗?或者使用特定的注册表键/道具来获取它?听起来答案是“不可能”? @postanote...他们正在运行 Win 10、PS5.1;没有可用的 AD cmdlet;设置非常有限。 【参考方案1】:从“网络帐户”中发现此信息最终对我有用,并且我能够编写一个快速显示锁定策略信息的脚本。以下是“净账户”的输出:
PS C:\Users\Siduser> net accounts
Force user logoff how long after time expires?: 0
Minimum password age (days): 1
Maximum password age (days): 60
Minimum password length: 14
Length of password history maintained: 24
Lockout threshold: 3
Lockout duration (minutes): 15
Lockout observation window (minutes): 15
Computer role: WORKSTATION
The command completed successfully.
创建此代码 sn-p 是为了将信息放入变量中:
$lockoutObj = net accounts | Select-string threshold
$lockoutStr = $lockoutObj.ToString()
$lockoutStr -match '\d1,3' | out-null
$LO_threshold = $matches[0]
PS C:\Users\Siduser> echo $LO_threshold
3
如果您需要设置锁定阈值,请使用此命令(需要提升权限):
PS C:\Users\Siduser> net accounts /lockoutthreshold:10
The command completed successfully
PS C:\Users\Siduser> net accounts
Force user logoff how long after time expires?: 0
Minimum password age (days): 1
Maximum password age (days): 60
Minimum password length: 14
Length of password history maintained: 24
Lockout threshold: 10
Lockout duration (minutes): 15
Lockout observation window (minutes): 15
Computer role: WORKSTATION
The command completed successfully.
【讨论】:
【参考方案2】:啊,受限,那么,你陷入了众所周知的陷阱22。
但是,如果它们不是域的一部分,那么这意味着您或其他人也必须手动进行这些设置。所以,我不确定 AD cmdlet 是如何出现的,因为这些不是加入域的机器,并且设置在本地策略中。
因此,secedit.exe 是您完成这项工作的工具,或者利用 MS powershellgallery.com 中的 PolicyFileEditor 模块和/或其他模块之一。
Find-Module -Name '*policy*' | Format-Table -AutoSize
Version Name Repository Description
------- ---- ---------- -----------
...
3.0.1 PolicyFileEditor PSGallery Commands and DSC resource for modifying Administrative Templates settings in local GPO registry...
2.10.0.0 SecurityPolicyDsc PSGallery This module is a wrapper around secedit.exe which provides the ability to configure user rights...
...
0.3 GPRegistryPolicy PSGallery Module with cmdlets to work with GP Registry Policy .pol files
0.2 GPRegistryPolicyParser PSGallery Module with parser cmdlets to work with GP Registry Policy .pol files
1.1.0 GPRegistryPolicyDsc PSGallery This resource module contains DSC resources used to apply and manage local group policies by mo...
...
1.0.1 GroupPolicyHelper PSGallery Functions that ease your daily Group Policy Work
1.3.2 Indented.SecurityPolicy PSGallery Security management functions and resources
...
1.0 ADPolicyAudit PSGallery Module to review infrastructure password policy
对于 Secedit.exe,有几篇关于这种用例的帖子和使用 'secedit lockout policy' 的快速网络搜索会告诉你这一点。例如,您最终可能会得到this sort of effort。
Clear-Host
$temp = "D:\temp"
$file = "$temp\pol.txt"
#[string] $readableNames
$outHash = @
$process = [diagnostics.process]::Start("secedit.exe", "/export /cfg $file /areas securitypolicy")
$process.WaitForExit()
$in = get-content $file
foreach ($line in $in)
if ($line -like "*password*" -or $line -like "*lockout*" -and $line -notlike "machine\*" -and $line -notlike "require*" )
$policy = $line.substring(0,$line.IndexOf("=") - 1)
switch ($policy)
"passwordhistorysize" $policy = "Enforce Password Policy"
"maximumpasswordage" $policy = "Maximum Password Age"
"minimumpasswordage" $policy = "Minimum Password Age"
"minimumpasswordlength" $policy = "Minimum Password Length"
"passwordcomplexity" $policy = "Password must meet complexity requirements"
"cleartextpassword" $policy = "Store Passwords Using Reversible Encryption"
"lockoutduration" $policy = "Account Lockout Duration"
"lockoutbadaccount" $policy = "Account Lockout Threshold"
"resetlockoutcount" $policy = "Reset Account Lockout Counter After"
$values = $line.substring($line.IndexOf("=") + 1,$line.Length - ($line.IndexOf("=") + 1))
#$values = $values.Trim() -split ","
$outHash.Add($policy,$values) #output edited version
$outHash |
Format-Table -AutoSize
【讨论】:
以上是关于报告帐户锁定策略设置的 Powershell 脚本?的主要内容,如果未能解决你的问题,请参考以下文章
设置帐户锁定策略 若用户连续有3次无效登陆则该帐户自动锁定20分钟 怎么弄