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

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

Модерирует : KLASS, IFkO

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

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

Uriu

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
 PowerShell 1.0 На текущий момент совершенно неактуальная версия, интересная только для истории.
Ссылки
 
PowerShell 2.0 и WinRM 2.0 (Последняя версия, работающая на Windows XP и Windows 2003) (Ещё)
Прямые ссылки:
* Windows XP и Windows Embedded x86 ENG
* Windows XP и Windows Embedded x86 RUS
* Windows 2003 Server x86 ENG
* Windows 2003 Server x86 RUS
* Windows 2003 Server x64 ENG
* Windows 2003 Server x64 RUS
 
PowerShell 3.0 (Windows Management Framework 3.0)
PowerShell 4.0 (Windows Management Framework 4.0)
PowerShell 5.0 (Windows Management Framework 5.0)
PowerShell 5.1 (Windows Management Framework 5.1)
 


Что бы ассоциировать скрипты с PowerShell, аналогично выполнению .bat/.cmd-файлов
нужно в командной строке набрать следующую команду  
ftype microsoft.powershellscript.1=%windir%\system32\windowspowershell\v1.0\powershell.exe -file "%1" %*  
 
Что бы PowerShell не задавал вопрос о том, что скрипты не подписаны, ввести в нем команду
set-executionpolicy unrestricted
или в командной строке
powershell Set-ExecutionPolicy Unrestricted -force
 
(для этих 2-х действий требуются административные права)
 


Внимание! В отличие от батников кодировка скриптов на PowerShell должна быть 1251 (ANSI)


Расширение возможностей PowerShell
Функции
* Write-Color
* PowerTab --- Расширение функций клавиши Tab
Провайдеры
Готовые скрипты
* Ошибки и предупреждения в журнале событий по электронной почте (в4.0)
 


Работа со сценариями в Windows PowerShell
Раздел в MSDN
Краткие справочники по Windows PowerShell 3.0 (english)
Windows PowerShell Франк Кох (БЕРН)  Разработчик и пропагандист платформы. На русском языке в формате pdf и doc

Всего записей: 340 | Зарегистр. 25-11-2004 | Отправлено: 07:13 23-03-2006 | Исправлено: Smitis, 17:03 22-03-2017
Merlin2006

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
Очень нужна помощь, бо сам не справлюсь (знаний не хватает).
Есть 2 скрипта на ps. Один выводит в файл информацию о входах в терминальную сессию, другой о выходах. Есть общее поле TargetLogonId. Хочется объединить эти два скрипта, чтобы выводилась информация о начале сессии, ее конце, продолжительность и т.п., т.е. как-то объединить два выходящих файла (в них есть вся мне необходимая информация).
Может кто-нибудь помочь? Могу выложить код.
Или может у кого-нибудь есть готовые решения?
Спасибо.

Всего записей: 473 | Зарегистр. 20-07-2009 | Отправлено: 18:57 23-06-2016 | Исправлено: Merlin2006, 22:23 14-07-2016
dirigar

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вообще уже что-то похожее у меня было. модифицировал не много. Может ещё самому пригодится.

Код:
 
 
function Get-TSSession {
param (
 
    [string]$XPath =  @"
    *[
    System[(EventID=4624) or (EventID=4634)] and  
    EventData[(Data[@Name='LogonType']=2) or  
        (Data[@Name='LogonType']=10)]
    ]
"@,
    [Parameter(
    ValueFromPipeline=$True,
    ValueFromPipelineByPropertyName=$True)]
    $ComputerName = $env:COMPUTERNAME
    )
    process {
        Get-WinEvent -LogName security -ComputerName $ComputerName -FilterXPath $XPath  `
        | % { [xml]$_.ToXml()} `
        | select @{n="EventID";e={$_.Event.System.EventID}},
            @{n="ComputerName";e={$_.Event.System.Computer}},
            @{n="TimeCreated";e={$_.Event.System.TimeCreated.SystemTime | Get-date}},
            @{n="TargetUserSid";e={$_.Event.EventData.SelectSingleNode("*[@Name=""TargetUserSid""]").innertext}},
            @{n="TargetUserName";e={$_.Event.EventData.SelectSingleNode("*[@Name=""TargetUserName""]").innertext}},
            @{n="TargetDomainName";e={$_.Event.EventData.SelectSingleNode("*[@Name=""TargetDomainName""]").innertext}},
            @{n="TargetLogonId";e={$_.Event.EventData.SelectSingleNode("*[@Name=""TargetLogonId""]").innertext}},
            @{n="LogonType";e={$_.Event.EventData.SelectSingleNode("*[@Name=""LogonType""]").innertext}},
            @{n="IpAddress";e={$_.Event.EventData.SelectSingleNode("*[@Name=""IpAddress""]").innertext}},
            @{n="LogonGuid";e={$_.Event.EventData.SelectSingleNode("*[@Name=""LogonGuid""]").innertext}} `
        | Group-Object -Property TargetLogonId `
        | % {
            $logoff = $_.Group | ? EventID -eq 4634
            $login = $_.Group | ? EventID -eq 4624
            $out = if ($login) { $login | select * -ExcludeProperty "EventId","TimeCreated"  
            } else { $logoff | select * -ExcludeProperty "EventId","TimeCreated" }
            $out | select *, @{n="LoginTime";e={$login.TimeCreated}},
            @{n="LogoffTime";e={$logoff.TimeCreated}},
            @{n="TimeElapse";e={
                if ($logoff.TimeCreated -and $login.TimeCreated) {
                    $d = (get-date $logoff.TimeCreated) - (get-date $login.TimeCreated)
                    if ($? ) {
                        $d.ToString("c")
                    }
                }
            }};
        }
    }
}
 
 
#Example
# "server1","server2" | Get-TSSession
 

Всего записей: 7 | Зарегистр. 13-12-2013 | Отправлено: 22:30 17-07-2016
Merlin2006

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

Цитата:
dirigar

Спасибо, но у мене не пошло.. точнее ничего не выдало...

Всего записей: 473 | Зарегистр. 20-07-2009 | Отправлено: 12:45 19-07-2016
Treest

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

Код:
 
$src = "C:\Users\user1\desktop\tmp2"
$dest = "C:\Users\user1\desktop\tmp1"
$filtr = (Get-Date).AddYears(-1)
 
$files = Get-ChildItem $src -recurse | Where-Object {$_.LastWriteTime -lt $filtr}
 
foreach ($file in $files){
    $DestFile=$file.FullName.Replace("tmp2","tmp1")
    Copy-Item $file.FullName -destination $DestFile -force
}
 

 
При параметрах -gt и-ge все чудесно копируется, но мне нужно отобрать именно старые файлы, при параметрах -lt / le выдается ошибка, что  

Цитата:
Copy-Item : Не удалось найти часть пути "C:\Users\user1\desktop\tmp1\2\1.txt" (полный путь к файлу).

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

Всего записей: 1 | Зарегистр. 22-08-2015 | Отправлено: 16:10 20-07-2016
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть в сети скрипт PowerShell, который проверяет внешний IP и, если тот изменился шлет письмо. Проблема в том, что данный скрипт выдает внешний IP провайдера, а мне надо внешний, динамический IP роутера, который выдает провайдер. Команда ping -r 1 -n 1 www.yandex.ru выдает именно внешний IP роутера, выданный провайдером в строчке Маршрут

Цитата:
 
Обмен пакетами с www.yandex.ru [5.255.255.5] с 32 байтами данных:
Ответ от 5.255.255.5: число байт=32 время=64мс TTL=53
    Маршрут: 172.27.x.x
 
Статистика Ping для 5.255.255.5:
    Пакетов: отправлено = 1, получено = 1, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 64мсек, Максимальное = 64 мсек, Среднее = 64 мсек
 

Как то можно все это прикрутить, чтобы слать письмо при смене IP?
Спасибо.

Всего записей: 5415 | Зарегистр. 12-10-2001 | Отправлено: 10:21 22-07-2016
kirsha

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KLASS
 
Если нужно выделить IP из строки "Маршрут: 172.27.x.x"

Код:
($Rout = ping -r 1 -n 1 www.yandex.ru) | Out-Null
$new_ip = ($Rout | Select-String '(Маршрут: )(\S+)').Matches.Groups.Value[2]

 
Добавлено:
или так  

Код:
$new_ip = ($Rout | Select-String '(\D+:\s)(\S+)').Matches.Groups.Value[2]

Всего записей: 630 | Зарегистр. 05-12-2008 | Отправлено: 15:28 22-07-2016
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kirsha
Работает! Выбрал 2 вариант... по-симпатичней.
=============
Доработанный вариант для ботов здесь оставил.
Отправить сообщение при смене внешнего IP роутера
Заменить мыло и пароль на свои.
Суем скрипт в планировщик заданий.

Всего записей: 5415 | Зарегистр. 12-10-2001 | Отправлено: 04:28 23-07-2016 | Исправлено: KLASS, 09:59 23-07-2016
kirsha

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KLASS
 
Так как вместо WebClient используется ping, то и объект создавать не нужно.
 
Эта строка лишняя (бесполезная):

Код:
 $web=New-Object net.webclient

Всего записей: 630 | Зарегистр. 05-12-2008 | Отправлено: 09:38 23-07-2016
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kirsha
Понял, убрал.
Еще мысль посетила автоматизировать до конца, а мозгов не хватает. Наберусь наглости спрошу еще.
Пришло письмо с темой измененного IP. Почтовик Bat может выплюнуть
нужную информацию в файл в таком вот виде:

Цитата:
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
From:    KLASS <tudr74@gmail.com>
To:      klass@bk.ru <klass@bk.ru>
Date:    Saturday, July 23, 2016, 9:36:00 AM
Subject: 172.27.43.219
Files:   Message01.eml
--====----====----====----====----====--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
 

Как можно используя Powershell прочесть из этого файла IP и сунуть эту инфу в известный текстовый файл
%UserProfile%\AppData\Roaming\Microsoft\Network\Connections\Pbk\rasphone.pbk
У меня это соединение по VPN с офисом.
В файле rasphone.pbk есть строка

Цитата:
 
PhoneNumber=172.27.43.219
 

т.е. заменить полученный по почте IP в файле rasphone.pbk, тогда получим почти "статический" IP адрес у роутера в Офисе

Всего записей: 5415 | Зарегистр. 12-10-2001 | Отправлено: 10:12 23-07-2016 | Исправлено: KLASS, 10:18 23-07-2016
kirsha

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KLASS
 
Это часть файла?
Наверное лучше было бы глянуть на содержимое этих файлов сразу, чтобы избежать косяков, а так почти то же самое.

Всего записей: 630 | Зарегистр. 05-12-2008 | Отправлено: 11:15 23-07-2016
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kirsha
В облако Mail.ru положил архив с обоими файлами.

Всего записей: 5415 | Зарегистр. 12-10-2001 | Отправлено: 11:32 23-07-2016
kirsha

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

Код:
$ExtIP = (gc .\ext_ip_BAT.txt | sls  '(\D+:\s)(\S+)').Matches.Groups.Value[2]
$(gc .\rasphone.pbk | foreach {if ($_ -match '^PhoneNumber=') {$_ -replace $_,"PhoneNumber=$ExtIP"} else {$_}}) | Out-File .\rasphone.pbk -Encoding OEM

Пути к файлам подставить свои.

Всего записей: 630 | Зарегистр. 05-12-2008 | Отправлено: 12:12 23-07-2016 | Исправлено: kirsha, 12:40 23-07-2016
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kirsha
Почти ровно... сам тока заметил, что в файле rasphone.pbk оказывается несколько строк содержащих фразу "PhoneNumber", всего таких строки 3
SharedPhoneNumbers=0
PreviewPhoneNumber=0
PhoneNumber=172.27.43.219
так вот все эти строки, после отработки скрипта, теперь выглядят как
PhoneNumber=172.27.43.219

Всего записей: 5415 | Зарегистр. 12-10-2001 | Отправлено: 12:36 23-07-2016 | Исправлено: KLASS, 12:42 23-07-2016
kirsha

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KLASS
 
Косяк исправил в посте выше.

Всего записей: 630 | Зарегистр. 05-12-2008 | Отправлено: 12:42 23-07-2016
KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kirsha
Есть контакт! В разобранном виде все работает, пошел собирать, чтобы само теперь трудилось. Благодарю за помощь

Всего записей: 5415 | Зарегистр. 12-10-2001 | Отправлено: 12:50 23-07-2016
dirigar

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

Цитата:
Спасибо, но у мене не пошло.. точнее ничего не выдало...

Merlin2006
на терминальном сервере 2008 работает, а на 2003 другие номера событий. могу только предполагать что дело в этом. еще может нету доступа к удаленному журналу через rpc

Всего записей: 7 | Зарегистр. 13-12-2013 | Отправлено: 21:58 26-07-2016
djremix



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужно при установке windows 10 передвинуть партицию влево т.е. убрать системный загрузочную партицию windows 7 в 100мб. Читал что если делать через Paragon то это очень долго. Как можно передвинуть партицию с сохранением данных. На накопителе только 2 партиции в 100мб и 111гб. Какие команды нужно ввести в командной строке. Что то я помню она называлась offset и сохраняться ли данные той партиции которая будет передвинута влево.

Всего записей: 390 | Зарегистр. 07-08-2006 | Отправлено: 22:07 05-08-2016
Scaramanga



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

Всего записей: 485 | Зарегистр. 24-04-2008 | Отправлено: 16:33 23-08-2016 | Исправлено: Scaramanga, 18:02 23-08-2016
q1q1



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Для просмотра пользователей в локальных группах на Windows 8.1 запускал скрипт следующего содержания:

Код:
$LocalGroup =[ADSI]"WinNT://$env:computername/Администраторы"
$UserNames = @($LocalGroup.psbase.Invoke("Members"))
$UserNames | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}
 
$LocalGroup =[ADSI]"WinNT://$env:computername/Опытные пользователи"
$UserNames = @($LocalGroup.psbase.Invoke("Members"))
$UserNames | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}

 
Однако, при запуске на Windows 10 этот скрипт выдает ошибку:

Код:
Ошибка при вызове GetType. Не удалось найти элемент.
+ ...  | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $ ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: ( [], MissingMemberException
    + FullyQualifiedErrorId : System.MissingMemberException

 
Подскажите, пожалуйста, как это исправить?

Всего записей: 61 | Зарегистр. 08-01-2009 | Отправлено: 14:31 23-10-2016 | Исправлено: q1q1, 14:33 23-10-2016
PhoenixUA

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

Код:
$_.GetType.Invoke().InvokeMember("Name",'GetProperty', $null, $_, $null)

 
https://mcpmag.com/articles/2015/06/18/reporting-on-local-groups.aspx

Всего записей: 2071 | Зарегистр. 17-11-2005 | Отправлено: 18:35 23-10-2016
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » PowerShell

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2017

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru