Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] запуск скрипта без параметров, скрипт предлагал ввести параметры

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

Аватара для ejik_off

Старожил


Сообщения: 471
Благодарности: 11

Профиль | Отправить PM | Цитировать


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

Отправлено: 14:11, 13-09-2012

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


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	
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:22, 13-09-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для ejik_off

Старожил


Сообщения: 471
Благодарности: 11

Профиль | Отправить PM | Цитировать


Спасибо, сработало!!!! еще просьба подскажите насколько правильно составлен скрипт и что еще можно добавить?
полная версия скрипта:
Код: Выделить весь код
[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 ругнется, но скрипт продолжает работать и в конце отправляет сообщение о том что заявка исполнена, хотелось бы что бы скрип останавливался и выводил на консоль ошибку, и тд.
Да, еще не получается написать нормально условия для отправки сообщения только директору (если он присутствует в группе, куда дабовляется новый пользователь) или начальнику (если директора в данной группе нет)

Последний раз редактировалось ejik_off, 13-09-2012 в 15:21.


Отправлено: 15:15, 13-09-2012 | #3


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


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

Ошибки: добавить после блока 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.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:38, 13-09-2012 | #4


Аватара для ejik_off

Старожил


Сообщения: 471
Благодарности: 11

Профиль | Отправить PM | Цитировать


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

Отправлено: 15:55, 13-09-2012 | #5


Аватара для ejik_off

Старожил


Сообщения: 471
Благодарности: 11

Профиль | Отправить PM | Цитировать


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

Отправлено: 08:00, 03-10-2012 | #6


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


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

и

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

Отправлено: 08:47, 03-10-2012 | #7


Аватара для ejik_off

Старожил


Сообщения: 471
Благодарности: 11

Профиль | Отправить PM | Цитировать


Цитата 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}

Отправлено: 11:19, 03-10-2012 | #8


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


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

Отправлено: 11:24, 03-10-2012 | #9


Аватара для ejik_off

Старожил


Сообщения: 471
Благодарности: 11

Профиль | Отправить PM | Цитировать


Так то оно и в скрипте отработает, а вот с условием директор или начальник, не работатет
Код: Выделить весь код
PS C:\script> $regname | Get-ADGroupMember | Get-AdUser -Properties Description, mail |Where {$_.Description -match "Дир
ектор | Начальник"}
PS C:\script>

Отправлено: 12:23, 03-10-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] запуск скрипта без параметров, скрипт предлагал ввести параметры

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Запуск другого скрипта через скрипт. Centrinar AutoIt 2 28-01-2011 20:02
VBS/WSH/JS - [решено] передать параметры запуска в тело скрипта xvoct Скриптовые языки администрирования Windows 1 24-06-2010 16:48
[решено] Сохранение параметров скрипта во внешнем файле Freez AutoIt 2 14-12-2009 19:00
Проверка параметров запуска скрипта morgan1991 AutoIt 2 03-03-2009 00:43
Сохранить параметры RAS, при переносе параметров системы. Drug0y Автоматическая установка Windows 2000/XP/2003 0 15-01-2009 20:20




 
Переход