PowerShell - [решено] запуск скрипта без параметров, скрипт предлагал ввести параметры

Аватара пользователя
ejik_off

PowerShell - [решено] запуск скрипта без параметров, скрипт предлагал ввести параметры

Сообщение ejik_off »

Всем привет!!!

Есть скрипт, который создает пользователя и почтовый ящик для него, но для этого нужно передать скрипту несколько параметров и соответственно строка получается очень длинной, как то можно сделать что бы при запуске скрипта без параметров, скрипт давал возможность вводить параметры поочередно, т.е запустил скрипт он проверил что нет значений для требуемых параметров и в консоли вывел имя первого параметра что то вроде 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

Re: PowerShell - [решено] запуск скрипта без параметров, скрипт предлагал ввести параметры

Сообщение Kazun »

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	
)
Аватара пользователя
Kazun

Re: PowerShell - [решено] запуск скрипта без параметров, скрипт предлагал ввести параметры

Сообщение Kazun »

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

$regname | Get-ADGroupMember | Get-AdUser -Properties Description, mail |Where {$_.Description -match "Директор | Начальник"}
Аватара пользователя
ejik_off

Re: PowerShell - [решено] запуск скрипта без параметров, скрипт предлагал ввести параметры

Сообщение ejik_off »

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

полная версия скрипта:



Код:

Код: Выделить всё

[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

Re: PowerShell - [решено] запуск скрипта без параметров, скрипт предлагал ввести параметры

Сообщение Kazun »

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



Ошибки: добавить после блока 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

Re: PowerShell - [решено] запуск скрипта без параметров, скрипт предлагал ввести параметры

Сообщение ejik_off »

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

То есть если директор то письмо уходит, а если начальник, то условие не работает, письмо не уходит.
Аватара пользователя
Kazun

Re: PowerShell - [решено] запуск скрипта без параметров, скрипт предлагал ввести параметры

Сообщение Kazun »

Цитата Kazun:



Вывод покажите:

$regname | Get-ADGroupMember | Get-AdUser -Properties Description, mail | Where {$_.Description -match "Начальник"}
PowerShell - [решено] запуск скрипта без параметров, скрипт предлагал ввести параметры






Код:

Код: Выделить всё

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}
Ответить

Вернуться в «Скриптовые языки администрирования Windows»