Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Windows PowerShell 1.x/2.x/CTP

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Открыть новую тему     Написать ответ в эту тему

tcg2



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Microsoft Windows PowerShell

 
Обсуждаемые темы

    * Работа с SQL
    * Работа с Visual Studio
    * etc.

 
Помощь по использованию консоли pwsh, а также встроенной в Windows консоли powershell.exe  

Всего записей: 7 | Зарегистр. 20-11-2006 | Отправлено: 19:06 29-11-2006 | Исправлено: YuS 2, 18:04 02-06-2020
Vadimus3000

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет!
Такая вот задача:
Необходимо вытащить из логов имя создаваемого в AD пользователя.
Взять все эти события можно командой:
Get-EventLog –LogName Security –InstanceID 4720
Теперь вопрос, как взять имя созданного пользователя из последнего события?
Это нужно, что бы потом отправить это имя в качестве параметра к другому скрипту.
 
Заранее спасибо за помощь!

Всего записей: 19 | Зарегистр. 08-02-2012 | Отправлено: 17:15 22-09-2014
VovaMozg



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Vadimus3000
$Events = Get-WinEvent -FilterHashtable @{Logname='Security';Id=4720}
foreach ($event in $Events){$Event =[xml]$Event.ToXml(); $event.Event.EventData.data[8]}
 
8 - SamAccountName
9 - DisplayName
10 - UserPrincipalName

----------
В конце концов причина причин оказалась в начале начал...

Всего записей: 761 | Зарегистр. 02-06-2005 | Отправлено: 07:14 02-10-2014
Vadimus3000

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо!
На данный момент у меня получился вот такой скрипт:
 
$Event=Get-EventLog -LogName Security -InstanceId 4720 | Select-Object -First 1 | fl -Property Message | find "SAM Account Name:"
$user=$Event -replace "              SAM Account Name:    "

Всего записей: 19 | Зарегистр. 08-02-2012 | Отправлено: 10:26 02-10-2014
VovaMozg



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Vadimus3000
Тогда уж find заменить на select-string
имхо с xml удобнее работать - получаешь все свойства именно как свойства объекта, а не как большой стринг.
Но ведь главное, чоб задача выполнялась

----------
В конце концов причина причин оказалась в начале начал...

Всего записей: 761 | Зарегистр. 02-06-2005 | Отправлено: 19:21 02-10-2014
Mosl

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Написал скрипт на powershell для создания бекапа:

Код:
 
Add-PSSnapin Windows.ServerBackup
$pol = new-wbpolicy
$disk = get-wbdisk | where {$_.disknumber -eq 2}
$target = new-wbbackuptarget -disk $disk -Label "Backup Dogovora"
$source1 = new-wbfilespec -filespec "G:\Входящие договора"
$source1 | add-wbfilespec -policy $pol
add-wbbackuptarget -policy $pol -target $target
Start-WBBackup –Policy $pol
 

 
При выполнении выдает такую ошибку:

Код:
 
Start-WBBackup : В экземпляре объекта не задана ссылка на объект.
строка:8 знак:15
+ Start-WBBackup <<<<  –Policy $pol
    + CategoryInfo          : NotSpecified: (:) [Start-WBBackup], NullReferenceException
    + FullyQualifiedErrorId : System.NullReferenceException,Microsoft.Windows.ServerBackup.Commands.StartWBBackup
 

Подскажите, пожалуйста, в чем проблема?

Всего записей: 620 | Зарегистр. 09-05-2006 | Отправлено: 12:33 31-10-2014 | Исправлено: Mosl, 12:34 31-10-2014
Odarchuk



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть AD и VPN построенный на Cisco. Они "дружат" между собой и если у юзера активирован Network Access Permison на вкладке Dial-In (скрин http://joxi.ru/8An0vjOcqXKzmO ) то он может пользоваться ВПНом используя свой доменный логин/пароль.
 
Но вся соль в том что ВПН разрешается только на определенное время: день/неделя/декада/месяц.
Нужно автоматизировать прекращение доступа к ВПН.
Как я это вижу:
1) создается новый атрибут (или используется существующий) в котором указывается срок действия ВПН
2) При активации ВПНа пользователь добавляется в группу VPN
3) каждый день запускается скрипт который:
а) получает список юзеров группы VPN
б) проверяет каждого юзера и получает значение данного атрибута
в) если атрибут = сегодняшней дате то скрипт меняет значение Network Access Permison и удаляет юзера из группы
 
4) как опция: шлет мыло со списком удаленных юзеров.
 
Кто-то встречал пододбные скрипты??

----------
ManageEngine OpManager и ManageEngine DesktopCentral

Всего записей: 671 | Зарегистр. 20-03-2007 | Отправлено: 12:54 21-11-2014 | Исправлено: Odarchuk, 13:01 21-11-2014
unreal666



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Несколько вопросов.
 
- как для Get-Content указать кодировку считываемого файла?
- какая есть команда (или чем она там является) типа -replace, но читающую файл не построчно, а как "непрерывный", чтобы можно было в качестве поиска для замены указать что-то типа "^[a-z]+\r?\n" ?

Всего записей: 6637 | Зарегистр. 14-02-2005 | Отправлено: 13:33 17-04-2015
hydromarine666

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
Прошу помощи в этой теме http://forum.ru-board.com/topic.cgi?forum=33&topic=14331#1

Всего записей: 4 | Зарегистр. 15-04-2015 | Отправлено: 11:25 05-08-2015
NeoAnomaly

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
- как для Get-Content указать кодировку считываемого файла?  

Get-Content для FileSystem провайдера имеет параметр Encoding.
 

Цитата:
- какая есть команда (или чем она там является) типа -replace, но читающую файл не построчно, а как "непрерывный"

Заключи Get-Content в скобки (Get-Content my.txt) | Foreach-Object {$_ -replace <params> } | ...
и тогда контент в pipeline будет уходить не построчно, а после полного чтения.

Всего записей: 418 | Зарегистр. 23-03-2010 | Отправлено: 14:48 05-08-2015 | Исправлено: NeoAnomaly, 14:50 05-08-2015
zerbino



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую, уважаемые. Подскажите пожалуйста по такому моменту.
В cmd выполняется следующая команда для поиска определенных обновлений - в данном случае KB2923545, но можно через запятую указать любые требуемые

Код:
powershell get-hotfix -id KB2923545,KB2970228

при нахождении любого из перечисленных обновлений в cmd выводится содержимое по типу как ниже, где для каждого обновления своя строка

Код:
 
Source        Description      HotFixID      InstalledBy          InstalledOn
------        -----------      --------      -----------          -----------
THIS-PC       Update           KB2923545     THIS-PC\This
THIS-PC       Update           KB2970228     THIS-PC\This
 

если же не находит, туда же, в cmd, выводит

Код:
 
C:\Windows\System32>powershell get-hotfix -id KB2923545,KB2970228
get-hotfix : Не удается найти запрошенное исправление на компьютере "localhost"
. Проверьте введенные данные и повторите выполнение команды.
строка:1 знак:1
+ get-hotfix -id KB2923545
+ ~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: ( [Get-HotFix], ArgumentExcept
   ion
    + FullyQualifiedErrorId : GetHotFixNoEntriesFound,Microsoft.PowerShell.Com
   mands.GetHotFixCommand
 

после этого идёт pause для возможности просмотра найденных обновлений, а после нажатия на клавишу Any Key идут друг за другом команды на удаление всего списка обновлений без разбора по очереди

Код:
 
echo Delete KB2923545
start /w wusa.exe /uninstall /kb:2923545 /quiet /norestart
echo Delete KB2970228
start /w wusa.exe /uninstall /kb:2970228 /quiet /norestart
 

Хочется сделать так, чтобы при выводе сообщения "get-hotfix : Не удается найти запрошенное исправление на компьютере "localhost"...." был переход в cmd файле сразу на эхо с выходом - т.е. каким-то образом передать errorlevel или пропарсить вывод powershell в cmd и исходя из этого уже goto или ещё какой if сделать.
В идеале бы хотелось вообще, чтобы после вывода найденных обновлений выполнялись только команды те, которые удаляют только и именно найденные обновления, а не все по порядку.
 
Сможете мне помочь?
Спасибо!

Всего записей: 545 | Зарегистр. 09-06-2003 | Отправлено: 22:03 14-09-2015 | Исправлено: zerbino, 22:14 14-09-2015
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а где код скрипта или хотя бы часть, генерирующая ошибку?
если я правильно понял...
$LastExitCode, Exit, $?

Всего записей: 3521 | Зарегистр. 16-08-2012 | Отправлено: 08:29 15-09-2015
Scaramanga



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброго времени суток.
 
 
Есть две папки  
 
В первой содержится n-ое кол-во папок, вторая изначально пустая.
 
Стоит следующая задача.Чтобы при запуске скриптаво второй папке  появлялись симлинки на все папки из первой(с теми же именами) и соответственно при удалении из первой-пропадали симлинки
 
Заранее спасибо

Всего записей: 516 | Зарегистр. 24-04-2008 | Отправлено: 18:09 16-09-2015 | Исправлено: Scaramanga, 18:09 16-09-2015
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Scaramanga
а, что не получается? на чём застрял?
 
какую задачу таким способом решаешь?
например для бекапа на симлинках есть прожка

Всего записей: 3521 | Зарегистр. 16-08-2012 | Отправлено: 10:31 17-09-2015 | Исправлено: iNNOKENTIY21, 10:32 17-09-2015
zerbino



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
а где код скрипта или хотя бы часть, генерирующая ошибку?
если я правильно понял...  

 
Спасибо за ответ.. Так мой вопрос как раз в том, как реализовать это.. Мои попытки не увенчались успехом.
 
Сейчас скрипт выглядит так. Я его хочу подшаманить для удаления спай патчей от M$.
 
win7spy_delete.cmd

Всего записей: 545 | Зарегистр. 09-06-2003 | Отправлено: 03:43 19-09-2015 | Исправлено: zerbino, 03:46 19-09-2015
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zerbino у тебя же cmd батник, а они там: Командная строка, батники, сценарии (bat, cmd) список хотфиксов можно и без powershell получить.
а на powershell  как то так:
 
совместить, доработать. кому не лень может и чтение удаляемых обнов из файла сделает

Всего записей: 3521 | Зарегистр. 16-08-2012 | Отправлено: 09:31 19-09-2015 | Исправлено: iNNOKENTIY21, 10:00 19-09-2015
zerbino



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
Ну я могу отличить одно от другого) Просто батником хотелось обойтись, потому как PS не у всех может быть установлен. Ну и ладно, что все отработают строки, а вот если есть, то было бы хорошо, чтобы всё отработало красиво
Спасибо за помощь

Всего записей: 545 | Зарегистр. 09-06-2003 | Отправлено: 13:50 19-09-2015
mila22

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Коллеги, нужна небольшая помощь.  че не могу сообразить что не так. есть небольшой скрипт и при выполнении его получаем ошибку  

Код:
 
$serv=C:\temp\server.txt
Invoke-Command -ComputerName $serv -ScriptBlock {
    wmic product get name } | Out-File D:\temp\test.txt -Append  

ошибку получаем вот такую  
Invoke-Command : Не удается проверить аргумент для параметра "ComputerName". Аргумент пустой или имеет значение NULL. Укажите не пустой аргумент, не имеющий значение NUL
L, после чего повторите выполнение команды.
строка:2 знак:30

Всего записей: 487 | Зарегистр. 28-12-2006 | Отправлено: 15:42 30-09-2015
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Коллеги, нужна небольшая помощь.  че не могу сообразить что не так. есть небольшой скрипт и при выполнении его получаем ошибку  

 
$serv=C:\temp\server.txt
получается:
Invoke-Command -ComputerName C:\temp\server.txt

$serv=правильное имя
или получить содержимое файла см. Get-Content,
если не один серв в server.txt,
то цикл см. foreach
 

Код:
$servera=Get-Content C:\temp\server.txt
foreach($server in $servera)
{
    Invoke-Command -ComputerName $serv -ScriptBlock { wmic product get name } | Out-File D:\temp\test.txt -Append
}
 

как то так, не проверял.

Всего записей: 3521 | Зарегистр. 16-08-2012 | Отправлено: 22:52 30-09-2015
mila22

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да , пришлось использовать get-content.

Всего записей: 487 | Зарегистр. 28-12-2006 | Отправлено: 17:43 01-10-2015
daMIR



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу помощи. Дублирую отсюда http://forum.ru-board.com/topic.cgi?forum=8&bm=1&topic=53329#1
 
Всем привет!
 
Нашел в гугле код (выводит список пользователей, которые давно не логинились):

Код:
 
# Блок переменных
# $LDAPPath – ADSI путь к контейнеру с учетными записями пользователей и компьютеров (в формате LDAP://distinguishedName)
# $Mode - Режим поиска учетных записей (1 - Пользователи, 2 - Компьютеры)
# $CountDisabled – Признак необходимости обработки отключенных учетных записей (1 или 0)
# $LastLogonAgeDaysLimit - Количество дней прошедших с момента последнего входа в систему
#
$LDAPPath = 'LDAP://OU=Accounts,DC=holding,DC=com'
$Mode = 1
$CountDisabled = 0
$LastLogonAgeDaysLimit = 90
#
# Блок поиска
#
$RootDomainOU = [ADSI]$LDAPPath
$Searcher = New-Object System.DirectoryServices.DirectorySearcher($RootDomainOU)
If ($Mode -eq 1) {$Filter = '(objectCategory=person)(objectClass=user)'}
ElseIf ($Mode -eq 2) {$Filter = '(objectCategory=computer)'}
If ($CountDisabled -eq 0) {$Filter = $Filter + '(!(userAccountControl:1.2.840.113556.1.4.803:=2))'}
$Filter = '(&' + $Filter + ')'
$Searcher.Filter = $Filter
$Searcher.PageSize = 5000
[Void]$Searcher.PropertiesToLoad.Add('cn')
[Void]$Searcher.PropertiesToLoad.Add('sAMAccountName')
[Void]$Searcher.PropertiesToLoad.Add('description')
[Void]$Searcher.PropertiesToLoad.Add('lastLogonTimestamp')
$Objects = $Searcher.findall()
#
# Блок основного вывода  
#
$LLDays = (Get-Date).AddDays(-$LastLogonAgeDaysLimit).ToFileTime()
$OldObjects = $Objects | Where-Object {$_.properties.lastlogontimestamp -le $LLDays}
$OldObjects | Select `
@{label='Object Name';expression={$_.properties.cn}},`
@{label='sAMAccountName';expression={$_.properties.samaccountname}},`
@{label='Last Logon Timestamp';expression={[datetime]::FromFileTime(($_.properties.lastlogontimestamp)[0])}},`
@{label='Description';expression={$_.properties.description}}`
| Sort -Property 'Last Logon Timestamp'`
| Format-Table –AutoSize
Write-Host '---------------------------------------------------'
write-host 'Domain accounts in OU:' $Objects.Count
write-host 'Domain accounts with old lastLogonTimestamp:' $OldObjects.Count
Write-Host '---------------------------------------------------'
 

 
Изменил путь до своего АД, все в порядке, все работает. Хочу доработать код так, чтобы он выводил название группы у найденного пользователя. В AD есть конкретная OU, в которой хранится список групп. Вот мне нужно название не всех групп пользователя, а только группы из конкретной OU.  
Т.е. получить у одного из параметров MemberOf значение CN по заданной OU
 
Не могу сообразить, как скорректировать код. Гуглю, но пока не нашел решения. Прошу помощи.

Всего записей: 1757 | Зарегистр. 14-03-2004 | Отправлено: 09:47 12-10-2015
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Windows PowerShell 1.x/2.x/CTP


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru