Компьютер Описание Запрос - PullRequest
0 голосов
/ 15 ноября 2018

Хорошо, я застрял в синтаксисе.Цифры.Если кто-то может помочь мне с другой хорошей парой глаз, я был бы признателен.Ниже приведен мой скрипт, а ниже - тот, который возвращает искомое значение.Скрипт ничего не возвращает, хотя.

Скрипт

$BBUIDS = Get-Content 'C:\working\ad\Userstest.txt'

ForEach ($Name in $BBUIDS)
{
Get-ADComputer -Filter 'Description -like $("$Name")' -Properties *  -SearchBase "OU=Win10,OU=Laptops,OU=Computers,OU=MYDOMAIN" | Select-Object CN
}

Работа на вкладыше

Get-ADComputer -Filter 'Description -like "USERNAMEHERE"' -Properties * -SearchBase "OU=Win10,OU=Laptops,OU=Computers,OU=MYDOMAIN" | Select-Object CN

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

PowerShell будет расширять переменные внутри кавычек, только если вы используете двойные кавычки.Это описано в документации о правилах цитирования :

Когда вы заключаете строку в двойные кавычки (строка в двойных кавычках), имена переменныхкоторым предшествует знак доллара ($), заменяются значением переменной

Вы можете проверить это в командной строке PowerShell:

$Name = "username"
'This is wrong: $Name'
"This is right: $Name"

Вывод будет:

This is wrong: $Name
This is right: username

Вы заметите, что PowerShell даже выделяет $Name при использовании двойных кавычек, но не при использовании одинарных кавычек.

Так что в вашем случае вам нужно что-то вроде этого:

Get-ADComputer -Filter "Description -like '$Name'" -Properties *  -SearchBase "OU=Win10,OU=Laptops,OU=Computers,OU=MYDOMAIN" | Select-Object C

Одиночные кавычки внутри двойных кавычек в порядке.Вам просто нужно, чтобы внешние кавычки были двойными.

Или

Get-ADComputer -Filter {Description -like "$Name"} -Properties * -SearchBase "OU=Win10,OU=Laptops,OU=Computers,MYDOMAIN" | Select-Object CN

Кроме того, я заметил, что вы используете -like, но вы не используете подстановочные знаки (*).Так что Description точно соответствует имени пользователя?Если это так, вы можете получить чуть лучшую производительность, используя -eq вместо -like.

Если он не совсем совпадает, то вы должны использовать "*$Name*".

0 голосов
/ 15 ноября 2018

вы можете использовать любой из них, хотя первый более эффективен

Get-ADComputer -Filter {Description -like "*$Name*"} -Properties *  -SearchBase "OU=Win10,OU=Laptops,OU=Computers,OU=MYDOMAIN" | Select-Object CN

или

Get-ADComputer -Filter * -Properties *  -SearchBase "OU=Win10,OU=Laptops,OU=Computers,OU=MYDOMAIN" |where-object {$_.Description -like "*$Name*"} | Select-Object CN
0 голосов
/ 15 ноября 2018

Изменение:

Get-ADComputer -Filter 'Description -like $("$Name")' ...

на:

$Name = "*$Name*"
Get-ADComputer -Filter {Description -like $Name} ...

редактирование на основе комментариев

$BBUIDS = Get-Content 'C:\working\ad\Userstest.txt'
ForEach ($Name in $BBUIDS) { 

    $Name = "*$Name*" 
    Get-ADComputer -Filter {Description -like $Name} -Properties * -SearchBase "OU=Win10,OU=Laptops,OU=Computers,MYDOMAIN" | Select-Object CN 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...