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

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

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

KLASS (06-03-2018 00:43): Объединение тем по сценариям: Сценарии Windows
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

   

Uriu

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

PowerShell 1.0 -  На текущий момент совершенно неактуальная версия, интересная только для истории. /Прямые ссылки/
PowerShell 2.0 и WinRM 2.0 - Последняя версия, работающая на Windows XP и Windows 2003 (Ещё) /Прямые ссылки/
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 Core 6.0 (не заменяет PowerShell 5.1)



Ассоциация

Что бы ассоциировать скрипты с PowerShell, аналогично выполнению .bat/.cmd-файлов
нужно в командной строке набрать следующую команду(ы)
Версии 1.0-5.1 для 32-битных ОС: ftype microsoft.powershellscript.1=%windir%\system32\windowspowershell\v1.0\powershell.exe -file "%1"  
%*
 
Версии 1.0-5.1 для 32-битных ОС: ftype microsoft.powershellscript.1=%windir%\sysWOW64\windowspowershell\v1.0\powershell.exe -file "%1"  
%*
 
Версия 6.0 дя 32-битной ОС: ftype microsoft.powershellscript.1="C:\Program Files (86)\PowerShell\6.0.0\pwsh.exe"  -file "%1" %*
Версия 6.0 дя 64-битной ОС: ftype microsoft.powershellscript.1="C:\Program Files\PowerShell\6.0.0\pwsh.exe"  -file "%1" %*



вопрос о подписи скриптов

Что бы PowerShell не задавал вопрос о том, что скрипты не подписаны, ввести в нем команду
set-executionpolicy unrestricted
или в командной строке
powershell Set-ExecutionPolicy Unrestricted -force
(для этих 2-х действий требуются административные права)



Прочее


  • Если используете "белый список" в брандмауэре Windows, то для работы сценариев в сети необходимо создать 2 исходящих правила для svchost.exe и PowerShell.exe.
  • В отличие от батников кодировка скриптов на 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 | Исправлено: KapralBel, 09:31 29-01-2018
zloyweagle

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые Гуру! Нужна ваша помощь! На днях перестал запускаться PowerShell, выдаёт след. сообщение:
d:\Backup_ATS\CCR>powershell.exe
Windows PowerShell
(C) Корпорация Майкрософт, 2012. Все права защищены.
 
PS d:\Backup_ATS\CCR> Windows PowerShell завершена из-за следующей ошибки:
Невозможно загрузить файл или сборку "System.Management.Automation, Version=3.0
.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" или один из зависимых от
них компонентов. Ожидалось, что модуль содержит манифест сборки.
 
d:\Backup_ATS\CCR>
В инетах ничего не нашёл(
PS: система Win 2008 R2 Standart SP1 x64

Всего записей: 2 | Зарегистр. 07-09-2006 | Отправлено: 09:53 31-01-2013 | Исправлено: zloyweagle, 14:46 31-01-2013
customkeys



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток.
Прошу помочь в написании PS-скрипта.
Задача такая: есть сетевой путь "\\server1\folders", где находятся десятки именных папок пользователей с файлами, например Ivanov, Petrov, Sidorov и т.д.; есть csv-файл, в котором указаны имена папок, которые надо скопировать/переместить в "\\server2\archive" (csv-файл формата: NAME и далее в столбик наименования папок, которые нужно скопировать/перенести).
 
Сам скрипт:

Код:
$csv="C:\users.csv"
$serv1="\\server1\folders"
$serv2="\\server2\archive"
Import-Csv -Path $csv | ForEach-Object {Copy-Item -Path $serv1 -Recurse -Destination $serv2 $_.NAME -force}

Понимаю это так: скопировать каждый объект из столбца "NAME" csv-файла из serv1 в serv2 со всем содержимым.  
Естественно, скрипт не отрабатывает.  
Требуется Ваша помощь - предложите пожалуйста свой вариант или укажите мне на ошибку.
Заранее спасибо.
 
Добавлено:
Заработал следующий вариант скрипта:

Код:
Get-Content $csv | Copy-Item -Path {"\\server1\folders\$_"} -Destination $serv2 -Force -Recurse

Но скрипт работает только в том слуачае, если в csv-файле нет строки с заголовком "NAME", а есть просто значения.
 
Но все же хотелось бы увидеть рабочий вариант скрипта с csv-файлом, в котором есть заголовок.

Всего записей: 5 | Зарегистр. 16-12-2010 | Отправлено: 15:28 06-03-2013 | Исправлено: customkeys, 15:29 06-03-2013
korggrodno



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
хочу создать массив состоящий из одного элемента
который является массивов состоящим из двух элементов  
пытаюсь так
$spel = @(    @("178.124.153.32","SPEL_base")    )
и так
[object[,]] $spel = @("178.124.153.32","SPEL_base")
и так
$spel = [array]([array]("178.124.153.32","SPEL_base"))
но по прежнему $spel превращается в одномерный массив из двух элементов
 
если делаю так
$spel = ([array[]]("178.124.153.32","SPEL_base"))
то получучаю такое значение
{{178.124.153.32}, {SPEL_base}}
а мне нужно добиться во такого значения
{{178.124.153.32, SPEL_base}}
 
Причем если делать вот так
$spel = @(    @("178.124.153.32","SPEL_base"), @("178.124.153.32","SPEL_base") )
то получается все как надо вот такое значение
{{178.124.153.32, SPEL_base}, {178.124.153.32, SPEL_base}}
проблема возникает когда в массиве один элемент
 
Добавлено:
надо так (,("178.124.153.32","SPEL_base"))
спасибо

Всего записей: 383 | Зарегистр. 15-11-2007 | Отправлено: 08:13 15-04-2013
py6jlb125



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как с помощью WMI получить пользователя который на компе залогинился (комп будет из списка и вывод должен быть "имя компа-имя пользователя") если можно с примерами!!!!!

Всего записей: 26 | Зарегистр. 22-09-2009 | Отправлено: 17:49 24-04-2013
Oldster



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
py6jlb125
не совсем понятно при чем тут PowerShell и как именно зашли на комп.
если через RDP - то анализируй журнал безопасности, например так (W2K8 R2):
 
$dtNow = Get-Date
$dtPrev = $dtNow.AddHours(-1) # Читаем данные за последний час
$login = @() # Массив подключения пользователя
$logout = @() # Массив отключения пользователя
 
Get-EventLog -LogName security | Where -FilterScript {
($_.TimeWritten -le $dtNow -and $_.TimeWritten -ge $dtPrev -and $_.EventID -eq 4624 -and $_.ReplacementStrings[8] -eq 10)} |  
ForEach-Object {
    $login += New-Object PSObject -Property @{
        ComputerName = $env:ComputerName
        TimeGenerated = $_.TimeGenerated
        User = $_.ReplacementStrings[5]
        Ip = $_.ReplacementStrings[18]
        SessionID = $_.ReplacementStrings[7]
    }
}
 
Get-EventLog -LogName security | Where -FilterScript {
($_.TimeWritten -le $dtNow -and $_.TimeWritten -ge $dtPrev -and $_.EventID -eq 4634 -and $_.ReplacementStrings[4] -eq 10)} |  
 
ForEach-Object {
    $logout += New-Object PSObject -Property @{
        ComputerName = $env:ComputerName
        TimeGenerated = $_.TimeGenerated
        User = $_.ReplacementStrings[1]
        SessionID = $_.ReplacementStrings[3]
    }
}
$login
$logout

----------
Ой не TCP моё IP (C) Диман

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 09:32 25-04-2013
py6jlb125



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
поясняю, пишу скрипт, который проверяет включенность компов в сети, этот скрипт выводит список имен включенных компов(написано на повешеле), таперь нужно чтоб помимо имени компа полочалось еще и имя пользователя зработающего за этим компом в данный момент,
 
 
принцип действия такой: скрипт выгребает из AD список имен компов, потом с помощью wmi и test-connection они пингуються и если комп в сети то в файл записываеться его имя, дальше нужно из этого файла взять поочереди имена и определять пользователя, потом записывать строку " имякомпа-пользователь" в третий файл!!! вот проблема как раз таки в определнии имени пользователя!!!! очень прошу помочь.

Всего записей: 26 | Зарегистр. 22-09-2009 | Отправлено: 15:42 25-04-2013
rsendru

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
To  py6jlb125
 
 
Посмотрите этот скрипт, который проверяет запущен ли процесс на компьютерах в сети. Он не совсем по Вашей теме, но в нем Вы найдете ответы на вопросы по пингованию компьютеров, определению имени компьютера, имени зарегистрированного пользователя, полного пути организационного подразделения, типа операционной системы и др.  
 
http://rsend.ru/blogru.htm#P3.5

Всего записей: 2 | Зарегистр. 10-04-2013 | Отправлено: 22:58 26-04-2013 | Исправлено: rsendru, 23:17 26-04-2013
Oldster



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
py6jlb125
если есть AD и все компы в домене, то проще воспользоваться простым скриптом, типа этого:
 
echo %date% %time% - logon %username% at %computername%>>\\server\logons\logons.log
 
и повесить его в груп. политиках на логин\логаут, проще и быть не может. у меня так и было сделано.

----------
Ой не TCP моё IP (C) Диман

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 13:41 27-04-2013
py6jlb125



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Дело в том что права в домене ограниченны и досупа к групповым политикам нету, поэтому и использую такой "сложный" скрипт.
 
Добавлено:
разобрался со своим скриптом, но есть проблема, выполняю Get-content из файла в переменную, а потом использую цикл foreach то имена из файла передаются с одним лишим пробелом, и поэтому ни как не получается получить ответ(просто получается неправильное имя!!!!), как можно решить проблему с лишним пробелом при чтении из файла!!????? Заранее спасибо!!!

Всего записей: 26 | Зарегистр. 22-09-2009 | Отправлено: 09:22 29-04-2013
ChronoAngel



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Гуру подскажите,куда что прописать что бы PowerShell ISE крякозяблы не писал вместо русского языка?

Всего записей: 1421 | Зарегистр. 30-12-2008 | Отправлено: 19:23 22-05-2013
Pompeii

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
...
$IncludeFiles = ("*.jpg","*.avi","*.mpg")
Get-ChildItem -Path $mydrive -Recurse -Include $IncludeFiles  
 
Мне надо что бы IncludeFiles брались не из списка а из файла в котором уже будет их перечисление.
$IncludeFiles = "С:\IncludeFiles.txt"
 
Как правильно в файле перечислять их?

Всего записей: 10 | Зарегистр. 27-08-2013 | Отправлено: 12:06 02-09-2013
Oldster



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pompeii
$ext = Get-Content $IncludeFiles
а в файле - каждое расширение с новой строки, должно сработать

----------
Ой не TCP моё IP (C) Диман

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 12:15 02-09-2013
xsoft2

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Только не пинайте, использую надстройку к шеллу ActiveRoles Management Shell
Она запускается C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noexit -command ". 'C:\Program Files\Quest Software\Management Shell for AD\qsft.ps1'"
в неё делаю копи паст скрипта на выполнение.. как это всё сделать через крон ? Уже устал интернет ковырять, как простые скрипты запускать через крон умею, а через надстройку понять не могу.
Разобрался
C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -psconsolefile "C:\Program Files\Quest Software\Management Shell for AD\ConsoleSettings.psc1" -noexit -command ". 'F:\invent.ps1'"

Всего записей: 6 | Зарегистр. 15-05-2008 | Отправлено: 09:52 09-09-2013 | Исправлено: xsoft2, 13:12 09-09-2013
dariusii



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
PoerShell теряет историю набранных команд. Кто-нибудь знает, как это исправить?

Всего записей: 2487 | Зарегистр. 08-11-2003 | Отправлено: 16:54 28-09-2013
BVV63



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, в PowerShell имеется аналог переменных %1, %2, %3 и т. п. батника, и если да - то какой?

Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 13:54 07-10-2013
Oldster



Старик
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BVV63
в самом начале (!!!) скрипта:
Param (
$Servers = 'my.com',
$User = 'user1'
)
 
потом при вызове: my.ps1 -Server "test.com" -User "user2"


----------
Ой не TCP моё IP (C) Диман

Всего записей: 1367 | Зарегистр. 08-01-2003 | Отправлено: 14:45 07-10-2013
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
BVV63
Есть
См. Ошибки и предупреждения в журнале событий по электронной почте (в4.0)

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 14:46 07-10-2013
Lich130387

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как печатать на принтере? Нигде не нашёл. Нужно печатать pdf-документ.

Всего записей: 33 | Зарегистр. 20-08-2012 | Отправлено: 07:15 23-10-2013
Lich130387

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Решил проблему написанием такого скрипта:  

Код:
cls
 
function Print-File ($FilePath=“f:\test\Tst.pdf”)
{
    Start-Process –FilePath $FilePath –Verb Print -PassThru | %{sleep 10;$_} | kill      
}
 
function Get-DefaultPrinter {
    $printer = Get-WmiObject win32_printer
    foreach($prn in $printer) {
        if ($prn.Default) {return $prn}
    }  
     
}
 
function Set-DefaultPrinter ($name) {
    if (!$name) {    
        Write-Host "Не указано имя принтера. Операция прервана"
        return 0
    }
    else {
        $internal = GWMI -class Win32_Printer | Where {$_.Name -eq $name}  
        $internal.SetDefaultPrinter()
        return 1
    }
}  
 
$printer = Get-WmiObject win32_printer
$DefPrnName = $NULL
$prns = @()
$i = 1
 
$DefPrnName = (Get-DefaultPrinter).Name
 
do  
{
    Write-Host "Печатать на принтере, выбранном по умолчанию ($DefPrnName)? (y - yes,n - no, x - exit)"
    $ans1 = Read-Host
    if ($ans1 -eq "x") {exit}
 } until (($ans1 -ine "y") -or ($ans1 -ine "n"))
 
 
If ($ans1 -eq "y") {Print-File}
elseif ($ans1 -eq "n")  
{
    Write-Host "Выберете принтер для печати тестовой страницы:"
    foreach($prn in $printer)  
    {
        $prns += $prn
        Write-Host $i -NoNewline
        Write-Host (") "+$prn.Name)  
        $i++
    }
    Write-Host "0) Выход"  
     
    $i--        
    $numprn = Read-host
 
    If ($numprn -eq 0) {exit}
    $result = $NULL
    If ($numprn -match "[1-$i]") {
        $result = Set-DefaultPrinter ($prns[$numprn-1].Name)  
        $DefPrnName = (Get-DefaultPrinter).Name
        Write-Host "По умолчанию установлен принтер $DefPrnName"
                }
    If ($result -eq "1") {Print-File}
}
 

Всего записей: 33 | Зарегистр. 20-08-2012 | Отправлено: 13:52 25-10-2013 | Исправлено: Lich130387, 13:53 25-10-2013
Lich130387

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а как запускать скрипты, просто дважды щёлкнув на файл со скриптом ??? что-то везде выдаёт что-то красным и закрывается. сам тип файлов связал с powershell.exe
 
Всё. Сам понял, почему так. В пути к файлу со скриптом содержались пробелы. Убрал пробелы, и всё пошло, как по маслу.

Всего записей: 33 | Зарегистр. 20-08-2012 | Отправлено: 10:08 31-10-2013 | Исправлено: Lich130387, 07:21 01-11-2013
   

Страницы: 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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » PowerShell
KLASS (06-03-2018 00:43): Объединение тем по сценариям: Сценарии Windows


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru