Combine Get-ADComputer, Get-ADuser .. and optimalize the script
hello,
need optimize script
it should select computer ad, select attribute managedby , each user in managedby it should search mail,telephonenumber...
it working, got errors when managedby attribute empty - because get-aduser requires identity..
output should looks like:
name managedby telephonenumber
p011w7 user1 +420 123 456 789
p012xp <= (computer account empty managedby attribute.. )
p013xp user2 +420 558 555 555
also, dont know if quering multiple times cmdlet get-aduser efficient. if run script 4000 computer accounts, each account quering 3+ get-aduser ... slow. ideas how optimize that?
thanks
$computerlist = get-adcomputer -filter {(name -like "p*") -or (name -like "n*")} -properties * | ?{$_.operatingsystem -notlike "*server*"} | select name,@{n="managedby";e={($_.managedby -split ",*..=")[1]}} $output = @() foreach ($pc in $computerlist) { $myobject = new-object psobject -property @{ pcname = $pc.name managedby = $pc.managedby userenabled = (get-aduser -identity $pc.managedby).enabled primarysmtp = (get-aduser -identity $pc.managedby -properties *).mail phone = (get-aduser -identity $pc.managedby -properties * ).telephonenumber } $output += $myobject } $output
$computerlist = get-adcomputer -filter {(name -like "p*") -or (name -like "n*") -and operatingsystem -notlike "*server*" } -properties managedby | group managedby $output = @() foreach ($pc in $computerlist) { $user = [adsi]"ldap://$($pc.name)" $pc.group | foreach { $output += new-object psobject -property @{ pcname = $_.name managedby = $(if($_.managedby) {$user.name}) userenabled = $(if($_.managedby){}) primarysmtp = $(if($_.managedby){$user.mail}) phone = $(if($_.managedby){$user.telephonenumber}) } } }
Windows Server > Windows PowerShell
Comments
Post a Comment