Symbian^3 – Nokia i Symbian Foundation nie śpią

Nokia i Symbian Foundation mają również coś do pokazania – Symbian^3.  Pierwsze urządzenia – trzeci kwartał 2010. Dla programistów – QT. Ładnie zaczyna się to komponować. Gwoli przypomnienia – Symbian jest od jakiegoś czasu na licencji Open Source. Im więcej konkurencji tym dla nas – konsumentów – lepiej :)

Więcej info: http://www.allaboutsymbian.com/news/item/11137_Symbian3_Design_Preview_looks_.php

Windows Phone 7 – odwaga małego miękkiego

Dzisiaj na MWC 2K10 @ Barcelona Mały Miękki pokazał Windows Phone 7. Nie, nie Windows Mobile 7. Zmiana nazwy jest nieprzypadkowa. Nowy system jest napisany od podstaw, widać podobieństwa do Zune HD. Jest to IMHO bardzo odważny krok ze strony MS gdyż *nie ma* żadnej kompatybilności wstecz. Zero, null, void, nie da rady, oba samce ;-) Ale tak trzeba było, znane nam i coraz mniej lubiane WM6.x, pudrowane różnymi nakładkami, coraz bardziej odstawało od konkurencji. Nowy interfejs jest minimalistyczny, świeży i naprawdę przemyślany.

http://www.engadget.com/2010/02/15/windows-phone-7-series-is-official-and-microsoft-is-playing-to/

http://www.engadget.com/2010/02/15/windows-phone-7-series-hands-on-and-impressions/

http://www.osnews.com/story/22877/Microsoft_Unveils_Windows_Phone_7_Series

http://gizmodo.com/5471805/windows-phone-7-series-everything-is-different-now

http://channel9.msdn.com/posts/LauraFoy/First-Look-Windows-Phone-7-Series-Hands-on-Demo/

Usuwanie starych kont komputerów z Active Directory

Kiedys do wywalania starych i nieużywanych kont komputerów z AD służył mi taki znaleziony w sieci skrypt:

 

dsquery computer -inactive 16 -limit 0 | dsrm -c -noprompt

 

ale coś przestał działać na Win2008.

Nie wnikając w szczegóły i chcąc iść  z duchem czasu przerobiłem go na PowerShella

 

Get-QADComputer -IncludedProperties pwdLastSet -SizeLimit 0 |where {$_.pwdLastSet -le (Get-Date).AddDays(-180) } | Remove-QADObject -DeleteTree  -Force

 

Może komuś się przyda przy porządkach w AD.

Wyciąganie haseł z kont uruchamiających serwisy

Ostatnio na virtualstudy.pl była prezentacja Pauli Januszkiewicz o Technikach hakerskich dla adminów IT,  gdzie przedstawiono rozwiązanie którego szukałem od jakiegoś czasu.

Chodzi dokładnie o wyciąganie haseł do kont uruchamiających serwisy.

Za pomocą narzędzia napisanego przez Michała Grzegorzewskiego jest to dziecinnie proste.

Po szczegóły techniczne odsyłam do bloga Michała (http://zine.net.pl/blogs/mgrzeg/) gdzie również znajdziecie tool SAPD.

 

A poniżej krótki pokaz:

 

Najpierw odpalamy konsole z konta systemowego:

Psexec -i -s cmd.exe

 

Następnie uruchamiamy tool sapd z nazwą serwisu który jest uruchamiany z konta innego niż systemowe.

Sapd.exe nazwa_uslugi

 

I dostajemy hasełko. Łatwo, szybko i przyjemnie :-)

 

 sapd1.JPG

PS: jak usunąć elementy z listy oddzielanej średnikami

tak na prawdę to kolejna lekcja zabawy hashtablami i ciągami. scenariusz w moim przypadq był taki, żeby zweryfikować jakie konta należą do grupy lokalnych adminów na stacjach roboczych. skrypt logowania wrzucił zawartość grupy do bazy danych, potem pobrałem sobie dane do zmiennej $DataSet.Tables[0] . teraz trzeba wygenerować raport “wypisz wszystkie komputery, na których ktoś należy do adminów a nie powinien, z informacją jakie to konto”. rozwiązanie jest takie:

#connection objects
$sqlconnection=New-Object system.data.sqlclient.sqlconnection
$sqlcmd= New-Object System.Data.SqlClient.SqlCommand
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$DataSet = New-Object System.Data.DataSet

#connect MYDATABASE on MYSQLSERVER
$sqlconnection.ConnectionString="Server=MYSQLSERVER;database=MYDATABASE;Integrated Security=True"
$sqlcmd.CommandText="select * from TABLENAME"
$sqlcmd.Connection=$sqlconnection
$SqlAdapter.SelectCommand = $SqlCmd
#that is strange way of getting results - they are popullated into $dataset array. 
$SqlAdapter.Fill($DataSet)|out-null


#now when we have everything in an array so we can manipulate on data
#first define hashtable for computers with admin accounts
$unsecure=@{};
foreach ($row in $DataSet.Tables[0]) {
    #how to remove correct group/user names from check? one can try to 
    #operate on strings but it's so... bueee
    #it's easier and nicer to have an object for comparison. hashtable is perfect
    $splitrow=@{};

    #column 1 in my database contains memberof information separated with semicolon
    #f.ex. 'domain admins;administrator;non-admin-user;'
    #so change this string into a hashtable:
    $row[1].split(";")|%{$splitrow.add($_,0)}
    #the second parameter is obligatory to fill but tottaly unimportant in this situation. 
    #so i put '0' but could be anything.
    #now it's easy to remove correct entries which are not interesting for this task
    $splitrow.Remove("administrator");
    $splitrow.Remove("Domain Admins");
    $splitrow.Remove("grupa_operatorow");
    $splitrow.Remove("specjalna_grupa");
    #as there is ';' on the end it will always produce one additional, empty record. 
    $splitrow.Remove("");

    #if there are any unwanted logins, the number will be greater then 0
    if ($splitrow.count -gt 0) {
        #add entry to final table. i want to have it back as a string so -join is going to be helpful
        $unsecure.add($row[0],$splitrow.keys -join ";")
    } else {
        #out of interest - just informational
        echo "KOMPUTER: $($row[0]) jest ok";
    }

}

#now print information to a file
$unsecure.count|out-file c:tempadmins.txt
$unsecure.getEnumerator()|Sort-Object name|out-file c:tempadmins.txt -append

czego można się nauczyć z tego skryptu?

  • jak połączyć się z bazą
  • jak pobrać i operować na wynikach
  • jak radzić sobie z hashtablami
  • szczególnie ciekawy jest sposób sortowania – gdzie użyty jest getEnumerator. zwykłe $unsecure|Sort-Object nie zahula

sposób być może nie jest optymalny więc będę wdzięczny za sugestie i alternatywne rozwiązania (:

eN.

Dictionary object dla powershell czyli Hashtable

w PS zamiast obiektu słownikowego jest hashtable. Po przejrzeniu wielu wygooglanych przykładów oczywiście nie znalazłem odpowiedzi na moje pytania:

  • co jeśli wartością ma być zmienna tablicowa?
  • jak dostać się do takiej wartości?
  • jak zrobić enumerację z możliwością wykonania działań?

odpowiedzi są dość intuicyjne. nie ma problemu, żeby do hashtabla dodać tablicę jako wartość, a następnie robić jakieś operacje. enumeracja jest dokładnie taka sama jak w VBS:

#declaration
$hashtable=@{ "aaa"=@(0,0); "bbb"=@(0,0) }
#print out single value
$hashtable["aaa"][1]++;
echo $hashtable["aaa"][1]; #out -> 1
#enum
$hashtable
#enum with some operation
$hashtable["aaa"]=@(5,10)
$hashtable["bbb"]=@(3,1)
foreach($entry in $hashtable.keys) {
    echo "$($hashtable[$entry][0]/$hashtable[$entry][1]*100)%";
} # out -> 300% 50%

póki co nie bawiłem się $hashtable.getEnumerator() – być może da się zoptymalizować to trochę.. ale działa wszystko bez problemu niemal tak samo jak VBSowy Dictionary (: listy są w .keys i .values, testy są metodami .containsKey i .containsValue, dodawanie .add, usuwanie .remove – różnice w wykorzystaniu są niewielkie (:

eN.

Speaker Idol na C2C’2010

Właśnie ogłoszono, że na tegorocznym C2C, który odbędzie się 17. kwietnia, zostanie przeprowadzony konkurs Speaker Idol. Przedruk z oficjalnej strony konferencji:

Mamy przyjemność już po raz trzeci zapowiedzieć konferencję C2C (Communities to Communities ), tym razem będzie to edycja 2010, która odbędzie się 17 kwietnia 2010 r. w Warszawie. Ruszamy z trzema ścieżkami (.NET, Bazy danych, IT PRO) – czyli każdy znajdzie coś dla siebie :)
Podobnie jak przy konferencjach C2C 2008 i 2009, tak i teraz zapraszamy do uczestnictwa w konkursie Speaker Idol. Wszyscy zainteresowani proszeni są o przesłanie 5-10 minutowego nagrania z propozycją sesji, którą chcieliby poprowadzić w czasie konferencji. Warunkiem uczestnictwa w konkursie jest nadesłanie swojego zgłoszenia do dnia 28.02.2010r. na adres si@c2c.org.pl. Spośród nadesłanych nagrań, komisja wybierze 3 najlepszą propozycje, po jednej z każdej ze ścieżek, a zwycięzcy poszczególnych ścieżek zostaną prelegentami na konferencji C2C’10.

I jeszcze mały “Easter Egg” – oprócz mnie będzie tam można spotkać jeszcze jedną osobę z w-files :) Czy się ujawni, to już zależy od niego ;)