Powershell i blokada kont#

Przyszła lista kont do zablokowania, oczywiście w formacie .xls.  Jako ze konta powinny być blokowane jak najszybciej, a osoba która sie tym zajmuje ma dzisiaj wolne, na mnie spadł ten obowiązek.

Na początku trzeba było dodać nagłówki do kolumn w excelu, a następnie wyeksportować wynik do pliku .csv.

Następnie w ciągu 3h napisałem taki skrypcik

#configuration

$lista = Import-Csv blokada.csv
$studentOU="OU=studenci,DC=pjwstk,DC=edu,DC=pl"
$data=get-date -format g
$comment="[blocked "+$data+"by PeKi script(dziekanat)]"
$logname = "log";
$logname += get-date -format "yyyyMMdd_hhmmss";
$logname +=".log";

#processing
$log=@();
$notFoundLog=@();
$alreadyDisabled=@();
$l=0
$k=0;
foreach ($user in $lista)
{
$l++;
$stud="LDAP://CN=s"+$user.Album+","+$studentOU;
if ([DirectoryServices.DirectoryEntry]::Exists($stud))
{
$de = new-object DirectoryServices.DirectoryEntry($stud);
$uac=$de.userAccountControl;
$iuac=[int]$uac.toString();
if (($iuac -band 2) -eq 0 )
{
$iuac+=2;
$deLastName=$de.InvokeGet("LastName");
$k++;
$deFirstName=$de.InvokeGet("FirstName");
$deCommonName=$de.InvokeGet("cn");
$deComment=$de.InvokeGet("comment");
$deDescription=$de.InvokeGet("Description");
$date = get-date -format g;
$deComment=$deComment+$comment;
$deDescription=$comment+$deDescription;
$log+= $deCommonName+" "+$deLastName +" " +$deFirstName +" ";

$de.InvokeSet("comment",[string]$deComment);
$de.InvokeSet("Description",[string]$deDescription);
$de.InvokeSet("userAccountControl",[int]$iuac);
$de.CommitChanges();
$de.close();
}
else
{
$alreadyDisabled+= "disabled:"+$user.Album +"uac: " +$uac;
}
}
else
{
$notFoundLog+= "not found:"+$user.Album +" cn: " +$stud ;
}
}

#output
echo "dobrych"| out-file $logname -Append
$log| out-file $logname -Append
echo "zlych"| out-file $logname -Append
$notFoundLog| out-file $logname -Append
$alreadyDisabled| out-file $logname -Append
echo "prztworzonych" $k " z " $l| out-file $logname -Append


write-host "dobrych";
$log
write-host "zlych";
$notFoundLog
$alreadyDisabled
write-host "prztworzonych" $k " z " $l;

Z ciekawszych rzeczy w tym skrypcie widać:

  • deklarację ($param=@()) i zapisywanie do tablicy ($param+="wartosc")
  • porównywanie bitowe za pomocą -band
  • wywołanie statycznej procedury za pomocą [sciezka.do.klasy]::procedura()
  • zapisywanie do pliku za pomocą out-file
Tuesday, May 23, 2006 3:27:58 PM (Central European Standard Time, UTC+01:00) #    Comments [0]  |  Trackback

 

SAS unattended#

Sas niestety korzysta z technologi instalshielld do instalacji, i do tego niestandardowych przełączników. Na szczęście w katalogu %SASROOT%\sas\docs\0011 znajdują się pliki opisujące wykonanie instalacji krok po kroku.

W skrócie najpierw przygotowujemy plik instalacji  poprzez wykonanie komendy %SASROOT%\sas\setup.exe record (czyli nie setup.exe -r). Po odpaleniu dostajemy plik do edycji, i nagrywamy go jako quiet.ini.

Drugim krokiem jest tylko odpalenie instalacji poprzez wydanie komendy:

"g:\Program Files\Sas Server\sas\setup.exe" /s quietfile="g:\Program Files\Sas Server\sas\quiet.ini" /f2 c:\winnt\temp\sas.log  /sms
Gdzie "g:\Program Files\Sas Server" jest katalogiem źródłowym instalacji.

Oczywiście mozemy tez logować monitorując plik %USERPROFILE%/Local Settings/Temp/{guid sasa}/saslog.txt

Sunday, May 21, 2006 12:14:40 PM (Central European Standard Time, UTC+01:00) #    Comments [0]  |  Trackback

 

POwershell i paramtry SFU#

Po walcę z grupami w linuxie, pora przyszła aby przejrzeć AD.

Jak się okazało, nie wszystkie grupy windowsowe miały odpowiednie parametry więc pora była na dopisanie tych paramtrów.

Z tego powodu narodził sie ponizszy skrypt:

$strRoot = "LDAP://dc=pjwstk,dc=edu,dc=pl"
$Root = New-Object DirectoryServices.DirectoryEntry $strROOT
$Searcher = New-Object DirectoryServices.DirectorySearcher
$Searcher.SearchRoot = $root
$searcher.Filter = "(&(objectClass=Group))"
$groups = $searcher.findAll();

#get groups with no mssfu30name
foreach ($group in $groups) { if (!$group.Properties.mssfu30name) {write-host $group.Properties.name }}
#print maxgid
foreach ($group in $groups) { if ($group.Properties.mssfu30name) {write-host $group.Properties.mssfu30gidnumber }}
#setMaxgid

$maxgid=0
foreach ($group in $groups)
{
if ($group.Properties.mssfu30gidnumber)
{
$tmp = [int] $group.Properties.mssfu30gidnumber[0]
if ($tmp -gt $maxgid )
{
$maxgid=$tmp;
}
}
};

#set params
foreach ($group in $groups)
{
if (!$group.Properties.mssfu30gidnumber)
{
$maxgid= $maxgid+1
$de = new-object DirectoryServices.DirectoryEntry($group.Path)
$deName=$de.InvokeGet("cn");
$de.InvokeSet("mssfu30name",[string]$deName)
$de.InvokeSet("mssfu30gidnumber",[int]$maxgid)
$de.InvokeSet("mssfu30nisdomain",[string]"pjwstk")
$de.CommitChanges()
$de.close()
}
};



Tuesday, May 16, 2006 6:56:21 PM (Central European Standard Time, UTC+01:00) #    Comments [0]  |  Trackback

 

nss_ldap i problem z grupami rozwiazany (:#

Po 6 miesiącach prób w końcu rozwiązałem problem z grupami w nss_ldap. Wydawało się nam, ze problem generuję zbyt duza liczba uzytkowników zawartych w grupie.

Error objawiał się następująco:

getent: /home/devel/openldap/build-area/openldap2-2.1.30/libraries/liblber/sockbuf.c:82: ber_sockbuf_ctrl: Assertion `( (sb)->sb_opts.lbo_valid == 0x3 )' failed.
Aborted

I powodował ze odpalenie jakiegokolwiek programu kończyło sie jego pokaaniem. Dlatego przestaliśmy uzywać grup domenowych poprzez LDAPa ( bo korzystaliśmy z RPC).

Po 6 miesiącach prób ( instalacji róźnych wersji linuxa, róznych wersji bibliotek, nss_ldap, Openldapa, sasla, az do instalacji W2k3 R2) nadal nie odnosiliśmy sukcesu. Az w końcu okazało się ze wadliwa jest konfiguracja w pliku ldap.conf na linuxach.

Mianowicie, zamiast linijki:

nss_base_group dc=pjwstk,dc=edu,dc=pl?sub

Powinna być linijka:

nss_base_group cn=Users,dc=pjwstk,dc=edu,dc=pl?sub

gdzie Users jest OU dla grup

nss_ldap po prostu nie radził sobie z przeszukiwaniem tak rozbudowanego schemtu ;).

BSS
Monday, May 15, 2006 7:31:15 PM (Central European Standard Time, UTC+01:00) #    Comments [2]  |  Trackback

 

PowerShell#

Czas się w koncu zabrac za Powershella. Po cięzkiej nauce VBS i batchy CMD raczej podchodzę do tej nowinki niechętnie, ale jak wskazują najnowsze trendy MSH będzie obowiązkowym językiem skryptowym.

Task 1: Mamy schemat katalogów

/-|
   -s3452
   -s3453
   -s4532
   ...

I nazwy uzytkownków takie jak nazwy katalogów. Musimy ustawić prawa Full Control na katalog dla uzytkownika.

Podejście 1 (command line):

for /D %d in (*) do cacls %d /T /E /G %d@pjwstk.edu.pl:F

Podejście 2 (Powershell):

foreach ($i in dir)
{
$acl = get-acl $i;
$ar = new-object System.Security.AccessControl.FileSystemAccessRule ($i, "FullControl", "Allow");
$acl.SetAccessRule($ar) ;
set-acl $i $acl
}

Monday, May 15, 2006 6:24:38 PM (Central European Standard Time, UTC+01:00) #    Comments [0]  |  Trackback

 

Windows Security and Directory Services Guide for Unix v1.0 #

Microsoft w końcu wypuścił bete dokumentu opisującego współpracę linuxów z windowsami. Z nowości to po raz pierwszy pokazania logowania za pomocą kerberosa, i zbieranie informacji o uzytkownikach z bazy LDAPowej. Publikacja jest dostępna na Microsoft Connect - https://connect.microsoft.com/

Niestety nie ma opisu "jak to się robi" dla schema w Windows 2003 R2, oraz nie jest uwzględnine bezpieczeństwo -> brak jest opisu ustawień GSSAPI, czy chociazby TLS(nie mylić z SSL i ldaps).

Miłym dodatkiem jest zamieszczenie plików konfiguracyjnych dla paru systemów *nixowych, w tym m.in. Red Hata i Solarisa.

Tuesday, May 09, 2006 11:09:11 AM (Central European Standard Time, UTC+01:00) #    Comments [0]  |  Trackback

 

All content © 2010, Krzysztof Pietrzak
On this page
This site
Calendar
<March 2010>
SunMonTueWedThuFriSat
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910
Archives
Sitemap
Blogroll OPML
  Tokyo by night
blog WiTa
  W-Files
blog n€x¤Ra
 .:fotoblog:.
blog Kfaza
 \\archon\blog$
blog archona
 Czasowstrzymywacz
Blog Fookyego
 Jog Pstryka
Jog Pstryka
 Mac OS X vs. Active Directory
techniczny blog kfaza

Maps
Locations of visitors to this page