2012-08-28 125 views
1

我有一個CSV文件中約1000個用戶名的列表,我需要檢查它們是否啓用。我似乎無法找到關於如何做到這一點的教程,而不使用第三方管理單元,這不是一個選項。PowerShell腳本來檢查是否從CSV文件啓用帳戶

看起來這應該是一個相當簡單的腳本,但我似乎無法做到正確。

function Test-UserAccountDisabled 
{ 
    param($account) 
    $searcher = new-object System.DirectoryServices.DirectorySearcher 
    $searcher.filter = "(sAMAccountName=$Account)" 
    $user=$searcher.FindOne().GetDirectoryEntry() 
    if($($user.userAccountControl) -band 0x2){$true}else{$false} 
} 

$file = Select-FileDialog -Title "Select a file" -Directory "C:\" -Filter "All Files (*.*)|*.*" 

$users = Import-Csv $file 

foreach($account in $users) 
{ 
    Test-UserAccountDisabled($account) 
} 

它返回「你不能調用一個空值表達式的方法。」我在這裏做錯了什麼?

+1

請注意,您在powershell中調用與cmdlet相同的函數,而不需要parens。 'Test-UserAccountDisabled $ account' **不是**'Test-UserAccountDisabled($ account)'。 Parens只適用於.NET方法。這可能是問題的一部分。 – latkin

+0

在這種情況下,結果是相同的,因爲只有一個參數。 – Joey

+0

發生什麼錯誤? –

回答

2

什麼是$賬戶?

假設CSV文件包含SAM帳戶列:

Import-Csv $file | Foreach-Object{ 

    $user = ([ADSISEARCHER]"(samaccountname=$($_.SamAccountName))").FindOne() 

    if($user) 
    { 
     New-Object -TypeName PSObject -Property @{ 
      SamAccountName = $user.SamAccountName 
      IsDisabled = $user.GetDirectoryEntry().InvokeGet('AccountDisabled') 
     } 
    } 
    else 
    { 
      Write-Warning "Can't find user '$($_.SamAccountName)'" 
    } 
} 
+0

謝謝,但它返回「方法調用失敗,因爲[System.Management.Automation.PSCustomObject]不包含名爲'GetDirectoryEntry'的方法。 – Pickle

+0

我有一個類型,它現在已經修復,給它另一個嘗試 –

+0

同樣的錯誤,我已經改正了這個錯誤,但仍然是錯誤的,在ADSISEARCHER中還有另外一個錯誤。 – Pickle

0

如前所述評議latkin,它看起來像你調用Test-UserAccountDisabled像一個C#風格的功能。括號表示PowerShell中的數組或表達式。更改

Test-UserAccountDisabled ($account) 

Test-UserAccountDisabled $account 

如果仍然不能解決問題,請讓我們知道什麼行號的錯誤是在發生。

+0

儘管技術上正確,但這並不會改變任何內容,因爲只有一個參數。 – Joey

相關問題