Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» PowerShell

Автор: Spy686
Дата сообщения: 03.12.2015 20:25
Каким образом установить PowerShell 3,0 на Win XP ?
Автор: bifido76
Дата сообщения: 04.12.2015 18:32
Spy686
Походу PowerShell 3.0 только для Windows 7 и выше.
Автор: Spy686
Дата сообщения: 05.12.2015 11:19
Печаль.

Нужна команда Invoke-WebRequest.

Прийдется выкручиваться так:

Код: $url = "http://www.astronomy.ru/forum/index.php"
$ie = New-Object -ComObject InternetExplorer.Application
$ie.Navigate($URL)
while($ie.Busy) {start-sleep -m 50}
$ie.Document.getElementsByTagName("td") | Where classname -eq lastpost
$ie.Quit()
Автор: Spy686
Дата сообщения: 06.12.2015 14:35
Возможно ктото подскажет где почитать про то как работать с post get запросами через powershell.

т.е. к примеру есть запрос:

Код:
GET http://m.vk.com/login HTTP/1.1
Host: m.vk.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: remixlang=0; remixstid=841603256_8179c3030b9fa4fa5d; remixflash=0.0.0; remixscreen_depth=24; remixdt=0; remixseenads=1; _ym_uid=1449386746460878061; _ym_isad=0; remixmdevice=1280/1024/1/!!-!!!!; remixlhk=8a82c3bd05825a1955
Connection: keep-alive

Автор: BW4ever
Дата сообщения: 11.12.2015 14:34
Подскажите, как вернуть результат функции в виде массива?
Хочу получить список доменных групп текущего пользователя. Данный вариант работает, но возвращает результат как строку
function get-CUserADGroups{
$user=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$groups=$user.groups.Translate([System.Security.Principal.NTAccount])
$userdomain=$user.name.Split("\")[0]
$domaingroups=""
foreach ($group in $groups)
{
$group=$group.ToString()
if ($group.StartsWith($userdomain) -eq $true)
{
$domaingroups += $group.Replace("$userdomain\",",")
}
}
return $domaingroups
}
Автор: KapralBel
Дата сообщения: 11.12.2015 14:42

Цитата:
function get-CUserADGroups{
$user=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$groups=$user.groups.Translate([System.Security.Principal.NTAccount])
return $groups
}

Автор: BW4ever
Дата сообщения: 11.12.2015 14:47
Ну... я хотел локальные отфильтровать, и домен вырезать. А если брать $groups, то там будет все подряд.
Автор: KapralBel
Дата сообщения: 11.12.2015 14:54
Тогда объявите $domaingroups как массив
например $domaingroups=1..100 (массив из 100 элементов)
и в цикле foreach добавьте переменную индекса массива (например $index)
и
$domaingroups[$index] += $group.Replace("$userdomain\",",")
$index++
Автор: BW4ever
Дата сообщения: 11.12.2015 14:59
А можно как-то в PoSH объявить пустой массив, чтобы потом в него добавлять значения?
Автор: iNNOKENTIY21
Дата сообщения: 11.12.2015 23:02

Цитата:
А можно как-то в PoSH объявить пустой массив, чтобы потом в него добавлять значения?

[string[]]$domaingroups=$null
Автор: Joo1z
Дата сообщения: 12.02.2016 14:31
Давненько я не брал шашку в руки...

Столкнулся с непоняткой почему так
Get-ClusterNode | Get-ClusterResource | ?{$_.resourcetype.name -eq "Virtual Machine"}

Код:
Name State Group ResourceType
---- ----- ----- ------------
Virtual Machine DC-01-UK-TRM-01 Online DC-01-UK-TRM-01 Virtual Machine
Virtual Machine DC-01-UK-TRM-02 Online DC-01-UK-TRM-02 Virtual Machine
Virtual Machine DC-01-UK-APP-01 Online DC-01-UK-APP-01 Virtual Machine
Virtual Machine DC-01-UK-SQL-01 Online DC-01-UK-SQL-01 Virtual Machine
Virtual Machine DC-01-UK-APP-03 Online DC-01-UK-APP-03 Virtual Machine
Virtual Machine DC-01-UK-SQL-02 Online DC-01-UK-SQL-02 Virtual Machine
Virtual Machine DC-01-UK-TRM-03 Online DC-01-UK-TRM-03 Virtual Machine
Автор: Joo1z
Дата сообщения: 15.03.2016 18:46
Башка не варит.
Есть запрос..., ну например
Get-WmiObject Win32_OperatingSystem | ft CSName, Caption, CSDVersion, Version, OSArchitecture
Как мне не создавая несколько запросов присвоить переменным соответствующие значения?
чтобы не было
$aaa=(Get-WmiObject Win32_OperatingSystem).CSName
$bbb=(Get-WmiObject Win32_OperatingSystem).Caption
$ccc=(Get-WmiObject Win32_OperatingSystem).Version
.... и т.д., а массиву переменных присвоился массив значений из вывода.
типа $aaa, $bbb, $ссс | foreach $_=(Get-WmiObject Win32_OperatingSystem).$Property
Автор: angeltwo
Дата сообщения: 05.04.2016 13:58
Joo1z
а зачем массив и переменные? Присвойте вывод одной переменной и используйте весь объект, указывая в нужных местах нужные свойства

Код:
$o = Get-WmiObject Win32_OperatingSystem | Select CSName, Caption, CSDVersion, Version, OSArchitecture

$o.Caption
$o.CSDVersion
$o.CSName
$o.OSArchitecture
$o.Version
Автор: Kakazabr
Дата сообщения: 26.04.2016 23:20
Здравствуйте, появилась задача написать скрипт...

...кoтoрый в зaдaннoй пaпкe |"пaрaмeтр cкриптa"| и пoдпaпкaх ищeт фaйлы *.txt, и, ecли рaзмeр фaйлa бoльшe 200 Кб или дaтa пocлeднeгo измeнeния более 60 днeй, пeрeмeщaeт eгo в oтдeльную пaпку |"втoрoй пaрaмeтр cкриптa"|.
Cкрипт дoлжeн лoгирoвaть прoизвeдeнныe дeйcтвия в log.txt
Также при перемещении файлов необходимо обеспечить уникальность имен файлoв.

Помогите пожалуйста в решении задачки. Мое знакомство с PS состоялось не так давно, и знаний недостаточно...
Автор: zoric
Дата сообщения: 27.04.2016 19:07
Подскажите, как получить доступ к дополнительным свойствам файла (те, что скрываются во вкладке "Подробно")?
Автор: Joo1z
Дата сообщения: 28.04.2016 16:35
zoric
Встроенных возможностей похоже нет, но есть варианты готовых скриптов. https://gallery.technet.microsoft.com/scriptcenter/get-file-meta-data-function-f9e8d804
https://rkeithhill.wordpress.com/2005/12/10/msh-get-extended-properties-of-a-file/

Добавлено:
Kakazabr
Честно говоря лень скрипт писать.
Get-Help Get-Item -Examples и Get-Help Get-ChildItem -Examples тебе в помощь.
На 13й странице темы мне объясняли как параметры для скрипта прописывать.

Ах да! Часто, чтобы знать какими свойствами обладает объект (или какие методы к нему применимы) приходилось пользоваться Get-Member, например: Get-Item file.txt | Get-Member
Автор: dirigar
Дата сообщения: 06.05.2016 14:49
BW4ever
Наверно уже не актуально, но все же.

Код:
function get-CUserADGroups{
$user=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$groups=$user.groups.Translate([System.Security.Principal.NTAccount])
$userdomain=$user.name.Split("\")[0]
$domaingroups=""
$groups | % {
$_.value -match "^\s*$userdomain\\(.+)" | Out-Null;
$Matches[1];
$Matches.Clear()
}
}
Автор: storysoft
Дата сообщения: 06.05.2016 19:15
Это баги или фишка?
1. Почему такой код выдает ошибку, получается trap не работает в функциях pipline?

Код:
function Out-FileLog {
trap {
write-host $_
break
}
begin {#код}
process {#код}
}

begin : Имя "begin" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность написания имени, а также наличие и правильность
пути, после чего повторите попытку.
строка:6 знак:5
+ begin {
+ ~~~~~
+ CategoryInfo : ObjectNotFound: (begin:String) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : CommandNotFoundException
Автор: dirigar
Дата сообщения: 10.05.2016 01:50
storysoft

1. trap не там находится, т.е. не в скриптовом блоке.
правильно так вроде
trap{}
function a {begin{trap{}} process{trap{}} end{trap{}}}
2. Split-Path -LiteralPath ".\Нужен\для\не\существующего\пути.нет"
у него может не быть родительской папки.
У командлетов Powershell может быть несколько наборов параметров, каждый при этом набор имеет свое имя, если использовать параметры из разных наборов то будет ошибка, что и имеет место.
ссылка на статью https://smearg.wordpress.com/2015/06/05/%D0%B7%D0%B0%D1%87%D0%B5%D0%BC-%D0%BD%D1%83%D0%B6%D0%BD%D1%8B-%D0%BD%D0%B0%D0%B1%D0%BE%D1%80%D1%8B-%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2-%D0%B2-powershell/
пример:

Код: function a {
[CmdletBinding(DefaultParameterSetName='n1')]
param (
[parameter(ParameterSetName="n1")]$par1,
[parameter(ParameterSetName="n2")]$par2
)
begin {}
process { }
end {
trap {Write-Host -fore Cyan "trap2"; throw "skdjf";}
Write-Host "`nfucntion a" }
}
Автор: Merlin2006
Дата сообщения: 23.06.2016 18:57
Добрый день!
Очень нужна помощь, бо сам не справлюсь (знаний не хватает).
Есть 2 скрипта на ps. Один выводит в файл информацию о входах в терминальную сессию, другой о выходах. Есть общее поле TargetLogonId. Хочется объединить эти два скрипта, чтобы выводилась информация о начале сессии, ее конце, продолжительность и т.п., т.е. как-то объединить два выходящих файла (в них есть вся мне необходимая информация).
Может кто-нибудь помочь? Могу выложить код.
Или может у кого-нибудь есть готовые решения?
Спасибо.
Автор: dirigar
Дата сообщения: 17.07.2016 22:30
Вообще уже что-то похожее у меня было. модифицировал не много. Может ещё самому пригодится.

Код:

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
Автор: Merlin2006
Дата сообщения: 19.07.2016 12:45

Цитата:
dirigar

Спасибо, но у мене не пошло.. точнее ничего не выдало...
Автор: Treest
Дата сообщения: 20.07.2016 16:10
Доброго времени суток, уважаемые форумчане, прошу помочь с одним скриптиком, который слепил с частей и по непонятным причинам он отказывается работать. Скрипт должен копировать все файлы, дата изменения которых меньше указанной с сохранением иерархии папок в другой каталог :

Код:
$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
}
Автор: KLASS
Дата сообщения: 22.07.2016 10:21
Есть в сети скрипт 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?
Спасибо.
Автор: kirsha
Дата сообщения: 22.07.2016 15:28
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]
Автор: KLASS
Дата сообщения: 23.07.2016 04:28
kirsha
Работает! Выбрал 2 вариант... по-симпатичней.
=============
Доработанный вариант для ботов здесь оставил.
[more=Отправить сообщение при смене внешнего IP роутера]
$ext_ip="C:\Users\Public\ext_ip.txt"
$def_ip="0.0.0.0"
$FileExists = Test-Path $ext_ip
If ($FileExists -eq $False) {$def_ip | Out-File $ext_ip}

($Rout = ping -r 1 -n 1 www.yandex.ru) | Out-Null
$new_ip = ($Rout | Select-String '(\D+:\s)(\S+)').Matches.Groups.Value[2]
$old_ip=Get-Content -Path $ext_ip -TotalCount 1

If (-not ($new_ip -eq $old_ip)) {
$new_ip | Out-File $ext_ip
$EmailFrom = "check_ip_address@mail.ru"
$EmailTo = "check_ip_address@mail.ru"
$Subject = $new_ip
$Body = ""
$SMTPServer = "smtp.mail.ru"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 25)
$SMTPClient.EnableSsl = $True
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("check_ip_address@mail.ru", "P@ssw0rd");
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body) }
[/more]
Заменить мыло и пароль на свои.
Суем скрипт в планировщик заданий.
Автор: kirsha
Дата сообщения: 23.07.2016 09:38
KLASS

Так как вместо WebClient используется ping, то и объект создавать не нужно.

Эта строка лишняя (бесполезная):

Код: $web=New-Object net.webclient
Автор: KLASS
Дата сообщения: 23.07.2016 10:12
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 адрес у роутера в Офисе
Автор: kirsha
Дата сообщения: 23.07.2016 11:15
KLASS

Это часть файла?
Наверное лучше было бы глянуть на содержимое этих файлов сразу, чтобы избежать косяков, а так почти то же самое.
Автор: KLASS
Дата сообщения: 23.07.2016 11:32
kirsha
В облако Mail.ru положил архив с обоими файлами.

Страницы: 123456789101112131415161718192021222324

Предыдущая тема: Не понятная проблема с видеокартой.


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.