使用Powershell在Windows上强制执行密码复杂性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Powershell在Windows上强制执行密码复杂性相关的知识,希望对你有一定的参考价值。

如何使用Windows Powershell在Workgroup计算机上启用密码复杂性?我知道如何在域级别上执行此操作。我们有一些计算机位于远程位置,并且它们没有域访问权限,因此它们位于Workgroup上。

答案

这对Po​​werShell来说不是一个好的解决方案。这对于本地安全策略是可以的。

  1. 转到运行并输入SecPol.msc
  2. 转到帐户策略>密码策略>密码必须符合复杂性要求
  3. 设置为启用。
  4. 设置最小密码长度
  5. 设置最大密码年龄

所以我决定写一些函数来通过Powershell为你处理所有这些。

您可以使用此功能Parse-SecPol获取和编辑安全策略。这会将整个配置文件转换为PSobject,这样您就可以更改属性并对它们进行排序或任何您想要做的事情。

下一步是Set-SecPol,它允许您将对象重新保存回本地安全策略。

参数-CfgFile是您要保存配置文件的位置。

这是完整的脚本示例(必须以管理员身份运行)

Function Parse-SecPol($CfgFile){ 
    secedit /export /cfg "$CfgFile" | out-null
    $obj = New-Object psobject
    $index = 0
    $contents = Get-Content $CfgFile -raw
    [regex]::Matches($contents,"(?<=[)(.*)(?=])") | %{
        $title = $_
        [regex]::Matches($contents,"(?<=]).*?((?=[)|())", [System.Text.RegularExpressions.RegexOptions]::Singleline)[$index] | %{
            $section = new-object psobject
            $_.value -split "
" | ?{$_.length -gt 0} | %{
                $value = [regex]::Match($_,"(?<==).*").value
                $name = [regex]::Match($_,".*(?==)").value
                $section | add-member -MemberType NoteProperty -Name $name.tostring().trim() -Value $value.tostring().trim() -ErrorAction SilentlyContinue | out-null
            }
            $obj | Add-Member -MemberType NoteProperty -Name $title -Value $section
        }
        $index += 1
    }
    return $obj
}

Function Set-SecPol($Object, $CfgFile){
   $SecPool.psobject.Properties.GetEnumerator() | %{
        "[$($_.Name)]"
        $_.Value | %{
            $_.psobject.Properties.GetEnumerator() | %{
                "$($_.Name)=$($_.Value)"
            }
        }
    } | out-file $CfgFile -ErrorAction Stop
    secedit /configure /db c:windowssecuritylocal.sdb /cfg "$CfgFile" /areas SECURITYPOLICY
}


$SecPool = Parse-SecPol -CfgFile C:	estTest.cgf
$SecPool.'System Access'.PasswordComplexity = 1
$SecPool.'System Access'.MinimumPasswordLength = 8
$SecPool.'System Access'.MaximumPasswordAge = 60

Set-SecPol -Object $SecPool -CfgFile C:TestTest.cfg

以上是关于使用Powershell在Windows上强制执行密码复杂性的主要内容,如果未能解决你的问题,请参考以下文章

powershell导出文件夹配额

powershell在远程windows server上登录并执行程序

如何在windows 2008上安装powershell

如何在Windows服务器上新建一个Powershell.ps1的定时任务

使用PowerShell关闭Windows更新服务和自动更新Windows 10

powershell快捷方式里添加命令,执行完命令后会关闭窗口,怎么能在执行完命令后不让窗口关闭