List all local administrator accounts excluding domain admin and local admin

时间:2015-05-12 22:21:44

标签: powershell account administrator

define('main', function (require, exports, module) {
    var Engine = require('famous/core/Engine');

    var View            = require('famous/core/View');
    var Surface         = require('famous/core/Surface');
    var Modifier        = require('famous/core/Modifier');
    var StateModifier   = require('famous/modifiers/StateModifier');
    var EventHandler    = require('famous/core/EventHandler');
    var PhysicsEngine   = require('famous/physics/PhysicsEngine');
    var Transitionable  = require('famous/transitions/Transitionable');
    var SpringTransition= require('famous/transitions/SpringTransition');
    var Particle        = require('famous/physics/bodies/Particle');
    var Drag            = require('famous/physics/forces/Drag');
    var RepulsionForce  = require('famous/physics/forces/Repulsion');
    var Wall            = require('famous/physics/constraints/Wall');
    var Random          = require('famous/math/Random');
    var Transform       = require('famous/core/Transform');

    Transitionable.registerMethod('spring', SpringTransition);



    var context = Engine.createContext();

    var cols = 5;
    var rows = 5;
    var gridSize = Math.min(window.innerWidth, window.innerHeight) / 1.5;
    var itemSize = gridSize / (cols + 1);
    var gridItems = [];
    var transformOutArray = [itemSize / 2 - gridSize / 2,
                            (itemSize / 2 - gridSize / 2) / 2,
                            0,
                            (gridSize / 2 - itemSize / 2) / 2,
                            gridSize / 2 - itemSize / 2];

    var transformInArray = Array.prototype.slice.call(transformOutArray);
    transformInArray.reverse();


    var cameraView = new View();
    var camera = new Modifier({
        origin: [0.5, 0.5],
        align: [0.5, 0.5]
    });

    context.add(camera).add(cameraView);




    function createGridItems(){
        for (var r = 0; r < rows; r += 1){
            for (var c = 0; c < cols; c += 1){
               var gridItem = new Surface({
                    size: [itemSize, itemSize],
                    properties:{
                        backgroundColor: '#aa62bb'
                    },
                    content: r + "," + c
                });

                gridItem.mod = new StateModifier({
                    origin: [0.5, 0.5],
                    align: [0.5, 0.5],
                    transform: Transform.identity
                });

                gridItem.idx = gridItems.length;

                gridItem.transformOutrs = transformOutArray[r];
                gridItem.transformOutcs = transformOutArray[c];
                gridItem.transformInrs = transformInArray[r];
                gridItem.transformIncs = transformInArray[c];

                gridItems.push(gridItem);
                cameraView.add(gridItem.mod).add(gridItem);
            }
        }
    }


    function transformOut(){
      console.log('transform out')
        for (var i = 0; i < gridItems.length; i+=1){
            var index = i;
            var gridItem = gridItems[index];

            var tran = Transform.translate(gridItem.transformOutrs, gridItem.transformOutcs);
            gridItem.mod.setTransform(tran, {
                method: 'spring',
                dampingRatio: 0.5,
                period: 600
            });
        }

    }

    function transformIn(){
        console.log('transform in');
        for (var j = 0; j < gridItems.length; j+=1){
            var index = j;
            var gridItem = gridItems[index];

            var tran = Transform.translate(gridItem.transformInrs, gridItem.transformIncs);
            gridItem.mod.setTransform(tran, {
                method: 'spring',
                dampingRatio: 0.5,
                period: 600
            });
        }


    }

    createGridItems();
    console.log (transformOutArray);
    console.log (transformInArray);
    transformOut();

    Engine.on('mousedown', transformIn);
    Engine.on('mouseup', transformOut);

});

What I want is the output to look like the following and I want to flag the users in the admin group that are NOT part of our standard setup. Really I want to ignore the SAM accounts that are the domain accounts but flagging them for now works. What is happening is there is a looping through the SAM accounts to create this output. However when the machine is offline I need to note that too.

EXample Output

I also do NOT want to use a function get-localgroupmember { [CmdletBinding()] param( [parameter(ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)] [string[]]$computername = $env:COMPUTERNAME ) BEGIN { Add-Type -AssemblyName System.DirectoryServices.AccountManagement $ctype = [System.DirectoryServices.AccountManagement.ContextType]::Machine } PROCESS{ foreach ($computer in $computername) { $context = New-Object -TypeName System.DirectoryServices.AccountManagement.PrincipalContext -ArgumentList $ctype, $computer $idtype = [System.DirectoryServices.AccountManagement.IdentityType]::SamAccountName $group = [System.DirectoryServices.AccountManagement.GroupPrincipal]::FindByIdentity($context, $idtype, 'Administrators') $group.Members | select @{N='Server'; E={$computer}}, @{N='Domain'; E={$_.Context.Name}}, samaccountName } # end foreach } # end PROCESS } "Win12R2", "W12SUS" | get-localgroupmember but rather get a list of PC names from this command ValueFromPipeline and then use that variable as the source to loop through.

This is my revised code but I'm having issues creating a custom object to add to an array when there seems to be looping in the $allComputers = Get-ADComputer -Filter 'PasswordLastSet -ge $date' -properties PasswordLastSet | select Name

$group.Members |select @{N='Server'; E={$computer}}, @{N='Domain'; E={$_.Context.Name}}, samaccountName

1 个答案:

答案 0 :(得分:2)

老实说,我不会尝试输出像你这样的数组对象。实在没有必要。只需根据需要创建每个对象,然后直接输出(你真的不需要使用return,因为函数会将任何输出传递到管道中,除非你特别说明它,例如{{{ 1}},或Write-Host)。此外,看起来你的输入需要一个对象(这很模糊),但是你正在尝试遍历该对象,并使用每个记录作为PC的名称,所以你真正想要输入的是一串字符串。在这种情况下,请将您的类型从Out-File更改为[object]。最后,如果您在创建[string[]]变量时展开Name属性,则可以简化您的一些代码。哦,我撒谎,这是最后一件事......你的$AllComputers陈述不属于你职能的有效部分。它需要像return

然后你只需添加一个例外帐户列表就可以不标记,或添加一些逻辑或其他东西。老实说,你的代码应该通过一些语法修复来完成你想要它做的所有事情。这是基于您的脚本,输出该组的所有成员并标记任何名为“管理员”的本地帐户,并且不是列为“正常”的域帐户(在END{ Return $arrayNew }部分中定义,当前&#34;域管理员&#34;或&#34;工作站管理员&#34;)。

BEGIN

那应该给你输出类似的东西:

function get-localgroupmember {
  [CmdletBinding()]
  param(
    [Parameter(Mandatory=$True,HelpMessage="Enter PC")]
    [string[]]$computername
  )

  BEGIN {
    Add-Type -AssemblyName System.DirectoryServices.AccountManagement
    $ctype = [System.DirectoryServices.AccountManagement.ContextType]::Machine
    $OKAccounts = ("Workstation Admin","Domain Admins" | ForEach{[regex]::Escape($_)}) -join "|"
  }

  PROCESS{
    foreach ($computer in $computername) {
      If (Test-Connection -ComputerName $computer -Quiet -Count 1) {
        try {
          $context = New-Object -TypeName System.DirectoryServices.AccountManagement.PrincipalContext -ArgumentList $ctype, $computer
          $idtype = [System.DirectoryServices.AccountManagement.IdentityType]::SamAccountName
          $group = [System.DirectoryServices.AccountManagement.GroupPrincipal]::FindByIdentity($context, $idtype, 'Administrators')

          $group.Members | select @{N='Server'; E={$computer}}, @{N='Domain'; E={$_.Context.Name}}, samaccountName, @{N='Flag';E={If(!(($_.Context.Name -eq $Computer -and $_.samaccountname -match "Administrator") -or ($_.context.name -ne $Computer -and $_.samaccountname -match $OKAccounts))){"X"}}}

        } catch {
          [pscustomobject] @{
            Server = $computer
            Domain = "Error"
            SamAccountName = "Error"
            Flag = ''
          }
        }
      } else {
          [pscustomobject] @{
            Server = $computer
            Domain = "Off-Line"
            SamAccountName = "Off-Line"
            Flag = ''
          }
      } 

    } # end foreach
  } # end PROCESS

}

$date = [DateTime]::Today.AddDays(-1)

$allComputers = Get-ADComputer -Filter  'PasswordLastSet -ge $date' -properties PasswordLastSet | select -Expand Name
#$allComputers = $env:COMPUTERNAME
get-localgroupmember -computername $allComputers | Out-GridView

可能更好的是过滤掉你不想要的帐户,而不是仅仅标记它们。因此,将Server Domain SamAccountName Flag ------ ------ -------------- ---- TMTsLab TMTsLab Administrator TMTsLab TMTsTacoTruck.com Domain Admins TMTsLab TMTsTacoTruck.com SomeAcct1 X TMTsLab TMTsTacoTruck.com SomeAcct2 X TMTsLab TMTsTacoTruck.com TMTech X 位更改为@{N='Flag';E={If(!(($_.Context.Name -eq $Computer -and $_.samaccountname -match "Administrator") -or ($_.context.name -ne $Computer -and $_.samaccountname -match $OKAccounts))){"X"}}}语句,以便该行为:

Where

您还希望从 $group.Members | select @{N='Server'; E={$computer}}, @{N='Domain'; E={$_.Context.Name}}, samaccountName | Where { !(($_.Server -eq $_.Domain -and $_.samaccountname -match "Administrator") -or ($_.Server -ne $_.Domain -and $_.samaccountname -match $OKAccounts)) } Flag = ''脚本块中删除Catch行。然后代码只返回如下内容:

Else

此时的完整功能代码:

Server         Domain                     SamAccountName            
------         ------                     --------------            
TMTsLab        TMTsTacoTruck.com          SomeAcct1                   
TMTsLab        TMTsTacoTruck.com          SomeAcct2
TMTsLab        TMTsTacoTruck.com          TMTech