Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Проблема с двойным Foreach

Ответить
Настройки темы
PowerShell - [решено] Проблема с двойным Foreach

Аватара для ivan.vas

Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всем привет!
Помогите понять логику Foreach... Не могу понять почему скрипт который выглядит вот так:
Код: Выделить весь код
$Time = (Get-Date) - (New-TimeSpan -Hours 24)
$events = @()
$events += Get-WinEvent -FilterHashtable @{Logname = "Security" ; ID = 4800,4801; StartTime = $Time}
$events += Get-WinEvent -FilterHashtable @{Logname = "System" ; ID = 7001,7002; StartTime = $Time}
$Date = Get-Date -format yyyy-MM-dd
$ArrayList = New-Object System.Collections.ArrayList
	Foreach ($Event in $Events)
	{
	[xml]$Xml = $Event.ToXml()
	$Row = "" | Select Username,TimeCreated,Operation
	$Row.Username = $EventProperties[1].value
	$Row.TimeCreated = $Event.TimeCreated.ToString()
	$Row.Operation = $Event.ID
	[void]$ArrayList.Add($Row)
	}
$ArrayList | Sort TimeCreated
работает исправно, но когда я хочу сделать выборку из файла где содержатся имена компьютеров, то получается не пойми что...

Код: Выделить весь код
$Time = (Get-Date) - (New-TimeSpan -Hours 24)
$Servers = Get-Content "C:\temp\Comp.txt"
Foreach ($Server in $Servers)
{
	if(Test-Connection $Server -Count 2 -Quiet ) {
	$events = @()
	$events += Get-WinEvent -ComputerName $Server -FilterHashtable @{Logname = "Security" ; ID = 4800,4801; StartTime = $Time}
	$events += Get-WinEvent -ComputerName $Server -FilterHashtable @{Logname = "System" ; ID = 7001,7002; StartTime = $Time}
	$Date = Get-Date -format yyyy-MM-dd
	$ArrayList = New-Object System.Collections.ArrayList
	
	Foreach ($Event in $Events)
	{
	[xml]$Xml = $Event.ToXml()
	$Row = "" | Select Username,TimeCreated,Operation
	$Row.Username = $EventProperties[1].value
	$Row.TimeCreated = $Event.TimeCreated.ToString()
	$Row.Operation = $Event.ID
	[void]$ArrayList.Add($Row)
	}
	}
	else {}
}
$ArrayList | Sort TimeCreated
Хочу к варианту который исправно работает (1 листинг) добавить возможность выборки имен компьютеров из файла txt.

Отправлено: 15:57, 15-09-2021

 

Аватара для ivan.vas

Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
А откуда у Вас берётся $EventProperties[1]? »
Из события "дергается".

Отправлено: 17:21, 16-09-2021 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


ivan.vas, так «не дёргается». Именно «$EventProperties» — вообще ниоткуда.

Отправлено: 21:44, 16-09-2021 | #12


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6626
Благодарности: 1528

Профиль | Отправить PM | Цитировать


Да просто точка пропущена.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 09:06, 17-09-2021 | #13


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
Да просто точка пропущена. »
Я про это автору и написал выше:
Цитата Iska:
Может быть, $Event.Properties[1].value? »
Отсутствие требования явного описания переменых — зло.

Отправлено: 09:27, 17-09-2021 | #14


Аватара для ivan.vas

Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


DJ Mogarych, Iska, вы правы, скрипт работал. Но потом вспомнив, почти тоже самое
Цитата Iska:
Отсутствие требования явного описания переменых — зло. »
решил написать с заглавной буквы, это и была ошибка.
Правильно вот так выглядит:
Код: Выделить весь код
[xml]$Xml = $Event.ToXml()
$Row = "" | Select Username,TimeCreated,Operation
$Row.Username = $eventProperties[1].value
Помогла вот эта картинка:

Отправлено: 16:41, 17-09-2021 | #15


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


ivan.vas, да без разницы, с заглавной или со строчной, PowerShell не различает регистр символов в переменной. Вы скорее всего пропустили точку, т.е. переменная зовётся не «$EventProperties», а «$Event», а «Properties» — её свойство/метод.

Отправлено: 21:04, 17-09-2021 | #16


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6626
Благодарности: 1528

Профиль | Отправить PM | Цитировать


Так и есть, и я в своём сообщении №6 выше в коде эту ошибку учёл.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 08:35, 18-09-2021 | #17


Аватара для ivan.vas

Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, вы правы. Спасибо.

Отправлено: 12:17, 20-09-2021 | #18



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Проблема с двойным Foreach

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - Как добавить исключение в foreach Nightwolf_82 Скриптовые языки администрирования Windows 3 02-01-2018 06:21
PowerShell - ForEach и ForEach-Object начать с конца (наоборот)... Buddha.g Скриптовые языки администрирования Windows 2 12-10-2016 03:10
Разное - [решено] Проблема с двойным кликом мыши kirillius Microsoft Windows 7 3 07-05-2016 11:59
PowerShell - Обработка коллекции через foreach () rudimko Скриптовые языки администрирования Windows 12 25-06-2013 21:51
.NET - Перекрытие области видимости в цикле foreach Delirium Программирование и базы данных 2 18-09-2010 02:06




 
Переход