Некоторые компьютеры в сценарии GPO powershell не распознают параметр

Я столкнулся с проблемой, когда около 10% компьютеров в моей сети выдают очень странные ошибки при обработке. Я получаю сообщение об ошибке: «Где-объект: невозможно найти параметр, который соответствует имени параметра« Свойство »», код, который я использую, выглядит следующим образом.

#Create ADSI Search object to query Active Directory for usernames
#Start-Transcript -Path "$env:userprofile\Desktop\log.txt"
$strFilter = "objectCategory=user"
$objDomain = New-Object System.DirectoryServices.DirectoryEntry("LDAP://OU=SD25;DC=DC;DC=DC")
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.PageSize = 100000
$objSearcher.Filter = $strFilter
$objSearcher.SearchScope = "Subtree"

#Populate ADSI with the extra fields of samaccountname which is the username, and memberof which gives you roughly which groups they are a memberof
$colProplist = "samaccountname", "memberof"
foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)}

#Run the Search
$colResults = $objSearcher.FindAll()
#$colResults
$resultsarray = @() 

#The way ADSI returns results, it populates all an array of every username listed within the scope, I then use this foreach recursive loop to find the name I need
foreach ($objResult in $colResults)
    {
        #Here I am taking each of the users, and finding the one which has the samaccountname of the user that is currently logged in 
    $objItem = $objResult.Properties | Where-Object -Property memberof -like ALL
    #$groups = $objItem.memberof
    #This is for diagnostics, if you output a logfile it will tell you the name and groups it is a member of
    $objitem



}

#This is the beginnings of searching for a computer container in active    directory.
$compFilter = "objectCategory=computer"
$compDomain = New-Object System.DirectoryServices.DirectoryEntry("LDAP://OU=OU;DC=DC;DC=DC")
$compSearcher = New-Object System.DirectoryServices.DirectorySearcher
$compSearcher.SearchRoot = $objDomain
$compSearcher.PageSize = 100000
$compSearcher.Filter = $strFilter
$compSearcher.SearchScope = "Subtree"

$compProplist = "name" 
foreach ($i in $compPropList){$compSearcher.PropertiesToLoad.Add($i)}

$compResults = $compSearcher.FindAll()

foreach ($compR in $compResults)
    {

    }
#Stop-Transcript

person user3312045    schedule 29.07.2015    source источник
comment
Дикое предположение: на хостах, выдающих ошибку, у вас есть пользовательская функция Where-Object, которая заменяет встроенный командлет? Что выдает Get-Help Where-Object на этих хостах?   -  person Ansgar Wiechers    schedule 29.07.2015
comment
Это нормальный вывод, что это фильтр. и дело в том, что на этих компьютерах никто никогда даже не открывал powershell или powershell ISE.   -  person user3312045    schedule 29.07.2015
comment
Для информации: максимальный размер страницы для AD равен 1000. Нет смысла устанавливать его выше.   -  person user2871239    schedule 30.07.2015
comment
Я не знаком со сценариями GPO. Этот скрипт работает на каждом ящике? Эта строка предполагает, что вы пытаетесь найти samAccountName вошедшего в систему пользователя: здесь я беру каждого из пользователей и нахожу того, у которого есть samaccountname пользователя, который в данный момент вошел в систему. Если да, то есть лучшие способы.   -  person user2871239    schedule 30.07.2015
comment
Этот скрипт работает на каждом ящике. Да, есть лучшие способы, если бы я установил rsat и сделал диск AD и командлеты доступными для каждого человека в моей сети..., но поскольку по крайней мере 4000 моих пользователей - дети, я немного ненавижу это делать. . Что касается размера страницы, мой палец, вероятно, слишком много раз сталкивался с нулем, пока я кодировал ее.   -  person user3312045    schedule 03.08.2015


Ответы (1)


IIRC -Property был представлен Where-Object с PowerShell 3.0. Может ли ваш скрипт работать на PowerShell 2.0?

Ответ на комментарий

Вам нужно создать сценарий фильтра в форме scriptblock (т. е. код PowerShell в наборе фигурных скобок) вместо использования параметров оператора сравнения, которые они добавили для 3.0.

Попробуйте использовать

Where-Object { $_.memberof -like "ALL" }

или что-то вроде того. $_ относится к текущему объекту в конвейере. Мне не удалось найти документы для версии 2.0, но я нашел Использование командлета Where-Object для версии 1.0, которая была актуальна для версии 2.0, насколько мне известно, и должна вам помочь.

person user2871239    schedule 30.07.2015
comment
вы правы, они используют Powershell v 2.0, но мне действительно нужен этот параметр, есть ли способ смоделировать его в 2.0? - person user3312045; 03.08.2015