Показать полную графическую версию : [решено] запуск скрипта без параметров, скрипт предлагал ввести параметры
ejik_off
13-09-2012, 14:11
Всем привет!!!
Есть скрипт, который создает пользователя и почтовый ящик для него, но для этого нужно передать скрипту несколько параметров и соответственно строка получается очень длинной, как то можно сделать что бы при запуске скрипта без параметров, скрипт давал возможность вводить параметры поочередно, т.е запустил скрипт он проверил что нет значений для требуемых параметров и в консоли вывел имя первого параметра что то вроде 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
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
Спасибо, сработало!!!! еще просьба подскажите насколько правильно составлен скрипт и что еще можно добавить?
полная версия скрипта:
[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 ругнется, но скрипт продолжает работать и в конце отправляет сообщение о том что заявка исполнена, хотелось бы что бы скрип останавливался и выводил на консоль ошибку, и тд.
Да, еще не получается написать нормально условия для отправки сообщения только директору (если он присутствует в группе, куда дабовляется новый пользователь) или начальнику (если директора в данной группе нет)
насколько правильно составлен скрипт и что еще можно добавить?? - Это уже без меня. :)
Ошибки: добавить после блока 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
Kazun, большое спасибо!!!
ejik_off
03-10-2012, 08:00
Kazun, не подскажите по чему в скрипте не отрабатывается условие Where {$_.Description -match "Директор|Начальник"}.
То есть если директор то письмо уходит, а если начальник, то условие не работает, письмо не уходит.
Вывод покажите:
$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
Вывод покажите:
$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}
Как видите условие отработало.
ejik_off
03-10-2012, 12:23
Так то оно и в скрипте отработает, а вот с условием директор или начальник, не работатет
PS C:\script> $regname | Get-ADGroupMember | Get-AdUser -Properties Description, mail |Where {$_.Description -match "Дир
ектор | Начальник"}
PS C:\script>
А зачем пробелы вставили между |,их не должно быть?
$regname | Get-ADGroupMember | Get-AdUser -Properties Description, mail |Where {$_.Description -match "Директор | Начальник"}
ejik_off
03-10-2012, 13:47
Блин, надо же такая мелочь, а столько проблем :). Спасибо вам большое!!!
ejik_off
09-10-2012, 13:46
А зачем пробелы вставили между |,их не должно быть? »
Я дико извиняюсь, что не смог сразу все проверить. Но если в фильтре
$regname | Get-ADGroupMember | Get-AdUser -Properties Description, mail |Where {$_.Description -match "Директор|Начальник"} убрать пробелы |, то письма уходят и директору и начальнику.
Добавьте тогда - Where {$_.Description -match "Директор|Начальник"} | Select -First 1 ,то письма будут отправляться только первому.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.