Powershell哪里慢有更快的方法来搜索对象?
Powershell where slow is there a faster way to search object?
我有以下代码:
$HardCatUsers = Import-Csv z:\Scripts\Powershell\Hardcat_People_Export.csv
$ADUsers = Get-ADUser -Filter {enabled -eq $true -and surname -like "*" -and GivenName -like "*" -and Name -notlike "AD*" -and Name -notlike "LRTM*"} -SearchBase "ou=Production, dc=diti, dc=lr, dc=net" | Sort-Object Surname
foreach ($ADUser in $ADUsers)
{
if ($ADUser.Name.length -le 8)
{
$ADSearch = "$($ADUser.Surname), $($ADUser.GivenName) - $($ADUser.Name.ToUpper())"
if ($Code = $HardCatUsers | Where {$_.Description -eq $ADSearch})
{
#"$($ADSearch) $($Code)"
} else {
"$($ADSearch) NEW"
}
}
}
$hardCatUsers 对象只是两列数据,例如:
Description Code
----------- ----
# No Assigned User - ACTIVE # ASSET MANAGEMENT
# No Assigned User - SPARE # NO USER SPARE
我正在做的是拉回过滤后的 AD 用户列表并格式化三个属性,然后在 $hardcatusers 中比较/查找此字符串,如果没有找到则输出字符串。
但是当前的实现在每次查找时似乎非常慢,即 5 秒。有没有更优雅的方法来搜索匹配列表?
谢谢
我发现使用 $hardcatusers 的 foreach 循环比 where
快得多
即:
foreach ($ADUser in $ADUsers)
{
if ($ADUser.Name.length -le 8)
{
$found = $false
$ADSearch = "$($ADUser.DisplayName) - $($ADUser.Name.ToUpper())"
foreach ($HardcatUser in $HardCatUsers)
{
if ($HardcatUser.Description -eq $ADSearch)
{
$found = $true
}
}
if ($found -ne $true)
{
$Results = New-Object PSObject -Property (@{
Description = $ADSearch
Code = "PE" + $NextCode.ToString("000000")
})
$Result += $Results
$NextCode = $NextCode + 1
}
}
}
我有以下代码:
$HardCatUsers = Import-Csv z:\Scripts\Powershell\Hardcat_People_Export.csv
$ADUsers = Get-ADUser -Filter {enabled -eq $true -and surname -like "*" -and GivenName -like "*" -and Name -notlike "AD*" -and Name -notlike "LRTM*"} -SearchBase "ou=Production, dc=diti, dc=lr, dc=net" | Sort-Object Surname
foreach ($ADUser in $ADUsers)
{
if ($ADUser.Name.length -le 8)
{
$ADSearch = "$($ADUser.Surname), $($ADUser.GivenName) - $($ADUser.Name.ToUpper())"
if ($Code = $HardCatUsers | Where {$_.Description -eq $ADSearch})
{
#"$($ADSearch) $($Code)"
} else {
"$($ADSearch) NEW"
}
}
}
$hardCatUsers 对象只是两列数据,例如:
Description Code
----------- ----
# No Assigned User - ACTIVE # ASSET MANAGEMENT
# No Assigned User - SPARE # NO USER SPARE
我正在做的是拉回过滤后的 AD 用户列表并格式化三个属性,然后在 $hardcatusers 中比较/查找此字符串,如果没有找到则输出字符串。
但是当前的实现在每次查找时似乎非常慢,即 5 秒。有没有更优雅的方法来搜索匹配列表?
谢谢
我发现使用 $hardcatusers 的 foreach 循环比 where
快得多即:
foreach ($ADUser in $ADUsers)
{
if ($ADUser.Name.length -le 8)
{
$found = $false
$ADSearch = "$($ADUser.DisplayName) - $($ADUser.Name.ToUpper())"
foreach ($HardcatUser in $HardCatUsers)
{
if ($HardcatUser.Description -eq $ADSearch)
{
$found = $true
}
}
if ($found -ne $true)
{
$Results = New-Object PSObject -Property (@{
Description = $ADSearch
Code = "PE" + $NextCode.ToString("000000")
})
$Result += $Results
$NextCode = $NextCode + 1
}
}
}