Каков правильный способ создания/очистки/инициализации объекта внутри цикла for с помощью следующего метода/синтаксиса? С помощью этого метода увеличивается производительность.Правильный способ создания pscustomobject для добавления в массив
$objComputer = [pscustomobject] @{}
Я заметил, если одна из систем не существует в AD и возвращает ошибку или обнулить информацию от предыдущего ввода/объекта используется в массиве. Например, компьютер-03 действителен, но BLAH (который не является) извлекает из предыдущей записи Computer-03.
function Get-ADComputers ($NameList) {
$arrayComputer = @();
foreach ($line in $NameList.Split("`r`n") | ? { $_ }) {
$PCName = $line.Trim()
$Computer = (Get-ADComputer -Identity $PCName -Properties *)
$objComputer = [pscustomobject] @{
Computer = $PCName
Active = $Computer.Enabled
Date = $Computer.PasswordLastSet
DaysOld = (Get-DaysOld $Computer.PasswordLastSet)
OU = $Computer.DistinguishedName
}
write-host $objComputer
$arrayComputer += $objComputer
$objComputer = $null;
} return $arrayComputer
}
РЕЗУЛЬТАТЫ
Computer Active Date DaysOld
Computer-01 TRUE 4/12/2015 8:16 -29
Computer-02 TRUE 5/4/2015 7:11 -7
Computer-03 TRUE 4/20/2015 9:01 -21
BLAH TRUE 4/20/2015 9:01 -21
Computer-03 TRUE 4/6/2015 8:14 -35
Computer-04 TRUE 5/9/2015 17:17 -1
Computer-05 TRUE 4/17/2015 12:04 -24
Спасибо за вашу помощь! :)
EDIT ПРИМЕР С TRY CATCH:
function Get-ADComputers ($NameList) {
$arrayComputer = @();
foreach ($line in $NameList.Split("`r`n") | ? { $_ }) {
$Computer = $null
$PCName = $line.Trim()
try {
$Computer = (Get-ADComputer -Identity $PCName -Properties *)
$objComputer = [pscustomobject] @{
Computer = $PCName
Active = $Computer.Enabled
Date = $Computer.PasswordLastSet
DaysOld = (Get-DaysOld $Computer.PasswordLastSet)
OU = $Computer.DistinguishedName
}
} catch {
$objComputer = [pscustomobject] @{
Computer = "$PCName"
Active = "Missing"
Date = "N/A"
DaysOld = "N/A"
OU = "N/A"
}
}
write-host $objComputer
$arrayComputer += $objComputer
$objComputer = $null;
} return $arrayComputer
}
Я думаю, что ваше предложение блока Try/Catch - отличное предложение для решения их проблемы. Хотелось бы вам привести пример того, как они могли бы это использовать. – TheMadTechnician
Обратите внимание, что для try/catch для работы вам необходимо сделать ошибку [завершающей ошибкой] (http://blogs.msdn.com/b/powershell/archive/2006/04/25/583241.aspx) ('- ErrorAction Stop' или '$ ErrorActionPreference = 'Stop''). Использование '-ErrorAction SilentlyContinue' имеет смысл только в том случае, если вы хотите скрыть сообщение об ошибке (non-terminating) и продолжить независимо. –
@ TheMadTechnician Я добавил пример try catch ... –