351 / 270 / 67
Регистрация: 12.12.2012
Сообщений: 2,131

Начало с PowerShell

02.10.2018, 13:00. Показов 15602. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Поздравьте меня. Я сам, вручную, написал свой первый работающий сценарий

Позвольте задавать вопросы.

1. Синтаксис. Так работает:

PowerShell
1
2
3
$Files = Get-ChildItem -Path C:\
 
 FOREACH ($File In $Files) { $File.FullName }
А так уже нет:
PowerShell
1
2
3
4
5
6
$Files = Get-ChildItem -Path C:\
 
 FOREACH ($File In $Files) 
 { 
    $File.FullName 
 }
PowerShell
1
2
3
4
5
6
7
PS C:\Windows\System32\WindowsPowerShell\v1.0>  }
строка:1 знак:2
+  }
+  ~
Непредвиденная лексема "}" в выражении или операторе.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken
И так то же:
PowerShell
1
2
3
4
5
$Files = Get-ChildItem -Path C:\
 
 FOREACH ($File In $Files) { 
    $File.FullName 
 }
PowerShell
1
2
3
4
PS C:\Windows\System32\WindowsPowerShell\v1.0>     $File.FullName 
C:\Windows10Upgrade
 
PS C:\Windows\System32\WindowsPowerShell\v1.0>
Выдало значение только из предпоследней ячейки..

Я могу только в строчку писать сценарии ? Во всех книжках С\С++ это считается плохим тоном и советуют к конструкции:

C++
1
2
3
{
      \\code
}
Тут же я не могу его использовать ?
Миниатюры
Начало с PowerShell  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.10.2018, 13:00
Ответы с готовыми решениями:

PowerShell Начало
Добрый день уважаемые форумчане. Недавно задался целью изучить PowerShell для написания скриптов с целью автоматизировать свои рабочие...

PowerShell vs PowerShell ISE
Скажите, пожалуйста, чем PowerShell отличается от PowerShell ISE. Спасибо.

Выписать в массив A с начало положительные числа X, а в начало второго массива B отрицательные числа X.
Из одномерного массива X(8) получить два других массива A(8) и B(8). Выписать в массив A с начало положительные числа X, затем...

32
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
08.10.2018, 12:01
Лучший ответ Сообщение было отмечено pEntity как решение

Решение

Студворк — интернет-сервис помощи студентам
Цитата Сообщение от pEntity Посмотреть сообщение
эти ПК, деактивировать и переместить в Клиентские ПК/!Отключенные
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
$OUs = "OU=ЭНТХ,OU=Клиентские ПК,DC=ekoniva,DC=com","OU=ЭНТ,OU=Клиентские ПК,DC=ekoniva,DC=com"
$xOU = "OU=!Отключенные,OU=Клиентские ПК,DC=ekoniva,DC=com"
$OutFile = 'c:\data\report.csv'
$Months = -5
 
$computers = $OUs | %{Get-ADComputer -SearchBase $_ -Filter * -prop CanonicalName,LastLogonDate | ?{$_.LastLogonDate -le (Date).AddMonths($Months)}}
$computers | select name,CanonicalName,LastLogonDate | Export-Csv $OutFile -NoType -Delimiter ';' -enc UTF8
 
foreach ($PC in $computers)
{
    Disable-ADAccount -Identity $PC.DistinguishedName -Confirm:$false
    Move-ADObject -Identity $PC.DistinguishedName -TargetPath $xOU -Confirm:$false
}
1
351 / 270 / 67
Регистрация: 12.12.2012
Сообщений: 2,131
08.10.2018, 13:40  [ТС]
Всё работает отлично. Дай Бог Вам денег, любви, здоровья ))
0
351 / 270 / 67
Регистрация: 12.12.2012
Сообщений: 2,131
09.10.2018, 14:52  [ТС]
KDE777, можно Вас попросить отредактировать скрипт ?

PowerShell
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
$time =  (get-date) - (new-timespan -min 124)
 
 
#$Events - содержит время и порядковый номер записи евента с ID=4660. И сортируем по порядковому номеру.
 
 
#!!!!Это важное замечание!!! При удалении файла создается сразу 2 записи, с ID=4660 и ID=4663.
 
 
$Events = Get-WinEvent -FilterHashtable @{LogName="Security";ID=4660;StartTime=$time} | Select TimeCreated,@{n="Запись";e={([xml]$_.ToXml()).Event.System.EventRecordID}} |sort Запись
 
 
#Самые важные команды поиска. Опишу принцип ниже, после листинга скрипта.
 
 
$BodyL = ""
 
 
$TimeSpan = new-TimeSpan -sec 1
 
 
foreach($event in $events){
 
 
 $PrevEvent = $Event.Запись
 
 
 $PrevEvent = $PrevEvent - 1
 
 
 $TimeEvent = $Event.TimeCreated
 
 
 $TimeEventEnd = $TimeEvent+$TimeSpan
 
 
 $TimeEventStart = $TimeEvent- (new-timespan -sec 1)
 
 
 $Body = Get-WinEvent -FilterHashtable @{LogName="Security";ID=4663;StartTime=$TimeEventStart;EndTime=$TimeEventEnd} |where {([xml]$_.ToXml()).Event.System.EventRecordID -match "$PrevEvent"}|where{ ([xml]$_.ToXml()).Event.EventData.Data |where {$_.name -eq "ObjectName"}|where {($_.'#text') -notmatch ".*tmp"} |where {($_.'#text') -notmatch ".*~lock*"}|where {($_.'#text') -notmatch ".*~$*"}} |select TimeCreated, @{n="Файл_";e={([xml]$_.ToXml()).Event.EventData.Data | ? {$_.Name -eq "ObjectName"} | %{$_.'#text'}}},@{n="Пользователь_";e={([xml]$_.ToXml()).Event.EventData.Data | ? {$_.Name -eq "SubjectUserName"} | %{$_.'#text'}}} 
 
 
 if ($Body -match ".*Shared*"){
 
 
  $BodyL=$BodyL+$Body.TimeCreated+"`t"+$Body.Файл_+"`t"+$Body.Пользователь_+"`n"
 
 
 }
 
}
 
 
$Month = $Time.Month
 
 
$Year = $Time.Year
 
 
$name = "DeletedFiles-"+$Month+"-"+$Year+".txt"
 
 
$Outfile = "\serverServerLogFilesDeletedFilesLog"+$name
 
 
$BodyL | out-file $Outfile -append
Сейчас он в txt выводит так: (Прикрепил изображение )

А можно в csv, чтоб в excele потом была табличка:

Человек / Дата Время / Путь файла
Миниатюры
Начало с PowerShell  
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
09.10.2018, 15:41
Цитата Сообщение от pEntity Посмотреть сообщение
отредактировать скрипт ?
Я не модератор, но думаю, что постоянно задавать не связанные между собой вопросы в одной и той же теме, не лучшая идея. Поэтому, создавайте отдельную тему (с корректным названием).
1
351 / 270 / 67
Регистрация: 12.12.2012
Сообщений: 2,131
19.12.2018, 15:30  [ТС]
KDE777, здравствуйте. Можно Вас попросить отредактировать код в 15 сообщении ?

Мне теперь нужно узнать кто из пользователей был неактивен 5 месяцев. + Записать их последнюю дату логона.
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
19.12.2018, 15:48
Цитата Сообщение от pEntity Посмотреть сообщение
Можно Вас попросить отредактировать код в 15 сообщении ?
Мне теперь нужно узнать кто из пользователей был неактивен 5 месяцев. + Записать их последнюю дату логона.
Вы не поверите, но для этого достаточно заменить Get-ADComputer на Get-ADUser

Добавлено через 4 минуты
И ещё этот скрипт выберет и пользователей, у которых вообще нет LastLogonDate, т.е. УЗ создана, но ни разу не логинилась. Или таких выбирать не нужно?
1
351 / 270 / 67
Регистрация: 12.12.2012
Сообщений: 2,131
19.12.2018, 15:53  [ТС]
KDE777, Вы не поверите, но я только что сам допер до этого. Прям вырос в своих глазах :-p

Ну а как найти юзеров, у которых даты нет, я конечно не знаю ))))

PowerShell
1
2
3
4
5
6
$OUs = 'OU=Пользователи,DC=Ekoniva,DC=com'
$OutFile = 'c:\data\report.csv'
$Months = -4
 
$OUs | %{ Get-ADUser -SearchBase $_ -Filter * -prop LastLogonDate,CanonicalName | ?{$_.LastLogonDate -le (Get-Date).AddMonths($Months)}
} | select name,CanonicalName,LastLogonDate | Export-Csv $OutFile -NoType -Delimiter ';' -enc UTF8
Добавлено через 2 минуты
Чекашкин Сергей ekoniva.com/Пользователи/НиваСтрой/Департамент по строительству/Чекашкин Сергей

А как может быть, что у него нет даты ?
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
19.12.2018, 16:01
Цитата Сообщение от pEntity Посмотреть сообщение
А как может быть, что у него нет даты ?
Перечитать мой предыдущий ответ:

Цитата Сообщение от KDE777 Посмотреть сообщение
УЗ создана, но ни разу не логинилась.
Добавлено через 1 минуту
Цитата Сообщение от pEntity Посмотреть сообщение
Ну а как найти юзеров, у которых даты нет, я конечно не знаю
PowerShell
1
$OUs | %{ Get-ADUser -SearchBase $_ -Filter * -prop LastLogonDate,CanonicalName | ?{!$_.LastLogonDate}} | select name,CanonicalName,LastLogonDate
Добавлено через 1 минуту
А так, мы исключим эти УЗ из отчёта:

PowerShell
1
2
$OUs | %{ Get-ADUser -SearchBase $_ -Filter * -prop LastLogonDate,CanonicalName | ?{$_.LastLogonDate -and $_.LastLogonDate -le (Get-Date).AddMonths($Months)}
} | select name,CanonicalName,LastLogonDate | Export-Csv $OutFile -NoType -Delimiter ';' -enc UTF8
1
351 / 270 / 67
Регистрация: 12.12.2012
Сообщений: 2,131
19.12.2018, 16:23  [ТС]
Сложна) Благодарю! Я бы еще хотел спросить, как исключить контейнер - Компьютеры - отключенные

Но мне кажется проще в csv руками удалить )
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
19.12.2018, 16:31
Цитата Сообщение от pEntity Посмотреть сообщение
Я бы еще хотел спросить, как исключить контейнер - Компьютеры - отключенные
Так в скрипте нужные OU перечисляются через запятую. Или у вас OU "Компьютеры", находится где-то в глубине OU "Пользователи"?

Добавлено через 3 минуты
тогда можно так:

PowerShell
1
2
$OUs | %{ Get-ADUser -SearchBase $_ -Filter * -prop LastLogonDate,CanonicalName | ?{$_.LastLogonDate -and $_.CanonicalName -notmatch '/Компьютеры' -and $_.LastLogonDate -le (Get-Date).AddMonths($Months)}
} | select name,CanonicalName,LastLogonDate | Export-Csv $OutFile -NoType -Delimiter ';' -enc UTF8
0
351 / 270 / 67
Регистрация: 12.12.2012
Сообщений: 2,131
19.12.2018, 16:31  [ТС]
OU то много. Все моих OU в ново созданном подраздении "Компьютеры", а там еще куча всяких. И вот там так же лежит "отключенные."

Вместо того, чтоб всю кучу перечислять в Компьютерах, легче же исключить "отключенные" ?


А, вы меня чуть не так поняли, я криво написал. Компьютеры не надо исключить, только "отключенные" лежащий в "компьютеры"
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
20.12.2018, 11:44
Цитата Сообщение от pEntity Посмотреть сообщение
Компьютеры не надо исключить, только "отключенные" лежащий в "компьютеры"
Я вам пример того, как можно что-то исключить показал, а дальше неужели сложно поменять слово "компьютеры" на "отключенные"?
1
351 / 270 / 67
Регистрация: 12.12.2012
Сообщений: 2,131
20.12.2018, 16:06  [ТС]
Не, это понятно ) Я писал свое сообщение, до того как его увидел.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.12.2018, 16:06
Помогаю со студенческими работами здесь

Все положительные элементы массива поместить в начало массива B, а отрицательные — в начало C
помогите не как не могу понять как записать код для задачи (Дан числовой массив A размера N. Все его положительные элементы поместить в...

Все положительные его элементы поместить в начало массива B (n), а все отрицательные - в начало массива C (n)
Данный массив A (n). Все положительные его элементы поместить в начало массива B (n), а все отрицательные - в начало массива C (n)....

65. (7 б.) Дан массив A(n). Все положительные его элементы поместить в начало массива B(n), а отрицательные элементы – в начало массива C(n). Подсчита
65. (7 б.) Дан массив A(n). Все положительные его элементы поместить в начало массива B(n), а отрицательные элементы – в начало массива...

Переход начало и конец вывода строк:каким образом переходить по экрану на начало и конец списка строк?
Разработать процедуры "TOP" установки окна на начало файла и процедуры “BOT” установки на конец файла для заданного текстового файла....

PowerShell
Надо привести пример использования командлета Disable-WSManCredSSP в PowerShell. Ввожу команду Disable-WSManCredSSP -Role Client и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Опции темы

Новые блоги и статьи
[golang] Двоичная куча, min-heap
alhaos 20.05.2026
Двоичная куча Двоичная куча — структура данных, которая всегда держит самый важный элемент наготове. Представьте очередь к хилеру в игре, и очередь из игроков в приоритете те у кого меньше. . .
[golang] Breadth-First Search
alhaos 19.05.2026
BFS (Breadth-First Search) — это базовый алгоритм обхода графа в ширину, который поуровнево исследует все связанные вершины. Он начинает с выбранной точки и проверяет всех соседей, прежде чем. . .
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера» Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит. Придуман Биллом Госпером в 1970-х, опубликован в. . .
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb"> <style> <!]> </ style> <g id="bush"> </ g> </ svg> function fn(){ let rost;/ / высота древа let xx=165,yy=210,w=256;
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru