Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] запуск скрипта без параметров, скрипт предлагал ввести параметры (http://forum.oszone.net/showthread.php?t=242580)

ejik_off 13-09-2012 14:11 1987932

запуск скрипта без параметров, скрипт предлагал ввести параметры
 
Всем привет!!!
Есть скрипт, который создает пользователя и почтовый ящик для него, но для этого нужно передать скрипту несколько параметров и соответственно строка получается очень длинной, как то можно сделать что бы при запуске скрипта без параметров, скрипт давал возможность вводить параметры поочередно, т.е запустил скрипт он проверил что нет значений для требуемых параметров и в консоли вывел имя первого параметра что то вроде param1:дальше вводишь значения для этого параметра и нажимаешь ентер, ниже снова просит значения для param2: , и тд для всех параметров. Можно такое сделать?
Пример скрипта:
Код:

Param ($account, $al, $gname, $sname, $OrUn, $Dep)
$fname = $sname + " " + $gname
$password = ConvertTo-SecureString "Password" -AsPlainText -Force
#------------------ Создание учетной записи -------------------#
New-Mailbox -Name $fname `
                        -Alias $al `
                        -OrganizationalUnit "Users/$OrUn" `
                        -UserPrincipalName "$account@corp.local" `
                        -SamAccountName $account `
                        -FirstName $gname `
            -Initials '' `
            -LastName $sname `
            -Password $password `
            -DisplayName ($sname + ' ' + $gname)`
            -ResetPasswordOnNextLogon $true


Kazun 13-09-2012 14:22 1987945

1) Использовать Read-Host
2) Указать параметр mandatory
Код:

[CmdletBinding()]
Param(
    [Parameter(Mandatory=$true)]
    $account,
        [Parameter(Mandatory=$true)]
    $al,
        [Parameter(Mandatory=$true)]
    $gname,
        [Parameter(Mandatory=$true)]
    $sname,
        [Parameter(Mandatory=$true)]
    $OrUn,
        [Parameter(Mandatory=$true)]
    $Dep       
)


ejik_off 13-09-2012 15:15 1987986

Спасибо, сработало!!!! еще просьба подскажите насколько правильно составлен скрипт и что еще можно добавить?
полная версия скрипта:
Код:

[CmdletBinding()]
Param(
    [Parameter(Mandatory=$true)]
    $account,
        [Parameter(Mandatory=$true)]
    $al,
        [Parameter(Mandatory=$true)]
    $gname,
        [Parameter(Mandatory=$true)]
    $sname,
        [Parameter(Mandatory=$true)]
    $OrUn,
        [Parameter(Mandatory=$true)]
    $Dep       
)
$fname = $sname + " " + $gname
$password = ConvertTo-SecureString "Password" -AsPlainText -Force

#------------------ Создание учетной записи -------------------#
New-Mailbox -Name $fname `
            -Alias $al `
                        -OrganizationalUnit "npfcapital.kz/NPFCapital/Users/$OrUn" `
                        -UserPrincipalName "$account@corp.loc" `
            -SamAccountName $account `
                        -FirstName $gname `
            -Initials '' `
            -LastName $sname `
            -Password $password `
                        -DisplayName ($sname + ' ' + $gname)`
                        -ResetPasswordOnNextLogon $true

import-module ActiveDirectory

#------------------ Добавляем учетную запись в группу Restrict участие в этих группах не дает  возможность получать\отправлять за пределы предприятия----------#

$group = Get-ADGroup -Filter {Name -like "DG-CAP-Restrict-*"}
Foreach ($DG in $group)
{
        Add-ADPrincipalGroupMembership $account -MemberOf $DG
}

#------------------ Добавляем учетную запись в группу OpenFire ----------#

Add-ADGroupMember GRP-OpenFire -Members $account

#------------------ Добавляем учетную запись в группу соответствующего региона или департамента ----------#

$regname = Get-ADGroup -Filter {cn -like $Dep } -Properties cn | `
          Where {$_.GroupCategory -eq "Security"}

Add-ADGroupMember $regname -Members $account

#----------------- Вытаскиваем из текущей группы Директора или Начальника и отпровляем сообщения----------#

$user = $regname | Get-ADGroupMember  | Get-AdUser -Properties Description, mail | `
%{ If ($_.Description -like '*Директор*')
                {
                        Write-Host 'Сообщение ушло на адрес' $_.mail
                        $mail=$_.mail
                        # Формируем уведомление для начальника или директора
                        # его отдела с данными для авторизации нового пользователя
                        #$Attach    = new-object System.Net.Mail.Attachment("d:\list.txt") 
                        $SMTPClient = new-object System.Net.Mail.SMTPClient
                        $Msg        = new-object System.Net.Mail.MailMessage
                       
                        #$Msg.Attachments.add($Attach)
                        $Msg.To.Add("$mail")
                        $Msg.from="Admin@corp.loc"
                        $Msg.Subject="Заявка на предоставление доступа"
                        $Msg.Body="Заявка на предоставление доступа к информационным ресурсам фонда для пользователя $fname - исполнена.
                        Имя для входа в компьютер: $account
                        Пароль: Password"
                       
                        $SMTPClient.Host="mailserver"
                       
                        $SMTPClient.Send($Msg)
                }
               
                elseif ($_.Description -like '*Начальник*')
                {
                        Write-Host 'Сообщение ушло на адрес' $_.mail
                        $mail=$_.mail
                        # Формируем уведомление для начальника или директора
                        # его отдела с данными для авторизации нового пользователя
                        #$Attach    = new-object System.Net.Mail.Attachment("d:\list.txt") 
                        $SMTPClient = new-object System.Net.Mail.SMTPClient
                        $Msg        = new-object System.Net.Mail.MailMessage
                       
                        #$Msg.Attachments.add($Attach)
                        $Msg.To.Add("$mail")
                        $Msg.from="Admin@corp.loc"
                        $Msg.Subject="Заявка на предоставление доступа"
                        $Msg.Body="Заявка на предоставление доступа к информационным ресурсам фонда для пользователя $fname - исполнена.
                        Имя для входа в компьютер $account
                        Пароль Password"
                       
                        $SMTPClient.Host="mailserver"
                       
                        $SMTPClient.Send($Msg)
                }
               
 }

Так же хотелось бы корректная обработка ошибок, допустим если пользователь уже существует в ад с таким именем, PS ругнется, но скрипт продолжает работать и в конце отправляет сообщение о том что заявка исполнена, хотелось бы что бы скрип останавливался и выводил на консоль ошибку, и тд.
Да, еще не получается написать нормально условия для отправки сообщения только директору (если он присутствует в группе, куда дабовляется новый пользователь) или начальнику (если директора в данной группе нет)

Kazun 13-09-2012 15:38 1987998

насколько правильно составлен скрипт и что еще можно добавить?? - Это уже без меня. :)

Ошибки: добавить после блока Param() оператор trap.

Код:

Param(...)
trap{"$_";break}

К New-MailBox добавить параметр -ErrorAction Stop .

New-MailBox .... -ErrorAction Stop

Не вижу,особого смысла использовать код отправки два раза.

Код:

$regname | Get-ADGroupMember  | Get-AdUser -Properties Description, mail | Where {$_.Description -match "Директор|Начальник"} | %{
                        $mail=$_.mail
                        # Формируем уведомление для начальника или директора
                        # его отдела с данными для авторизации нового пользователя
                        #$Attach    = new-object System.Net.Mail.Attachment("d:\list.txt") 
                        $SMTPClient = new-object System.Net.Mail.SMTPClient
                        $Msg        = new-object System.Net.Mail.MailMessage
                       
                        #$Msg.Attachments.add($Attach)
                        $Msg.To.Add("$mail")
                        $Msg.from="Admin@corp.loc"
                        $Msg.Subject="Заявка на предоставление доступа"
                        $Msg.Body="Заявка на предоставление доступа к информационным ресурсам фонда для пользователя $fname - исполнена.
                        Имя для входа в компьютер: $account
                        Пароль: Password"
                       
                        $SMTPClient.Host="mailserver"
                       
                        $SMTPClient.Send($Msg)
                        Write-Host 'Сообщение ушло на адрес' $_.mail
 }

А вообще,я бы использовал командлет Send-MailMessage.

ejik_off 13-09-2012 15:55 1988009

Kazun, большое спасибо!!!

ejik_off 03-10-2012 08:00 1998786

Kazun, не подскажите по чему в скрипте не отрабатывается условие Where {$_.Description -match "Директор|Начальник"}.
То есть если директор то письмо уходит, а если начальник, то условие не работает, письмо не уходит.

Kazun 03-10-2012 08:47 1998798

Вывод покажите:
$regname | Get-ADGroupMember | Get-AdUser -Properties Description, mail | Where {$_.Description -match "Начальник"}

и

$regname | Get-ADGroupMember | Get-AdUser -Properties Description, mail | Group Description

ejik_off 03-10-2012 11:19 1998863

Цитата:

Цитата Kazun
Вывод покажите:
$regname | Get-ADGroupMember | Get-AdUser -Properties Description, mail | Where {$_.Description -match "Начальник"} »

Код:

PS C:\script> $regname = "GG-CAP-AdmPensionAccounts-Payments-Transfers"
PS C:\script> $regname | Get-ADGroupMember | Get-AdUser -Properties Description, mail | Where {$_.Description -match "На
чальник"}


Description      : Начальник Отдела
DistinguishedName : CN=Жанпейсова Лиза,OU=Local,OU=Users,OU=NPFCapital,DC=npfcapital,DC=kz
Enabled          : True
GivenName        : Лиза
mail              : lz*****@npfcapital.kz
Name              : Жанпейсова Лиза
ObjectClass      : user
ObjectGUID        : 63681ec4-c5b9-4e0e-a199-779e16d92e93
SamAccountName    : l_zhanpeisova
SID              : S-1-5-21-1801674531-796845957-725345543-1531
Surname          : Жанпейсова
UserPrincipalName : l_zhanpeisova@npfcapital.kz

и
Код:

PS C:\script> $regname | Get-ADGroupMember | Get-AdUser -Properties Description, mail | Group Description

Count Name                      Group
----- ----                      -----
    2                          {CN=Бытымбаева Динара,OU=Local,OU=Users,OU=NPFCapital,DC=npfcapital,DC=kz, CN=Сим Юл...
    3 Ведущий Специалист По ... {CN=Акилбекова Дана,OU=Local,OU=Users,OU=NPFCapital,DC=npfcapital,DC=kz, CN=Садинова...
    1 Главный Специалист По ... {CN=Тулебаева Аида,OU=Local,OU=Users,OU=NPFCapital,DC=npfcapital,DC=kz}
    2 Ведущий Специалист По ... {CN=Берликожанова Алмагуль,OU=Local,OU=Users,OU=NPFCapital,DC=npfcapital,DC=kz, CN=А...
    1 Начальник Отдела          {CN=Жанпейсова Лиза,OU=Local,OU=Users,OU=NPFCapital,DC=npfcapital,DC=kz}
    1 Главный Специалист По ... {CN=Мурзатаева Эльмира,OU=Local,OU=Users,OU=NPFCapital,DC=npfcapital,DC=kz}


Kazun 03-10-2012 11:24 1998867

Как видите условие отработало.

ejik_off 03-10-2012 12:23 1998901

Так то оно и в скрипте отработает, а вот с условием директор или начальник, не работатет
Код:

PS C:\script> $regname | Get-ADGroupMember | Get-AdUser -Properties Description, mail |Where {$_.Description -match "Дир
ектор | Начальник"}
PS C:\script>


Kazun 03-10-2012 13:28 1998938

А зачем пробелы вставили между |,их не должно быть?
$regname | Get-ADGroupMember | Get-AdUser -Properties Description, mail |Where {$_.Description -match "Директор | Начальник"}

ejik_off 03-10-2012 13:47 1998943

Блин, надо же такая мелочь, а столько проблем :). Спасибо вам большое!!!

ejik_off 09-10-2012 13:46 2002016

Цитата:

Цитата Kazun
А зачем пробелы вставили между |,их не должно быть? »

Я дико извиняюсь, что не смог сразу все проверить. Но если в фильтре
Код:

$regname | Get-ADGroupMember | Get-AdUser -Properties Description, mail |Where {$_.Description -match "Директор|Начальник"}
убрать пробелы |, то письма уходят и директору и начальнику.

Kazun 09-10-2012 14:07 2002025

Добавьте тогда - Where {$_.Description -match "Директор|Начальник"} | Select -First 1 ,то письма будут отправляться только первому.


Время: 17:28.

Время: 17:28.
© OSzone.net 2001-