Get-ADUser no loop foreach não retorna nada se estiver usando o objeto

1
$users = Get-Content "C:\PowerShellScript\CSV\swyxusers.csv"


$test = Foreach ($user in $users){
Get-ADUser -Filter {Name -like "*$user*" } | Select-Object SamAccountName, Enabled
} 

$test| export-csv -Force -Append "C:\PowerShellScript\CSV\skit.csv"

A execução acima não resulta em nada exportado para o CSV, mas se eu adicionar Write-Host "$User" , ele exportará a lista de usuários. Então, sei que o recurso de exportação funciona.

Se eu executar assim:

$users = Get-Content "C:\PowerShellScript\CSV\swyxusers.csv"


$test = Foreach ($user in $users){
Get-ADUser -Filter {Name -like "*User 1*" } | Select-Object SamAccountName, Enabled
} 

$test| export-csv -Force -Append "C:\PowerShellScript\CSV\skit.csv"

Ele preenche meu CSV com o resultado de "Usuário 1" (o primeiro usuário no documento e este é o resultado com exceção) pelo número de vezes que há linhas na variável $ user. Então, sei que meu método de pesquisa funciona.

Então, minha pergunta / problema é como obtê-lo para percorrer o meu arquivo CSV e realmente encontrar algo ao pesquisar usando um objeto? Desde que funciona quando eu uso uma string inserida manualmente, mas não quando uso objeto.

O CSV é formatado da seguinte maneira:

USER 1
USER 2
USER 3
USER 4 

Editar: Problema não está relacionado ao loop foreach, se eu executar o seguinte:

$test = "TEST USER"
Get-ADUser -Filter {Name -eq "*$test*"}

ainda não funciona, tem que ser algo com a forma como a filtragem é feita.

    
por Jakodns 08.08.2016 / 12:38

3 respostas

2

Normalmente, ao criar um filtro de pesquisa como uma combinação de várias cadeias, evito fazê-lo na própria entrada. Então, por exemplo (e como você encontrou) em vez de fazer o seguinte

Get-ADUser -Filter {Name -like "*$user*"}

Eu tento criar um filtro e depois chamar a função

$filter = "*" + $user + "*"
Get-ADUser -Filter {Name -like $filter}

Descobri que esta é a única maneira de criar com êxito um filtro LDAP como uma combinação de várias cadeias de caracteres. Isso também permite que você verifique seu filtro antes de executar a consulta.

    
por 08.08.2016 / 19:21
2

Por meu comentário abaixo Eric Schnabel, você não deve colocar a variável "$" dentro de uma cotação no filtro Seu script de atualização deve incorporar o curinga com a variável, para que o filtro funcione

$users = Get-Content "C:\PowerShellScript\CSV\swyxusers.csv"

$test = Foreach ($user in $users){
    $user = "*" + $user + "*"
    Get-ADUser -Filter {Name -like $user } | Select-Object SamAccountName, Enabled} 

$test| export-csv -Force -Append "C:\PowerShellScript\CSV\skit.csv"
    
por 08.08.2016 / 22:21
0

Então, como afirmei no meu Edit, tinha a ver com a filtragem. Eu realmente me sinto muito idiota agora que encontrei a solução.

Isso não funciona:

Get-ADUser -Filter {Name -like "*$user*" }

Isso não funcionará:

Get-ADUser -Filter {Name -like "$user" }

Mas isso funciona:

Get-ADUser -Filter {Name -like $user}

Se você tem "ou * ele vai quebrar e apenas nu funcionar sem uma mensagem de erro.

Encontrou a solução aqui: link

    
por 08.08.2016 / 14:12