Обеспечить сложность пароля в Windows с помощью Powershell - PullRequest
0 голосов
/ 20 апреля 2019

Как включить сложность пароля на компьютерах рабочих групп с помощью Windows Powershell? Я знаю, как это сделать на уровне домена. У нас есть некоторые компьютеры, которые расположены в удаленных местах, и у них нет доступа к домену, поэтому они находятся в рабочей группе.

1 Ответ

1 голос
/ 20 апреля 2019

Это не очень хорошее решение для powershell.Это будет нормально для локальной политики безопасности.

  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,"(?<=\]).*?((?=\[)|(\Z))", [System.Text.RegularExpressions.RegexOptions]::Singleline)[$index] | %{
            $section = new-object psobject
            $_.value -split "\r\n" | ?{$_.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:\windows\security\local.sdb /cfg "$CfgFile" /areas SECURITYPOLICY
}


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

Set-SecPol -Object $SecPool -CfgFile C:\Test\Test.cfg
...