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


Система IP-видеонаблюдения "Линия". Скачать бесплатную демо-версию для 16 камер. НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаФотогалереяГазетаКто в 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
Godzie

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

Всего записей: 22 | Зарегистр. 11-09-2015 | Отправлено: 14:07 02-12-2015
Spy686



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Каким образом установить PowerShell 3,0 на Win XP ?

Всего записей: 193 | Зарегистр. 17-12-2010 | Отправлено: 21:25 03-12-2015
bifido76



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Spy686
Походу PowerShell 3.0 только для Windows 7 и выше.

Всего записей: 769 | Зарегистр. 28-09-2015 | Отправлено: 19:32 04-12-2015
Spy686



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Печаль.
 
Нужна команда 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()

 
---
 
Решение:
 
 

Код:
# function для конвертации из Json
function ConvertFrom-Json20([object] $item){  
    add-type -assembly system.web.extensions  
    $ps_js=new-object system.web.script.serialization.javascriptSerializer
    return $ps_js.DeserializeObject($item)  
}
 
 
# function получения $response_array из запроса
function response_array($objUrl){  
    $client = new-object System.Net.WebClient                # new-object
    $client.Encoding = [System.Text.Encoding]::UTF8            # Encoding
    $response_array = $client.DownloadString($objUrl)            # DownloadString
    return $response_array = ConvertFrom-Json20($response_array)    # Конвертируем полученные данные из формата JSON в массив  
}

Всего записей: 193 | Зарегистр. 17-12-2010 | Отправлено: 12:19 05-12-2015 | Исправлено: Spy686, 15:36 06-12-2015
Spy686



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возможно ктото подскажет где почитать про то как работать с 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
 
 

 
Как его с имитировать в PS со всеми  headers, и продолжить работать с данным объектом, т.е. затем отправить POST запрос, сохранить coocks и т.д.
 
Возможно есть примеры?

Всего записей: 193 | Зарегистр. 17-12-2010 | Отправлено: 15:35 06-12-2015 | Исправлено: Spy686, 15:36 06-12-2015
BW4ever

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, как вернуть результат функции в виде массива?
Хочу получить список доменных групп текущего пользователя. Данный вариант работает, но возвращает результат как строку
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
}

Всего записей: 255 | Зарегистр. 18-05-2006 | Отправлено: 15:34 11-12-2015
KapralBel



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

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


Всего записей: 10631 | Зарегистр. 16-02-2005 | Отправлено: 15:42 11-12-2015
BW4ever

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну... я хотел локальные отфильтровать, и домен вырезать. А если брать $groups, то там будет все подряд.

Всего записей: 255 | Зарегистр. 18-05-2006 | Отправлено: 15:47 11-12-2015 | Исправлено: BW4ever, 15:48 11-12-2015
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Тогда объявите $domaingroups как массив
например $domaingroups=1..100 (массив из 100 элементов)
и в цикле foreach добавьте переменную индекса массива (например $index)
и
$domaingroups[$index] += $group.Replace("$userdomain\",",")  
$index++

Всего записей: 10631 | Зарегистр. 16-02-2005 | Отправлено: 15:54 11-12-2015
BW4ever

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А можно как-то в PoSH объявить пустой массив, чтобы потом в него добавлять значения?

Всего записей: 255 | Зарегистр. 18-05-2006 | Отправлено: 15:59 11-12-2015 | Исправлено: BW4ever, 16:05 11-12-2015
iNNOKENTIY21

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

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

[string[]]$domaingroups=$null

Всего записей: 579 | Зарегистр. 16-08-2012 | Отправлено: 00:02 12-12-2015
Joo1z



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Давненько я не брал шашку в руки...
 
Столкнулся с непоняткой почему так
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
 

выдаёт список из 6 виртуалок, а вот так...
 

Код:
Get-ClusterNode | Get-ClusterResource | ?{$_.resourcetype.name -eq "Virtual Machine"} | foreach {Get-VM $_.OwnerGroup.Name}
 
Host                      VMElementName             State        Up-Time (mS) Owner
--------                  -------------             -----        ------------ -----
DC-01-UK-NOD-01           DC-01-UK-TRM-01           Running      835481603
DC-01-UK-NOD-01           DC-01-UK-TRM-02           Running      835473476
 

...получаем инфу только по двум?
 
---updated---
Кажется, разобрался. Без параметров, командлет Get-VM выполняется в контексте текущего сервера, соответственно нужен ключ -Server.

Всего записей: 123 | Зарегистр. 17-02-2009 | Отправлено: 15:31 12-02-2016 | Исправлено: Joo1z, 15:48 12-02-2016
Joo1z



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Башка не варит.
Есть запрос..., ну например
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

Всего записей: 123 | Зарегистр. 17-02-2009 | Отправлено: 18:46 15-03-2016
angeltwo

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Joo1z
а зачем массив и переменные? Присвойте вывод одной переменной и используйте весь объект, указывая в нужных местах нужные свойства

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

Всего записей: 251 | Зарегистр. 09-05-2007 | Отправлено: 13:58 05-04-2016
Kakazabr

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте, появилась задача написать скрипт...  
   
  ...к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 состоялось не так давно, и знаний недостаточно...

Всего записей: 3 | Зарегистр. 26-04-2016 | Отправлено: 23:20 26-04-2016
zoric

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, как получить доступ к дополнительным свойствам файла (те, что скрываются во вкладке "Подробно")?

Всего записей: 137 | Зарегистр. 29-07-2005 | Отправлено: 19:07 27-04-2016
Joo1z



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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

Всего записей: 123 | Зарегистр. 17-02-2009 | Отправлено: 16:35 28-04-2016 | Исправлено: Joo1z, 16:45 28-04-2016
dirigar

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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()
   }
}
 

 
Добавлено:
Kakazabr

Цитата:
 ...к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в.  

 
Уникальность обеспечивается за суффикса из текущего времени.

Код:
 
function moveTXT {
    [CmdletBinding( SupportsShouldProcess = $true )]
    param
    (
        [parameter(ValueFromPipeline=$True,Mandatory=$true)]
        [string] $Path
        ,$Destination = "E:\BACKUP\txt"
        ,$LogFile = ".\log1.log"
        ,$Size = 200kb
        ,$Age = 60
    )
    md $Destination -Force | Out-Null;
    ls $path *.txt -Force -Recurse `
    | ?  { -not $_.psIsContainer } `
    | ? { ($_.length -gt $size) -or ($_.lastwritetime -gt (get-date).AddDays(-$age)) } `
    | % {  
        $DestPath = "$Destination\$($_.BaseName)_"+ `
        (get-date -Format "yyMMddHHmmss") + $_.Extension;
        $_ | Move-Item -Destination $DestPath;
        Add-Content $LogFile -Value "$( get-date):`tMove ""$($_.fullname)"" to ""$DestPath"""
    }
}
 

Всего записей: 7 | Зарегистр. 13-12-2013 | Отправлено: 14:49 06-05-2016 | Исправлено: dirigar, 16:05 06-05-2016
storysoft

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это баги или фишка?
1. Почему такой код выдает ошибку, получается trap не работает в функциях pipline?

Код:
 
function Out-FileLog {
    trap {
      write-host $_
      break
    }
    begin {#код}
    process {#код}
}
 
begin : Имя "begin" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность написания имени, а также наличие и правильность  
пути, после чего повторите попытку.
строка:6 знак:5
+     begin {
+     ~~~~~
    + CategoryInfo          : ObjectNotFound: (begin:String) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : CommandNotFoundException
 

 
2.Еще интересней - такой код не работает хотя по описанию командлета должно работать
 

Код:
 
split-path -literalpath "C:\Test\Logs\test.log" -parent
 
Split-Path : Не удается разрешить набор параметров с использованием указанных именованных параметров.
строка:1 знак:1
+ split-path -literalpath "C:\Test\Logs\test.log" -parent
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: ( [Split-Path], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.PowerShell.Commands.SplitPathCommand
 

 
С параметром -Path работает.
 
У кого-нибудь есть идеи?

Всего записей: 3 | Зарегистр. 08-01-2008 | Отправлено: 19:15 06-05-2016
dirigar

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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" }
}
 

Всего записей: 7 | Зарегистр. 13-12-2013 | Отправлено: 01:50 10-05-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