1

我在 CSV 文件中有大约 1000 个用户名的列表,我需要检查它们是否启用。我似乎找不到关于如何在不使用第三方管理单元的情况下执行此操作的教程,这不是一个选项。

看起来这应该是一个相当简单的脚本,但我似乎无法做到正确。

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)
}

它返回“您不能在空值表达式上调用方法”。我在这里做错了什么?

4

2 回答 2

2

$Account 中有什么?

假设 CSV 文件包含 SamAccountName 列:

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)'"
    }
}
于 2012-08-28T17:01:31.183 回答
0

正如评论者所latkin提到的,看起来您正在调用Test-UserAccountDisabledC# 风格的函数。括号表示 PowerShell 中的数组或表达式。改变

Test-UserAccountDisabled ($account)

Test-UserAccountDisabled $account

如果仍然不能解决问题,请让我们知道错误发生在哪一行

于 2012-08-28T20:10:03.460 回答