2013-12-11 22 views
0

PowerShell中似乎不想窩for循環,所以我猜這必須管道...PowerShell的 - 忽略CSV項目它們接觸而不是用戶

目前我從.csv列表拉用戶名(列A)及其更新的帳戶到期日期(B列)。我想要做的是交叉引用文件中的每個用戶名,以確保它確實是一個用戶而不是「聯繫人」。有時用戶被禁用。這是正確的,因爲即使到期日期是最新的,帳戶也將保持禁用狀態。然而,當我點擊一個聯繫人而不是實際用戶的用戶名時,它似乎失敗了。 (爲什麼在列表中的聯繫人因爲列表來自供應商?)

Import-Module ActiveDirectory 
$userlist = Import-Csv "\\share\expired.csv" -Header Name,Date 


foreach ($line in $userlist) { 

    $line 
    Set-ADAccountExpiration -Identity $line.Name -Date $line.Date 

} 

回答

0
Import-Module ActiveDirectory 
$userlist = Import-Csv "\\share\expired.csv" -Header Name,Date 

foreach ($line in $userlist) { 

    try { 
     Set-ADAccountExpiration -Identity $line.Name -Date $line.Date 
     $line 
    } 
    catch { "could not expire: $line" } 
} 
0

管到Where-Object,並檢查當前的名稱是用戶對象:

Import-Csv \\share\expired.csv -Header Name,Date | 
Where-Object { Get-ADObject -LDAPFilter "(&(name=$($_.Name))(objectclass=user))" } | 
Foreach-Object { Set-ADAccountExpiration ... } 
0

如果你不不需要管道,continue將移動到foreach循環中的下一個項目。

foreach ($line in $userlist) { 
    <Shay Levy's nifty check for user vs contact> 
    if ($contact) {continue} 
    $line 
    Set-ADAccountExpiration -Identity $line.Name -Date $line.Date 

} 
+0

有趣!我有什麼理由不會使用這種方法? –

+0

沒有理由我能想到... – noam