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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
legat75

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
01MDM, temio Спасибо, но возможно немного непонятно оьяснил.. Hex-ом  смотрел что именно выдирается из файла, судя по всему символы которые не могут присутствовать в имени файла, потому и не переименовывает.
 
Файл читается в переменную  как  

Код:
(Get-Content -Path $file -TotalCount 1).Substring(4,26)).TrimEnd("")

 
PS сорри, долго не мог зайти сюда

Всего записей: 3 | Зарегистр. 18-04-2011 | Отправлено: 14:46 01-05-2011 | Исправлено: legat75, 14:48 01-05-2011
solstice

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

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

Попробуй так:
 

Код:
 
cls
$SearchRoot="yourdomain/Computers"
$badpcs = "cmd.exe","notepad.exe"
$Comps = Get-QADComputer -SearchRoot $SearchRoot -ErrorAction SilentlyContinue -IncludedProperties name  
foreach ($comp in $Comps)
{
        $name1=$Comp.Name
        $pcs = Get-WmiObject Win32_Process -ComputerName $name1
        $i=0
        do {
            $pc=$pcs | ? {$_.name -eq $badpcs[$i]}
            if ($pc -ne $null) {
                $pcn=$pc.name
                if ($pc.terminate().Returnvalue -eq 0)  
                    {"Успешно завершен процесс $pcn на компьютере $name1"}
                else  
                    {"Не удалось завершить процесс $pcn на компьютере $name1"}
                $pc=$null
            }
        $i++
        } while ($i -ne $badpcs.count)
}
 

 
P. S. Правда, понадобятся командлеты PowerGUI Script Editor от QuestSoftware
 
Добавлено:
 
post4

Цитата:
приветствую  
помогите плз решить проблему.  
запускаю скрипт для переименования нескольких ПК в домене

 
Мне помог такой скрипт

Код:
 
# Script to rename computers in a domain by parsing a CSV file  
# Assumes: File of names with a header row of OldName,NewName  
# and a row for oldname,newname pairs for each computer to be renamed.  
# Adjust filename and file path as appropriate.  
   
$csvfile = "C:\rename.csv"  
Import-Csv $csvfile | foreach {  
$oldName = $_.OldName;  
$newName = $_.NewName;  
   
Write-Host "Renaming computer from: $oldName to: $newName"  
netdom renamecomputer $oldName /newName:$newName /uD:yourdomain\user_join /passwordD:123456*z /force /reboot  
}
 

 
Где user_join - учетка с правом включения в домен
 
взял здесь

Всего записей: 664 | Зарегистр. 27-07-2006 | Отправлено: 15:36 12-05-2011 | Исправлено: solstice, 17:25 12-05-2011
legat75

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

Код:
 
$it_line = ((Get-Content -Path $file -TotalCount 1).Substring(4,26))
$it_line=[system.Text.RegularExpressions.Regex]::Replace($it_line,"\W","")
Rename-Item -Verbose -Path $file -NewName $it_line

Всего записей: 3 | Зарегистр. 18-04-2011 | Отправлено: 18:12 21-05-2011 | Исправлено: legat75, 18:15 21-05-2011
spined

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, пожалуйста, есть ли возможность использовать UNC путь в Enter-PSSession и Invoke-Command?
 
То есть, вот так работает

Код:
 
PS C:\> dir \\server1\c$\1.txt
 
    Каталог: \\server1\c$
Mode       LastWriteTime                Length     Name
-a---        24.11.2008     15:18        387         1.txt    
 

 
А вот так не работает

Код:
 
PS C:\> Enter-PSSession localhost -Credential domain\user
 
[localhost]: PS C:\> dir \\server1\c$\1.txt
 
Get-ChildItem : Не удается найти путь "\\server1\c$\1.txt", так как он не существует.
    + CategoryInfo          : ObjectNotFound: (\\server1\c$\1.txt:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
 

 
"net view \\server1" тоже работает только в первом случае, а во втором говорит "Access is denied".
В обоих случаях работаю под domain\user, который является локальным администратором и админом домена.

Всего записей: 3 | Зарегистр. 31-10-2009 | Отправлено: 11:17 17-06-2011 | Исправлено: spined, 16:58 17-06-2011
temio



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
spined
Нужно включить CredSSP для мульти-хоп аутентификации
Подробнее тут

Всего записей: 163 | Зарегистр. 27-09-2009 | Отправлено: 18:45 17-06-2011
spined

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
temio, спасибо, все понял. Жаль, что winXP и 2003 Server не поддерживают CredSSP.
 
Столкнулся еще с одной проблемкой - поведение Format-Table  в цикле.
Вот пример:

Код:
 
foreach($s in ("Comp1","Comp2")) {
Test-Connection $s -Count 1 | select Address, ResponseTime
}
 

Вывод красивый, все как надо:

Код:
 
Address             ResponseTime
-------                  ------------
comp1                    0
comp2                    0
 

Но если написать так:
Test-Connection $s -Count 1 | select Address, ResponseTime | Format-Table , то шапка таблицы выводится при каждом выполнении цикла.

Код:
 
Address               ResponseTime
-------                  ------------
comp1                    0
 
Address               ResponseTime
-------                  ------------
comp2                    0
 
 

 
Подскажите, пожалуйста, почему так происходит?  
В данном случае, Format-table  нужен для того, чтоб указать ширину столбцов. Так как иначе таблица из двух столбцов растягивается на всю ширину окна. Может есть другой способ это сделать?
 

Всего записей: 3 | Зарегистр. 31-10-2009 | Отправлено: 10:45 30-06-2011
temio



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
spined
XP SP3 поддерживает, включается правкой реестра
 
А по поводу вывода - можно напрямую скармливать в ft с параметром Property
Test-Connection $s -Count 1 | Format-Table Address, ResponseTime -Autosize

Всего записей: 163 | Зарегистр. 27-09-2009 | Отправлено: 16:30 30-06-2011
spined

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
temio, по ссылке ходил, пробовал. Не помогло. Попробую еще раз повнимательней, может что-то не так сделал.
 
А вывод в ft с параметром Property тоже не работает. Наверное потому что без ft возвращается System.Object, а с ft - System.Array. И наверное PowerShell их как-то по-разному выводит, каждый новый объект на выходе добавляет к таблице, а массив выводит каждый раз как новую таблицу.
 
Нашел такое решение:

Код:
 
function test {
 foreach($s in ("Comp1","Comp2")) {  
  Test-Connection $s -Count 1 | select Address, ResponseTime  
 }  
}
test | ft -autosize
 

Всего записей: 3 | Зарегистр. 31-10-2009 | Отправлено: 18:49 30-06-2011 | Исправлено: spined, 18:50 30-06-2011
01MDM



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

Код:
 
$array=@()
foreach($s in ("ya.ru","google.com")) {  
 
$testconnect=Test-Connection $s -Count 1 | select Address, ResponseTime
 
$hash=@{}
$hash.comp=$s
$hash.address=$testconnect.address
$hash.response=$testconnect.responsetime
 
$array += new-object psobject -p $hash
 
}
 
$array | ft comp,address,response -auto
   
 



----------
Вопросы в личке останутся без ответа

Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 19:21 30-06-2011
rafka111

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

Всего записей: 1 | Зарегистр. 18-06-2011 | Отправлено: 14:57 10-07-2011
Freiberufler2

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2 rafka111 hash table не хочешь попробовать?

Всего записей: 114 | Зарегистр. 12-01-2007 | Отправлено: 14:43 15-07-2011
unknownPS1

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как рыбка об лед ... банальность слишком затянулась - нужно всего лишь заполучить имя (имя, сестра, имя?!) ps1-файла во время выполнения скрипта; полдня перекапывания iNetа что-то результатов не дают; в Windows Shell эта банальность выглядит катастрофически просто %~n0

Всего записей: 1 | Зарегистр. 18-08-2011 | Отправлено: 16:36 18-08-2011
jeykey

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

Всего записей: 21 | Зарегистр. 29-08-2006 | Отправлено: 20:17 18-08-2011
DiZka



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста по скрипту.  
 
$arrComputers = get-Content -Path "C:\s\txt\2003.txt"
ForEach($strComputer in $arrComputers)
{
get-wmiobject -Class "win32_TimeZone" -namespace "root\CIMV2" -computername $strComputer | Format-List -property __SERVER, Caption | Out-File -Append "C:\s\txt\Report-2003.txt"
}
 
Скрипт собирает по списку из файлика временные зоны с машин. Если машина в сети (включена) все хорошо пишется в лог результат. Если машина выключена PS просто в консоль выдает ошибку без назавния компа на котором споткнулся. Хочется чтобы в Report-2003.txt писалось имя компа на котором споткнулся скрипт. Что то типа (server1 - connect fail)

Всего записей: 374 | Зарегистр. 16-08-2005 | Отправлено: 14:17 18-10-2011 | Исправлено: DiZka, 14:28 18-10-2011
DiZka



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

Код:
get-Content -Path "C:\s\txt\2003.txt" | Foreach {
    $data = get-wmiobject win32_TimeZone -computername $_ -ErrorAction SilentlyContinue
    if ($data) { "{0} - {1}" -f $data.__Server,$data.Caption}
    else { "$_ - connection fail"}
}  
| Out-File "C:\s\txt\Report-2003.txt"

Всего записей: 374 | Зарегистр. 16-08-2005 | Отправлено: 09:19 19-10-2011
vertigoavi

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

Код:
@echo off  
 for /R  %1 %%I in (*.png) do (  
  if not exist "E:%%~pnxI" (  
       2>nul mkdir "E:%%~pI"  
       convert "%%~I" -background black -channel A -combine "E:%%~pnxI"  
   )  
 )

на PowerShell

Всего записей: 182 | Зарегистр. 16-07-2006 | Отправлено: 11:34 02-11-2011
dvasilev

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Помогите разобраться, пожалуйста:
Имею домен на 2003 контроллере. Раскатал на серваки и рабочие станции Powershell 2.0, создал скрипт под свои задачи, но вот проблема:
Скрипт работает из Powershell ISE и если в cmd написать powershell, тем самым войдя в интерпретатор и запустить файл PS1. Если же в планировщик поместить команду - powershell "d:\script.ps1", то срабатывает он не целиком, а имено не отрабатывают строчки:
 $smtp = New-Object net.mail.smtpclient($SmtpServer)
 $smtp.Send($EmailFrom, $EmailTo, $Subject, $Body)
На недоменных компьютерах все работает отлично, после ввода их в домен - такая же ерунда.
Execution-policy - remotesigned

Всего записей: 14 | Зарегистр. 02-06-2009 | Отправлено: 12:22 14-11-2011 | Исправлено: dvasilev, 12:24 14-11-2011
vasili777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Немного поправил шапку.
 
 
Было:
 
 Оболочки для работы с PowerShell 1.0  
 *PowerShell Analyzer (релиз, платный)  
 *PowerShell Analyzer (Последный RC, бесплатный)  
 *PowerShellIDE для PowerShell (не развивается)  
 *PowerGUI Build 2.3.0.1503
 
Стало:
 
Оболочки для работы с PowerShell  
 *PowerShell Analyzer (бесплатный)  
 *PowerShellIDE для PowerShell (не развивается, бесплатный) Заметка: в их новом продукте планируется поддержка PowerShell)  
 *PowerGUI (бесплатный)
 
 
Старая версия шапки: http://pastebin.com/3y5ff9G9

Всего записей: 620 | Зарегистр. 03-12-2004 | Отправлено: 15:46 06-12-2011 | Исправлено: vasili777, 15:47 06-12-2011
KapralBel



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vasili777
Включи, плиз еще это
http://www.powershellinside.com/powershell/asp/download.aspx?utm_source=PowerShellInside&utm_campaign=57e7d047ce-PowerShell_ASP_V3_Released&utm_medium=email
 

Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 15:51 06-12-2011
vasili777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KapralBel
 
Добавил в раздел "Расширение возможностей PowerShell" в новом подразделе "Программы для расширения возможностей PowerShell". Проверьте пожалуйста правильно ли выбрано место расположения в шапке и описание.

Всего записей: 620 | Зарегистр. 03-12-2004 | Отправлено: 16:29 06-12-2011
   

Страницы: 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.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru