Powershell: как запросить аутентификацию пользователя для продолжения - PullRequest
0 голосов
/ 02 марта 2020

В моем скрипте Powershell реализованы некоторые функции / функции, но есть некоторые функции, которые я хочу ограничить для некоторых пользователей.

Чтобы разрешить текущему или другому пользователю выбирать такие ограниченные функции из меню, я ищу способ требовать аутентификацию пользователя от Windows для продолжения. Как я мог это сделать? Как должна выглядеть приведенная ниже функция UserAuthentication?

Код:

$feature = Read-Host 'Select the feature by typing the number [1 - 2]'

switch ($feature)
{  
    1
    {
        write-output "This feature any user can reach"
    }
    2
    {
        $user = Read-Host "This feature only some user can reach and requires authentication. Entry your username to proceed"
        $allowedUsers = "user1", "user2"

        if($allowedUsers.contains($user))
        {
            write-output "This feature the user $user can reach. Please authenticate to continue"  
            if((UserAuthentication $user) -eq $true)
            {
                write-output "$user successfully authenticated"
            }
            else
            {
                write-output "$user unsuccessful authenticated"
            }
        }
        else
        {
            write-output "This feature the user $user cannot reach"
        }
    }
}

function UserAuthentication($user)
{
    return $true #May return 'True' if successfully authenticated or 'False' if not.
}

1 Ответ

1 голос
/ 02 марта 2020

Этот ответ для тех случаев, когда ваши пользователи являются членами домена AD

Я изменил имя функции UserAuthentication на Get-Authentication, чтобы соответствовать Глагол- Существительное соглашение об именах функций в PowerShell.

# helper function test if a username/password combination is valid.
# if valid, the username entered in the box is returned.
function Get-Authentication {
    $Credentials = Get-Credential "$env:USERDOMAIN\$env:USERNAME" -Message "Please authenticate to continue" -ErrorAction SilentlyContinue
    if ($Credentials) {
        $UserName = $Credentials.UserName
        $Password = $Credentials.GetNetworkCredential().Password   # --> plain-text password
        Add-Type -AssemblyName System.DirectoryServices.AccountManagement
        $ds = New-Object System.DirectoryServices.AccountManagement.PrincipalContext Domain
        if ($ds.ValidateCredentials($UserName, $Password)) {
            # return the username entered
            $UserName
        }
    }
}

# your code here

# fill in the SamAccountNames of allowed users for this feature
$allowedUsers = 'samaccountname','of', 'users', 'that', 'are', 'allowed', 'to', 'use', 'feature 2'

$feature = Read-Host 'Select the feature by typing the number [1 - 2]'
switch ($feature) {  
    '1' { Write-Output "This feature any user can reach" }
    '2' { 
        $user = Get-Authentication
        if ($null -ne $user -and $allowedUsers -contains $user) {
            Write-Output "User $user is allowed for this feature"
        }
        else {
            Write-Output "This feature the user cannot reach"
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...