Powershell检查域用户状态列表
我有一个域用户的SamAccountName列表,我现在需要检查他们的状态:存在、启用或禁用。不能让它正常工作。检查Powershell检查域用户状态列表,powershell,Powershell,我有一个域用户的SamAccountName列表,我现在需要检查他们的状态:存在、启用或禁用。不能让它正常工作。检查零件是否存在有效,但其他零件无效。我哪里做错了 $users = Get-Content -Path C:\temp\log1.txt foreach ($user in $users) { $userobj = $(try {Get-ADUser $user} catch {$Null}) If ($userobj -eq $Null) { Write-Host "
零件是否存在
有效,但其他
零件无效。我哪里做错了
$users = Get-Content -Path C:\temp\log1.txt
foreach ($user in $users) {
$userobj = $(try {Get-ADUser $user} catch {$Null})
If ($userobj -eq $Null) {
Write-Host "$user not exists" -foregroundcolor "red"
} else {
$userstatus = get-ADUser $user | Select-Object -Property enabled
if ( $userstatus = True) {Write-host "$user Enabled" -foregroundcolor "green"}
else {write-host " $user Disabled" -foregroundcolor "yellow"}
}}
好,让我们谈谈您显示的命令。你有两个问题
$userstatus = get-ADUser $user | Select-Object -Property enabled
这将返回已启用的属性和值。您应该使用-ExpandProperty仅获取属性的值
然后
if ( $userstatus = True)
=在powershell中为-eq
$users = Get-Content -Path C:\temp\log1.txt
foreach ($user in $users) {
$userobj = $(
try {
Get-ADUser $user
}catch{
$Null
}
)
If($userobj -eq $Null) {
Write-Host "$user not exists" -foregroundcolor "red"
}else{
$userstatus = get-ADUser $user | Select-Object -ExpandProperty enabled
if ($userstatus -eq True){
Write-host "$user Enabled" -foregroundcolor "green"
}else{
write-host " $user Disabled" -foregroundcolor "yellow"
}
}
}
下面是我想做同样事情的想法
Get-Content -Path C:\test\log1.txt | %{
try{
$user = $_
$Status = Get-ADUser $_ -ErrorAction Ignore | Select-Object -ExpandProperty enabled
If (!($Status)){
Write-Host "$user Disabled" -foregroundcolor "yellow"
}else{
Write-Host "$user Enabled" -foregroundcolor "green"
}
}catch{
Write-Host "$user not exists" -foregroundcolor "red"
}
}
启用用户的条件未返回任何内容的原因是默认情况下,
Get ADuser
未获取enabled
属性。您需要在Get ADUser
中使用-Properties Enabled
来指定它
有几种方法可以将您的testlist.txt
与Aduser进行比较。使用Get ADUser
时,如果帐户不存在,则不会出错。相反,它不会返回任何东西
我将使用检查结果长度的条件,而不是使用try{}catch{}
另外,您已经在foreach{}循环开始时调用了getaduser
。无需再往下调用它:$userstatus=get ADUser$user |选择对象-启用属性
下面是一种检查用户是否存在于AD中,然后检查状态的方法:
$importedList = Get-Content -Path C:\temp\log1.txt
foreach($object in $importedList)
{
$user = Get-ADUser -Filter {SamAccountName -eq $object} -Properties SamAccountName, enabled | Select Samaccountname, enabled
if($user.Length -eq 0)
{
Write-Host $object " does not exist" -ForegroundColor Red
}
else
{
Write-Host $user
}
}
就我个人而言,我更愿意将其全部放在数组中
。这样,我可以在以后使用它,如果我想的话。例如:
$importedList = Get-Content -Path C:\temp\log1.txt
$userResults = @() #define the empty array
foreach($object in $importedList)
{
$user = Get-ADUser -Filter {SamAccountName -eq $object} -Properties SamAccountName, enabled | Select Samaccountname, enabled
if($user.Length -eq 0)
{
$exists = $false
$enabled = "NA"
}
else
{
$exists = $true
$enabled = $user.Enabled
}
$userResult = New-Object PSObject -Property @{
Account = $object
Exists = $exists
Enabled = $enabled
}
$userResults += $userResult
}
$userResults
这将允许您执行以下操作:
$userResults | Where-Object {$_.Enabled -eq $true} #Get all enabled users
$userResults | Export-csv UserResults.Csv -NoTypeInformation #export to csv
到底是什么不起作用?我不记得已启用
是否是返回的默认属性的一部分。当您已经拥有$userobj
时,为什么需要获取用户两次$userstatus=get ADUser$user |选择对象-启用属性
应$userstatus=get ADUser$user |选择对象-启用扩展属性
$userstatus=True
->$userstatus-eq$True
或者如果($userstatus)
,只需$userobj=$(尝试{Get ADUser$user}catch{$Null})
可以是$userobj=Get ADUser$user-ErrorAction SilentlyContinue
您得到了什么错误