我在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)
}
返回“您无法在空值表达式上调用方法”。我在这里做错了什么?
答案 0 :(得分: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)'"
}
}
答案 1 :(得分:0)
正如评论者latkin
所提到的,看起来您正在调用Test-UserAccountDisabled
,就像C#风格的函数一样。括号表示PowerShell中的数组或表达式。变化
Test-UserAccountDisabled ($account)
到
Test-UserAccountDisabled $account
如果仍然无法解决问题,请告诉我们错误发生在哪个行号。