WhoAmI

Kezdjük talán a legegyszerűbbel, a WhoAmI paranccsal. Ez a parancs sok hasznos információt jelenít meg számunkra a felhasználói információinkkal kapcsolatban. Ha megnézzük a helpjét, akkor egy nagyon hasznos dolgot láthatunk benne, ami megkönnyíti a PowerShelles integrációt, ez pedig a CSV formátumú kimenet választásának lehetősége.

Ha jobban megvizsgáljuk, akkor alapvetően háromfajta információt gyűjt össze nekünk ez a segédprogram: a felhasználóval kapcsolatos információk, csoporttagság és privilégiumok. Ezek – ha objektumokban gondolkodunk – eltérő jellegzetességekkel, tulajdonságokkal rendelkező információk, így ezeket nem könnyű összevonni, érdemes ezeket külön kezelni.

Mindezek figyelembevételével az alábbi függvényt találtam ki megoldásként:

function get-whoami {

param (

    [Parameter(Position = 0)]

    [string]

    [ValidateScript({

        "user" -like "$_*" -or

        "groups" -like "$_*" -or

        "privileges" -like "$_*" -or

        "all" -like "$_*"

    })]

    $Type

)

    $u = $g = $p = $null

    if("user" -like "$type*" -or "all" -like "$type*"){

        $u = whoami -user /fo CSV | ConvertFrom-Csv

    }

    if("groups" -like "$type*" -or "all" -like "$type*"){

        $g = whoami -groups /fo CSV | ConvertFrom-Csv |

            Select-Object -Property "Group Name", Type, SID,

                @{n="Attributes"; e={,@($_.attributes -split ", ")}}

    }

    if("privileges" -like "$type*" -or "all" -like "$type*"){

        $p = whoami -priv /fo CSV | ConvertFrom-Csv

    }

    if("all" -notlike "$type*"){$u, $g, $p | %{$_}}

    else{

        New-Object -TypeName PSObject -Property @{

            User = $u

            Groups = $g

            Priv = $p

        }

    }

}

A függvénynek egy paramétere van, a $Type, ami a user, privileges, groups és all lehetőségek valamelyikére kell, hogy illeszkedjen, beleértve a semmit, azaz ha nem szerepeltetjük ezt a paramétert, akkor ez az all-al ekvivalens. Ezután attól függően, hogy mi a $Type értéke, a whoami megfelelő parancssori kapcsolóival meghívom, a CSV formátumú kimenetből objektum-gyűjteményt alakítok ki a ConvertFrom-CSV cmdlet segítségével.

A groups variációnál még szükséges egy kis átalakítás az Attributes tulajdonságnál, mert alaphelyzetben ez egy vesszővel felsorolt szöveg, ebből készítek a Select-Object segítségével igazi sztringtömböt.

Ha nem az all-ra illeszkedik a $Type, akkor a korábbiak közül azt a részeredményt teszem csak ki a kimenetre, amelyiknek van értéke. Ha pedig az all-ra illeszkedik a $Type, akkor pedig mindhárom részeredményből egy közös objektumot készítek, melynek az egyes tulajdonságai lesznek ezen részeredmények.

Így a kimenetem már teljesen PowerShell-szerű lesz, amelyet fel tudunk használni PowerShell szkriptjeinkben.

Nézzük, milyen kimenetet produkál ez a függvény:

[1] PS C:\> get-whoami -Type u

 

User Name                               SID

---------                               ---

soost-pc\soost                          S-1-5-21-1879730660-3170798090-27083...

 

 

[2] PS C:\> get-whoami -Type g

 

Group Name          Type                SID                 Attributes

----------          ----                ---                 ----------

Everyone            Well-known group    S-1-1-0             {Mandatory group...

soost-PC\Dummy      Alias               S-1-5-21-1879730... {Mandatory group...

soost-PC\HomeUsers  Alias               S-1-5-21-1879730... {Mandatory group...

BUILTIN\Administ... Alias               S-1-5-32-544        {Group used for ...

BUILTIN\Users       Alias               S-1-5-32-545        {Mandatory group...

NT AUTHORITY\INT... Well-known group    S-1-5-4             {Mandatory group...

CONSOLE LOGON       Well-known group    S-1-2-1             {Mandatory group...

NT AUTHORITY\Aut... Well-known group    S-1-5-11            {Mandatory group...

NT AUTHORITY\Thi... Well-known group    S-1-5-15            {Mandatory group...

LOCAL               Well-known group    S-1-2-0             {Mandatory group...

NT AUTHORITY\NTL... Well-known group    S-1-5-64-10         {Mandatory group...

Mandatory Label\... Label               S-1-16-8192         {Mandatory group...

 

 

[3] PS C:\> get-whoami -Type p

 

Privilege Name             Description                State

--------------             -----------                -----

SeShutdownPrivilege        Shut down the system       Enabled

SeChangeNotifyPrivilege    Bypass traverse checking   Enabled

SeUndockPrivilege          Remove computer from do... Disabled

SeIncreaseWorkingSetPri... Increase a process work... Disabled

SeTimeZonePrivilege        Change the time zone       Disabled

 

 

[4] PS C:\> get-whoami | fl

 

 

Groups : {@{Group Name=Everyone; Type=Well-known group; SID=S-1-1-0; Attributes

         =System.Object[]}, @{Group Name=soost-PC\Dummy; Type=Alias; SID=S-1-5-

         21-1879730660-3170798090-2708336039-1002; Attributes=System.Object[]},

          @{Group Name=soost-PC\HomeUsers; Type=Alias; SID=S-1-5-21-1879730660-

         3170798090-2708336039-1003; Attributes=System.Object[]}, @{Group Name=

         BUILTIN\Administrators; Type=Alias; SID=S-1-5-32-544; Attributes=Syste

         m.Object[]}...}

User   : @{User Name=soost-pc\soost; SID=S-1-5-21-1879730660-3170798090-2708336

         039-1000}

Priv   : {@{Privilege Name=SeShutdownPrivilege; Description=Shut down the syste

         m; State=Enabled}, @{Privilege Name=SeChangeNotifyPrivilege; Descripti

         on=Bypass traverse checking; State=Enabled}, @{Privilege Name=SeUndock

         Privilege; Description=Remove computer from docking station; State=Dis

         abled}, @{Privilege Name=SeIncreaseWorkingSetPrivilege; Description=In

         crease a process working set; State=Disabled}...}

Természetesen ezt még tovább tudnánk szépíteni, ha egyedi típusneveket adnánk a kimeneti objektumoknak és ezekhez szép format.ps1xml kifejezéseket rendelnénk.



Word To HTML Converter