none
Создания пользователя, смена пароля, отправка по почте. RRS feed

  • Вопрос

  • Добрый день.
    Задача такова :
    1.Взять пользователей из CSV.
    2.Создать их в ад в определенном OU
    3.Сменить пароль (с генерировать)
    4. Смененный пароль отправить па почту в файле каждому пользователю. 
    Может у кого есть такой скрипт или ссылки на похожие.
    18 января 2017 г. 11:51

Ответы

  • ну похожих нема, если взять за предпосылку что ваши примеры правильные (лень проверять, да релей искать надо)

    то должно выйти чота типа:

    Function sendemailtouser
    {
    Param(
            [parameter(Mandatory=$True,position=0)]
            [string[]]$ToAddress,
            [parameter(Mandatory=$True,position=1)]
            [string[]]$usr,
            [parameter(Mandatory=$True,position=2)]
            [string[]]$pwd
            )
    
    ###Sets the mail values
    $FromAddress = "test@test.ru"
    $month=$(get-date -Format Y)
    $MessageSubject = "New password for $usr at $month"
    $MessageBody = "Username:$usr  Password: $pwd"
    $SendingServer = "mail.test.ru"
     
    ###Create the mail message and add the statistics text file as an attachment
    $SMTPMessage = New-Object System.Net.Mail.MailMessage $FromAddress, $ToAddress, $MessageSubject, $MessageBody
     
    ###Send the message
    #$SMTPClient = New-Object System.Net.Mail.SMTPClient $SendingServer
    #$SMTPClient.Send($SMTPMessage)
    
    write-output "$MessageSubject `n$MessageBody"
    }
    
    
    Function Genpwd()
    {
            [int] $len = 10
            [string] $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
            $bytes = new-object "System.Byte[]" $len
            $rng = new-object System.Security.Cryptography.RNGCryptoServiceProvider
            $rng.GetBytes($bytes)
            $result = ""
            for( $i=0; $i -lt $len; $i++ )
            {
                    $result += $chars[ $bytes[$i] % $chars.Length ] 
            }
    return $result
    }
    
    #--------------main-script-block---------
    
    
    import-module ActiveDirectory
    
    $FileName="E:\Projects\X-nya\genpwd\users.csv"
    
    
    (Get-Content $FileName) -replace ";","," | Set-Content $FileName -Encoding Unicode
    
    $csv = Import-CSV -Path $FileName  
    
    $nn=0
    $ou=""
    $path="ou=UsersMail,dc=test,dc=ru"
    
    
    ForEach ($Line In $csv)
    {
    
    write-output "current csv line:"
    write-output $Line
    
        if ($Line.EmailAddress -ne "")
            {
                    $login=$Line.Login
                    $Email=$Login+"@test.ru"
                    $UPN=$Login+"@test.ru"
    
                    $passwd=Genpwd
                    8
    
                    write-output "New-ADuser -Name $(($Line).Login) -Surname ""$(($Line).Name)"" -DisplayName $(($Line).DisplayName) -City $(($Line).City) -Department $(($Line).Department) -GivenName $(($Line).GivenName) -Title $(($Line).Title) -EmailAddress $Email -Path $path -CannotChangePassword $true -ChangePasswordAtLogon $false -PasswordNotRequired $true -AccountPassword (ConvertTo-SecureString -AsPlainText $passwd -Force) -Enabled $true -UserPrincipalName $UPN"
    #               New-ADuser -Name $Line.Login -Surname $Line.Name -DisplayName $Line.DisplayName -City $Line.City -Department $Line.Department -GivenName $Line.GivenName -Title $Line.Title -EmailAddress $Email -Path $path -CannotChangePassword $true -ChangePasswordAtLogon $false -PasswordNotRequired $true -AccountPassword (ConvertTo-SecureString -AsPlainText $passwd -Force) -Enabled $true -UserPrincipalName $UPN
    # 2do: add exception check
                    write-output "new user $(($Line).Login) password $passwd"
    
    write-output "sendemailtouser ""$Email"" ""$login"" ""$passwd"""
    sendemailtouser "$Email" "$login" "$passwd"
    
            }
    
    }

    имейте в виду что часть кода закоменчено(что лениво проверять)


    • Изменено Svolotch 19 января 2017 г. 12:10
    • Помечено в качестве ответа KazunEditor 23 января 2017 г. 11:16
    19 января 2017 г. 11:32

Все ответы

  • есть куски кода 
    Генерит пароль
    import-module activedirectory
     
    [int] $len = 10
    [string] $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
    $bytes = new-object "System.Byte[]" $len
    $rng = new-object System.Security.Cryptography.RNGCryptoServiceProvider
    $rng.GetBytes($bytes)
    $result = ""
    for( $i=0; $i -lt $len; $i++ )
    {
    $result += $chars[ $bytes[$i] % $chars.Length ] 
    }
    $result
     
    $securestring = ConvertTo-securestring $result -asplaintext -force
     
    get-aduser "support1s" | set-adaccountpassword -newpassword $securestring 
    
    
    отправляет на email
    ###Sets the mail values
    $FromAddress = "test@test.ru"
    $ToAddress = "test@test.ru"
    $MessageSubject = "Новый пароль для support1s за $month"
    $MessageBody = "Username: support1s          Password: $result"
    $SendingServer = "mail.test.ru"
     
    ###Create the mail message and add the statistics text file as an attachment
    $SMTPMessage = New-Object System.Net.Mail.MailMessage $FromAddress, $ToAddress, $MessageSubject, $MessageBody
     
    ###Send the message
    $SMTPClient = New-Object System.Net.Mail.SMTPClient $SendingServer
    $SMTPClient.Send($SMTPMessage)
    $a=$a+1
    
    
    создает пользователя из CSV
    param
    ( 
    [Parameter(Mandatory = $true)]
    [string] $File
    )
    
    $FileName="C:\Script\"+$File
    
    
    (Get-Content $FileName) -replace ";","," | Set-Content $FileName -Encoding Unicode
    
    $csv = Import-CSV -Path $FileName  
    
    $nn=0
    $ou=""
    $path=""
    
    
    
    ForEach ($Line In $csv)
    {
        $nn++
    
        if ($nn -eq	1)
    	{
    		#$ou=$Line.OU
    		$path="ou=UsersMail,dc=test,dc=ru"
    		#dsadd ou "ou=UsersMail,dc=helicon,dc=local"
    	}
        if ($Line.EmailAddress -ne "")
    	{
    		$login=$Line.Login
    		#$login=$login.replace("@","_")
    		$Email=$Login+"@test.ru"
    		$UPN=$Login+"@test.ru"
    
    		$passwd=$Line.Password
    
    #		$Startdate=$Line.Startdate
    #		$Startdate=[datetime]::ParseExact($Startdate, "dd.mm.yyyy", $null)
    #		$AED=$Startdate.AddDays(8)
    
    New-ADuser -Name $Line.Login -Surname $Line.Name -DisplayName $Line.DisplayName -City $Line.City -Department $Line.Department -GivenName $Line.GivenName -Title $Line.Title -EmailAddress $Email -Path $path -CannotChangePassword $true -ChangePasswordAtLogon $false -PasswordNotRequired $true -AccountPassword (ConvertTo-SecureString -AsPlainText $passwd -Force) -Enabled $true -UserPrincipalName $UPN
    	}
    
    
        
    }
    

    18 января 2017 г. 11:58
  • а пользователь точно сможет не зная пароля прочитать почту?
    18 января 2017 г. 12:34
  • а пользователь точно сможет не зная пароля прочитать почту?
    на другой почтовый ящик их несколько. 
    18 января 2017 г. 13:22
  • ну похожих нема, если взять за предпосылку что ваши примеры правильные (лень проверять, да релей искать надо)

    то должно выйти чота типа:

    Function sendemailtouser
    {
    Param(
            [parameter(Mandatory=$True,position=0)]
            [string[]]$ToAddress,
            [parameter(Mandatory=$True,position=1)]
            [string[]]$usr,
            [parameter(Mandatory=$True,position=2)]
            [string[]]$pwd
            )
    
    ###Sets the mail values
    $FromAddress = "test@test.ru"
    $month=$(get-date -Format Y)
    $MessageSubject = "New password for $usr at $month"
    $MessageBody = "Username:$usr  Password: $pwd"
    $SendingServer = "mail.test.ru"
     
    ###Create the mail message and add the statistics text file as an attachment
    $SMTPMessage = New-Object System.Net.Mail.MailMessage $FromAddress, $ToAddress, $MessageSubject, $MessageBody
     
    ###Send the message
    #$SMTPClient = New-Object System.Net.Mail.SMTPClient $SendingServer
    #$SMTPClient.Send($SMTPMessage)
    
    write-output "$MessageSubject `n$MessageBody"
    }
    
    
    Function Genpwd()
    {
            [int] $len = 10
            [string] $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
            $bytes = new-object "System.Byte[]" $len
            $rng = new-object System.Security.Cryptography.RNGCryptoServiceProvider
            $rng.GetBytes($bytes)
            $result = ""
            for( $i=0; $i -lt $len; $i++ )
            {
                    $result += $chars[ $bytes[$i] % $chars.Length ] 
            }
    return $result
    }
    
    #--------------main-script-block---------
    
    
    import-module ActiveDirectory
    
    $FileName="E:\Projects\X-nya\genpwd\users.csv"
    
    
    (Get-Content $FileName) -replace ";","," | Set-Content $FileName -Encoding Unicode
    
    $csv = Import-CSV -Path $FileName  
    
    $nn=0
    $ou=""
    $path="ou=UsersMail,dc=test,dc=ru"
    
    
    ForEach ($Line In $csv)
    {
    
    write-output "current csv line:"
    write-output $Line
    
        if ($Line.EmailAddress -ne "")
            {
                    $login=$Line.Login
                    $Email=$Login+"@test.ru"
                    $UPN=$Login+"@test.ru"
    
                    $passwd=Genpwd
                    8
    
                    write-output "New-ADuser -Name $(($Line).Login) -Surname ""$(($Line).Name)"" -DisplayName $(($Line).DisplayName) -City $(($Line).City) -Department $(($Line).Department) -GivenName $(($Line).GivenName) -Title $(($Line).Title) -EmailAddress $Email -Path $path -CannotChangePassword $true -ChangePasswordAtLogon $false -PasswordNotRequired $true -AccountPassword (ConvertTo-SecureString -AsPlainText $passwd -Force) -Enabled $true -UserPrincipalName $UPN"
    #               New-ADuser -Name $Line.Login -Surname $Line.Name -DisplayName $Line.DisplayName -City $Line.City -Department $Line.Department -GivenName $Line.GivenName -Title $Line.Title -EmailAddress $Email -Path $path -CannotChangePassword $true -ChangePasswordAtLogon $false -PasswordNotRequired $true -AccountPassword (ConvertTo-SecureString -AsPlainText $passwd -Force) -Enabled $true -UserPrincipalName $UPN
    # 2do: add exception check
                    write-output "new user $(($Line).Login) password $passwd"
    
    write-output "sendemailtouser ""$Email"" ""$login"" ""$passwd"""
    sendemailtouser "$Email" "$login" "$passwd"
    
            }
    
    }

    имейте в виду что часть кода закоменчено(что лениво проверять)


    • Изменено Svolotch 19 января 2017 г. 12:10
    • Помечено в качестве ответа KazunEditor 23 января 2017 г. 11:16
    19 января 2017 г. 11:32