piątek, 23 lipca, 2010 - 12:27

Backup ISA TMG

ISA i TMG to takie fajne serwerki, które łatwiej jest postawić od początku niż przywrócić z kopii zapasowej. A jeszcze prościej zrobić jeden obraz z systemu, a następnie odtworzyć z obrazu, i wgrać najnowszy konfig. Ale jak więc zabezpieczać konfig ISA/TMG? Dość prosto i szybko można to zrobić skryptem, pamiętając o kilku rzeczach:

  • Backup konfiguracji powinien być trzymany na oddzielnym serwerze, najlepiej backupowanym przez coś innego
  • Pojedyńcza kopa zapasowa ma 7-8 MB, co przy kopii codziennej daje 3G na rok, a tygodniowej 420MB
  • Folder docelowy dobrze jest skompresować, wybierając odpowiednią flagę NTFS-ową na folderze, wtedy ilość miejsca z 7MB spada do 2.5MB, przy czym kolejne backupy będą zabierały jeszcze mniej
  • Jeśli certyfikaty będą eksportowane, to znajdą się również w konfiguracji TMG
  • Przy tmg, routing jest trzymany w konfiguracji TMG, więc przed importowaniem trzeba go wyrzucić z pliku netsh

A poniżej skrypt:

‘bAckupisa/tmgtofile
Const destination = “C:\bck\”
Const passwd = “12345678″

Const fpcExportImportPasswords = &H00000001
Const fpcExportImportUserPermissions =&H00000002
Const fpcExportImportServerSpecific= &H00000004
Const fpcExportImportEnterpriseSpecific = &H00000008
      fpcOptionalData = fpcExportImportPasswords Or _
      fpcExportImportUserPermissions Or _
      fpcExportImportServerSpecific Or _
      fpcExportImportEnterpriseSpecific
date = replace(Date,“/”,“_”)
Set root = CreateObject(“FPC.Root”)
Set firewall = root.GetContainingArray
firewall.ExportToFile destination & date & “_ISA_CONFIG.XML”_
                     ,fpcOptionalData,passwd

Set wshShell = WScript.CreateObject(“WScript.shell”)
wshshell.run “cmd/c “” netsh int ip dump > ” & _
              destination & date & “ip.nsh”"”
wshshell.run “cmd/c “” netsh int ip show dns > ” & _
             destination & date & “dns.txt”"”

piątek, 28 maja, 2010 - 11:38

trochę softu, vhd i windows backup

ostatnio testowane:

  • NetSurveyor – darmowy skaner WiFi, trochę bardziej rozbudowany niż NetStumbler
  • WinImage – shareware [3o uruchomień], pozwalający na obsługę różnych formatów obrazu dysq – m.in. vhd. co fajniejsze, ma wbudowaną opcję D2I [disk-to-image]. w przeciwieństwie do disk2vhd nie korzysta z bibliotek systemu stanowiąc pełne rozwiązanie. dzięki temu możliwe było przerobienie w98 na maszynę wirtualną [disk2vhd wymaga min. wXP SP2]. dodatkowo do mountowania dysków *nie jest* wymagany żaden sterownik, dzięki czemu nie trzeba restartować systemu po instalacji i generalnie jest mniej ‘inwazyjny’ dla systemu. poza tym, że to shareware najpoważniejszą wadą było to, że podczas extrakcji plików z vhd, po natrafieniu na błąd aplikacja się wywaliła ): w kwestii wydobywania danych lepiej sprawdził się inny program..
  • gizmo drive – fajny, darmowy tool do mountowania różnych formatów jako dyski wirtualne [aka DeamonTools]. obsługuje m.in. vhd. wymaga restartu przy instalacji [sterownik dla dysq wirtualnego]. ponieważ jest to na poziomie sterownika, gdy wystąpił błąd podczas kopiowania, po prostu pominąłem plik i można było kontynuować operację.

i taka ciekawostka – teoretycznie vhd jest *standardem*. problem jednak polega na tym, że wersje vhd się różnią – vhdmount z virtual servera nie otworzy vhd z w2k8. obraz zrobiony na w2k8 R2 różni się od tego z w2k8. nie miałem czasu na testy ale mapując vhd utworzone w2k8 R2 pod w7 diskpart napisał, żebym spadał na szczaw, bo on takiej wersji nie obsługuje. problemem jednak mógł być fakt, że jako ścieżkę podałem UNC – do przetestowania.

niemniej po otwarciu vhd z w2k8 R2 za pomocą gizmo [plik backupu], 2 plików nie udało się skopiować z dziwnym komunikatem ‘błąd dostępu podczas próby zapisu’. nie wiem czy wynika to z faktu, że to vhd z R2 czy z jakiegoś wewnętrznego uszkodzenia vhd [he?]… ale po co w ogóle taka zabawa?

o nowym winbackupie pisałem już kilka razy i nie mam o nim dobrego zdania. kolejny argument przeciw to niekompatybilność wersji – winbackup z w2k8 nie umie sobie poradzić z plikami z w2k8 R2 – w ogóle nie rozpoznaje tego jako backup. i tutaj kolejny problem – jak sobie radzić w takiej sytuacji? vhd są różne i różnie się zachowują [jak np. te dwa pliki, które nie chciały się skopiować]. w starych wersjach nie ma standardowego narzędzia do obsługi vhd no i w ogóle… nie istnieją scenariusze – nie tylko odzyskania systemu [ustawienia, rejestr, usługi] ale nawet głupich plików. w zasadzie cały winbackup sprowadza się do jednego scenariusza: *ten server*, *ta wersja*, *na tym sprzęcie*, *na tym dysq* – jakakolwiek zmiana i można zapomnieć o backupie. jego przydatność jest co najmniej niszowa. do przetestowania mam jeszcze czy gizmo widzi poprzednie wersje plików – bo przecież backup był robiony przyrostowo więc powinno być kilka wersji [vhd obsługuje shodow copy – tak jak zwykły dysk].

reasumując: windows backup – 3xNIE. qpując serwer warto zaopatrzyć się w jakiś soft do backupu a windowsowy używać tylko jako uzupełnienie – scenariusz “baremetal recovery” z obrazu.

ma ktoś warty polecenia, *darmowy*, soft do backupu, działający na w2k8 R2?

eN.

wtorek, 25 maja, 2010 - 17:50

wsh.run

Autor: nExoR | Kategorie: script/developer, tips'n'tricks

prosty scenariusz: skrypt logowania, uruchamiający bginfo. podstawowy problem w vbs: obsługa katalogów ze spacją. niestety przekazanie “c:\program files\systeinternals\bginfo.exe” z podobnie wyglądającymi parametrami jest upierdliwe – ile tych cholernych cudzysłowów jest potrzebne?

WShell.run """"&SUPPORT_DIR&"bginfo.exe"" """&SUPPORT_DIR&"wrkstations.bgi"" /accepteula /timer:0"

a cały skrypcik wygląda tak:

********************************************************************************  prepare server environment - processexplorer and bginfo on servers         **                                                                             **    author:         nexorek[at]gmail.com                                     **                             last change  25.o5.2kd                          **                                                                             ********************************************************************************

OPTION EXPLICIT
ON ERROR RESUME NEXT
CONST SERVER_DIR=\\FILESERVER\gpofiles$\
Dim SUPPORT_DIR
Dim FSO, file
Dim WShell

********************************************************************************                                 MAIN                                        ********************************************************************************
set FSO=CreateObject(Scripting.FileSystemObject)
Set WShell = WScript.CreateObject(WScript.Shell)
SUPPORT_DIR=WShell.ExpandEnvironmentStrings(%programfiles%)&\sysinternals\
check admin directory
if not FSO.FolderExists( SUPPORT_DIR ) then
  FSO.CreateFolder( SUPPORT_DIR )
end if
copy if not exist
iFCopy(bginfo.exe)
iFCopy(wrkstations.bgi)
iFCopy(procexp.exe)
WShell.run “”&SUPPORT_DIR&bginfo.exe”" “”&SUPPORT_DIR&wrkstations.bgi”" /accepteula /timer:0

********************************************************************************                              SUBS’N'FUNCS                                   ********************************************************************************
Sub iFCopy(sourceFile)
  if not FSO.FileExists( SUPPORT_DIR&sourceFile ) then
    FSO.copyFile (SERVER_DIR&sourceFile), SUPPORT_DIR, true
  else
   check version
    if strcomp( FSO.getFileVersion(SERVER_DIR&sourceFile),FSO.getFileVersion(SUPPORT_DIR&sourceFile) )<>0 then
      FSO.copyFile (SERVER_DIR&source), SUPPORT_DIR, true
    end if
  end if
End Sub

eN.

poniedziałek, 10 maja, 2010 - 10:58

w7 GodMode

Autor: nExoR | Kategorie: tips'n'tricks, windows

trzeba przyznać, że osoba, która wymyśliła taką nazwę dla tego triq miała fantazję (; trik jest prosty – załóż katalog o nazwie “GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}” – w jednym miejscu/jako jedna lista będą widoczne wszystkie ustawienia control panel’a.

przydatne (:

eN.

środa, 21 kwietnia, 2010 - 17:38

SharePoint nie pyta czy edytować dokument

Autor: nExoR | Kategorie: server, tips'n'tricks

Taki dziwny objaw: podczas otwierania pliq SP nie zadaje pytania czy plik ma być do edycji czy do odczytu – po prostu go otwiera. za chwilę oczywiście pokazuje się komunikat informujący, że plik jest tylko do odczytu i naciśnij guzik aby go edytować

wsserr01 

obrazek jest dla excela ale ten sam objaw jest dla czegokolwiek. po naciśnięciu ‘edit’ pojawia się ‘spadaj szczawiu’:

wsserr02

po długim googlaniu i bezefektywnych próbach wdrożenia najdziwniejszych konfiguracji w końcu udało mi się ustalić, któryż to z moich najulubieńszych programów jest winny – jak zwykle jest to IE. przez tyle lat i na prawdę ogarnięcie zasad działania tej aplikacji pozostaje dla mnie niemożliwe. rozwiązaniem jest… usunięcie site’u z ‘Trusted Sites’

wsserr03

nie chce mi się spędzać czasu nad netmonem i innymi wynalazkami, żeby dojść *czemu* tak się dzieje… ważne, że w końcu działa i póki co zachowuje się deterministycznie q: […póki co…]

eN.

środa, 21 kwietnia, 2010 - 14:42

WebDav – Sharepoint na w2k8R2

Autor: nExoR | Kategorie: server, tips'n'tricks, windows

Ponieważ już drugi raz zapomniałem – czas to sobie zapisać [*zapamiętać*]:

sharepoint nie korzysta z WebDav dostarczanego przez IIS – ma wbudowany własny mechanizm. w związq z tym nie trzeba instalować tego komponentu. co więcej – dla wersji x64, niewolno go instalować, ponieważ nawet jeśli jest wyłączony dla poszczególnych siteów, nie będzie działał komponent SP.

z emesowego Whitepaper - Understanding and Troubleshooting the SharePoint Explorer View:

WebDAV, IIS, and SharePoint

Many people are under the misconception that SharePoint uses the WebDAV functionality provided by IIS 6.0. Actually, SharePoint provides its own WebDAV implementation using the Stsfilt.dll ISAPI filter that is installed with both Windows SharePoint Services and SharePoint Portal Server. Enabling or disabling the WebDAV extension in IIS 6.0 has no effect on SharePoint functionality.

*UPDATE*

jest jeszcze jedna zabawa sprawa – jeśli site skonfigurowany jest *tylko* z SSL [require SSL] to przy próbie zmapowania dostaje się błąd ‘acc denied’. jeśli jest skonfigurowane jest dodatkowe dowiązanie [nie musi to być port 8o – ja wstawiłem 8o8] i odhaczy się ‘require SSL’ to polecenie “net use * https://sharepoint…” działa normalnie. gr8.

eN.

wtorek, 20 kwietnia, 2010 - 10:50

jak czytać błędy

Autor: nExoR | Kategorie: tips'n'tricks, windows

przypadkiem trafiłem na ciekawe wyjaśnienie numerków błędów. jeden z programów sypnął numerkiem ‘2147944309’ – co on oznacza? problem polega na tym, że niektóre programy podają w hexach inne w dzisiętnym. standardowo większość opisów posługuje się szesnastkowym. ten numerek przypomina dzisiętny, więc go przekonwertujmy:

2147944309 = 0x80070775

i taki błąd zaczyna przypominać coś, co się zna. ‘8007’ oznacza standardowy błąd Win32, pozostaje więc info dot. błedu ‘0775’. i pomimo, że winda posługuje się standardowo szesnastkowym, to narzędzie jakie jest w systemie wymaga podania dziesiętnego zapisu, a więc kolejne przeliczenie:

0x775 = 1909

no i pozostaje wykorzystać starego, ‘dobrego’ neta:

PS C:\>net helpmsg 1909
The referenced account is currently locked out and may not be logged on to.

eN.

czwartek, 8 kwietnia, 2010 - 12:17

jak usunąć SRP?

Autor: nExoR | Kategorie: tips'n'tricks, windows

SRP czyli w świecie sp/vista – Software Restriction Policy (w w7 pojawił się AppLocker) służą do nakładania pewnych ograniczeń dla aplikacji – głównie co może/nie może się uruchomić. jest to część GPO i można je usunąć w prosty sposób – klikając PGM na kontenerze ‘software restrictions’ i po prostu usnąć:

image 

jest tylko jedno małe ‘ale’… tego menu w GPO nie ma, jeśli GPMC/GPEdit uruchomiony jest na XP! a więc jeśli chce się usunąć SRP admintoolsy nie pomogą – trzeba się pofatygować na serwer.

eN.

środa, 31 marca, 2010 - 12:36

Dodawanie zaufanych adresów email do Safe Senders List w Outlook 2007 via GPO

Autor: marcins | Kategorie: tips'n'tricks

Pewnie każdy w firmie ma jakieś wewnętrzne systemy, które co jakiś czas spamują userów różnego rodzaju informacjami, przypomnieniami itp.. Składnia tych maili jest czasami tak pokraczna, że outlook kwalifikuje te wiadomości jako spam i wrzuca je sobie do junk mails.

 

Rozwiązanie problemu wygląda banalnie:  Za pomocą GPO dodać  własną safe senders list i wyeksportować ją do użytkowników.

 

A więc tworzymy nowe GPO, ładujemy templatke Outlk12.adm i przechodzimy do:

User Configuration->Policies->Administrative Templates-> Microsoft Office Outlook 2007->Tools | Options…->Preferences->Junk E-mail

Wybieramy Specify path to Safe Senders list, po czym wskazujemy lokalizacje pliku w którym będziemy trzymać ową listę, np.:\\domena.corp\NETLOGON\outlooksafesenderslist.txt

Owa lista to nic innego jak plik tekstowy, w którym w wierszach są wpisane zaufane adresy mailowe, np:

adres@domena.com

adres2@domena.corp

 

Warto się jeszcze zastanowić nad opcją: Overwrite or Append Junk Mail Import List,

która ustawia czy nasza lista ma nadpisać listę użytkownika, czy zostać dopisana do już istniejącej.

 

Podpinamy jeszcze tylko nasze GPO do odpowiednich OU i szczęśliwi, że udało się szybko rozwiązać zadanie zaczynamy je testować.

 

No i dupa. Okazuje się, że do poprawnego działania tego mechanizmu, należy jeszcze zmienić wartość rejestru na stacjach klienckich.

 

Do klucza:

HKey_Current_User\Software\Microsoft\Office\12.0\Outlook\Options\Mail

należy dodać wartość DWORD

JunkMailImportLists=1

 

Po wprowadzeniu tej modyfikacji rejestru, wszystko pięknie działa.

 

Samą modyfikację rejestru oczywiście najszybciej i najwygodniej zrobić za pomocą GPO.

Tutaj przydaje się  Windows 2008 i Group Policy Preferences, które w znaczny sposób ułatwiają  modyfikacje rejestru na końcówkach.

niedziela, 28 marca, 2010 - 16:47

BOOTMGR is missing: smutny żart microsoftu

Autor: nExoR | Kategorie: server, tips'n'tricks, windows

podczas przenoszenie konfiguracji z pojedynczego dysq na RAID przywitał mnie taki śliczny komunikat: “BOOTMGR is missing”. z podobnymi problemami borykałem się wiele razy, więc pomyślałem sobie “jakiś to problem”… szybko okazało się, że problem jest całkiem niebłahy, a inżynierowie eMeSa zrobili chyba wszystko, żeby to utrudnić.

jak wiadomo od visty/w2k8 zmienił się sposób obsługi startu systemu – zupełnie nowy bootmanager, obsługa GPT itp itd… w moim przypadq był to server w2k8 R2. podstawą jest oczywiście płyta instalacyjna serwera, odpalamy i… upsss…nie ma na płycie serwera opcji reperacji – to pierwsza miła niespodzianka. najwyraźniej ktoś wyszedł z założenia, że serwer się nie psuje albo że admin jako geek poradzi sobie z linii poleceń. no i co ma sobie nie poradzić? przecież wszystkie polecenia znam dobrze:

  • shift-F10 do konsoli
  • sprawdziłem katalog boot [nie ma]
  • skopiowałem pliki z CD do c:\boot
  • bootrec /reinstallbcd

ślicznie. tylko nie działa. no to następnym razem jeszcze /fixmgr oraz /fixboot [z bootrec].. nie działa… google, fora no i w sumie wszyscy podają takie same rozwiązania, i co by nie zrobić nic nie działa – wciąż wita mnie ten sam milusi komunikat. była nawet taka jedna podpowiedź “weź płytę z klientem, odpal, użyj opcji ‘repair startup problems’” – co za lamerka, no ale dobra. spróbowałem… i nadal nie działa.

aż nie trafiłem na tą instrukcję:

    1. Boot from your Windows Server 2008 R2 x64 DVD.
    2. Repair
    3. Command Prompt
    Note: I only had one drive and that drive was set for C: as  the boot so the setup was fairly basic… if your setup is more complex you may want to consider this a bit more… but it should still work.
    4. rename c:\boot\BCD bcd.old : this will backup your bcd file just in case you want it.
    5. Delete c:\boot\bcd
    6. Restart your computer
    7. Remove your WS2008R2 DVD and insert the W7×64 DVD.
    8. Boot from the DVD and do a repair.
    9. It will offer to repair automatically accept.
    10. Reboot and this is the "trick" boot the DVD again and do a repair.  Keep doing this process until it does not find anything wrong.
    11. Your server should boot again.

“wykonuj ten proces póty, póki nie wykryje więcej błędów” – WTF? to jakiś smutny dowcip? no ale kiedy nie ma się nic do stracenia [czasu i tak już straciłem ZA DUŻO] – porestartowałem sobie troszq…

…no i zadziałało! w sumie 4 restarty, 3 reperacje. O CO C’MON?

szukałem dobrego artu na temat reperacji BCD i tego, co się w zasadzie dzieje podczas owej reperacji z płyty – czemu wszystkie opisy pokazują narzędzie bootsect, bootrec, bcdedit, ale żaden nie wskazuje narzędzi wykorzystywanych podczas reperacji tak, jak się dzieje z GUI i w końcu czemu, do cholery czemu! na płycie serwera nie ma tego toola?

to się nazywa poprawić mechanizm bootowania? idealny materiał na podrążenie tematu i opisanie tego porządnie … tylko czasu brak no i jakiś rozwalony komp by się przydał – bo trzeba na czymś testy porobić [chyba wiem, jak to popsuć, ale na pewno na tym serwerze już nie będę testował (; ]

eN.

czwartek, 25 marca, 2010 - 17:57

mapdrive script:automatyzacja mapowania dysków z serwera plików

prosta idea [nie zawsze wykonalna] – wedle podręcznikowego przydzielania uprawnień i zarządzania grupami polega na tym, że dla każdego udziału na FS tworzona jest grupa security-domain local – np. Share_FS01_RW_public. tej grupie nadawane są uprawnienia [w tym przypadq RW] a całe zarządzanie przydzielaniem uprawnień polega na dodaniu grupy funkcyjnej do grupy dostępowej. przykład w praktyce:

  1. zakładam w AD jednostkę organizacyjną OU=AccessGroups
  2. zakładam w AD jednostkę organizacyjną OU=Accounting
  3. zakładam grupę funkcyjną security-global ‘Accounting’ i dodaję odpowiednich userów). te 3 kroki oczywiście definiują miniaturkę podstawowego środowiska lab
  4. księgowość musi mieć swój prywatny katalog na FS więc:
    1. zakładam grupę Security-Domain Local o nazwie “AG_FS01_RW_Accounting” w OU-AccessGroups – to przykładowa notacja która pozwala w łatwy sposób odróżnić grupy dostępowe od innych, zawiera nazwę serwera, którego dotyczy, uprawnienia [dzięki temu można łatwo odróżniać grupy RW od R] oraz jakiego udziału dotyczą.
    2. zakładam katalog ‘Accounting’ na FS01 i publiqję go jako ‘\\FS01\Accouting’
    3. jedyne uprawnienia jakie zakładam na katalogu to “authenticated users:M” na poziomie udziału oraz “AG_FS01_RW_Accounting:RW” na poziomie NTFS
    4. teraz aby nadać uprawnienia do katalogu wystarczy, że dodam grupę ‘Accounting’ do ‘AG_FS01_RW_Accounting’

wadą takiego rozwiązania jest niezliczona ilość grup w złożonym środowisq – a więc czasem podręcznikowe rozwiązanie nie może być zastosowane. zalet jednak jest bardzo dużo:

  • wszystko zarządzane z jednego miejsca za pomocą ADUaC bez potrzeby logowania/sprawdzania na serwerach plików
  • ..czyli centralizacja zarządzania uprawnieniami
  • łatwość delegacji zarządzania uprawnieniami
  • utrzymywanie spójnej, prostej struktury: przejrzystość
  • prostota automatyzacji mapowania: ujednolicone/uniwersalne skrypty mapowania
  • automatyczne mapowanie dysków dla użytkowników zaraz po dodaniu do grupy funkcyjnej

poniżej zamieszczam przykładowy skrypt logowania mapujący dyski, który ma możliwość mapowania na podstawie przynależności do grupy. ponieważ użytkownicy nie należą bezpośrednio do grupy dostępowej, sprawdzany jest drugi poziom zagnieżdżenia – atrybut memberof. jest możliwość włączenia rekursywnego sprawdzania zagnieżdżenia ale ma to kilka mankamentów:

  • jest dość powolne w realnym środowisq, gdzie grup jest sporo
  • istnieje niebezpieczeństwo przypadkowego zmapowania katalogu z powodu powiązań pomiędzy grupami

******************************************************************************** map network drives lib for logon script                                     **   can be used to map multiple drives. possible error handling               **   user must have proper permissions - providing credentials not handled     **                    nexorek(at)gmail.com           25.iii.2kd                **EXAMPLE USE:                                                                 **addMapping “m”,”\\192.168.1.100\c$”                                          **addMapping “n”,”\\192.168.1.100\d$”                                          **mapNetworkDrives                                                             **                                                                             **EXECUTE WITH ERROR HANDLING:                                                 **addMapping “m”,”\\192.168.1.100\c$”                                          **addMapping “n”,”\\192.168.1.100\d$”                                          **if mapNetworkDrives<>0 then                                                  ** wscript.echo “do something with “&mapNetworkDrives                          **else                                                                         ** wscript.echo “netdrives mapped successfully”                                **end if                                                                       **                                                                             **MAP USER-named DRIVE                                                         **addMapping “h”,”\\server\share\”&logonName                                   **                                                                             **CONDITIONAL MAP DRIVE ON USER MEMBERSHIP                                     **if isMember(”group name”) then addMapping “s”,”\\server\sharename”           **                                                                             ********************************************************************************
ON ERROR RESUME NEXT
Const FileServer=\\put.servername.here

Dim dictMappings
Dim oADSystemInfo
Dim oUser, groupList, loginName, dictGroups, g
dim tempname

********************************************************************************                                 MAIN                                        ********************************************************************************used for store information about mapping drives
set dictMappings=CreateObject(Scripting.Dictionary)

Object for user/computer information
set oADSystemInfo=CreateObject(ADSystemInfo)
USER
set oUser=GetObject(LDAP://&oADSystemInfo.UserName)
loginName=oUser.SAMAccountName
USER GROUPS MEMBERSHIP
set dictGroups=CreateObject(Scripting.Dictionary)
groupList=oUser.getEx(memberOf)
for each g in groupList
  if not strcomp(lcase( left( getObject(LDAP://&g).objectCategory,8) ),cn=group ) then
    enumGroupsInGroup(LDAP://&g)
  end if
  tempname=lcase(mid(g,4,InStr(g,,)-4))
  if not dictGroups.exists(tempname) then dictGroups.add tempname, g
next

PUT MAPPINGS HERE. example:
if isMember(AG_FS01_RW_Accounting) then addMapping i,\\FS01\Accounting
mapNetworkDrives

********************************************************************************                              SUBS’N'FUNCS                                   ********************************************************************************
Sub addMapping(drvLetter, srvPath)
  dictMappings.add ucase(drvLetter)&:, srvPath
End Sub

Function mapNetworkDrives()
  ON ERROR RESUME NEXT
  Dim wshNetwork
  Dim AllDrives, i

  Set WshNetwork = WScript.CreateObject(WScript.Network)
  Set AllDrives = WshNetwork.EnumNetworkDrives()

  For each i in dictMappings
    unmap before mapping - just to be sure that drive letter is not used
     if dictMappings.Exists(i) then
       WShNetwork.RemoveNetworkDrive AllDrives.Item(i)
     end if
    WShNetwork.MapNetworkDrive i, dictMappings(i)
    mapNetworkDrives=cstr(hex(err.number))
  next
End Function

Function isMember(gName)
  if dictGroups.Exists(lcase(gName)) then
    isMember=TRUE
  else
    isMember=FALSE
  end if
End Function

Sub enumGroupsInGroup(gname)
  ON ERROR RESUME NEXT
  Dim grpList, gentry

  grpList=getObject(gname).getEx(memberOf)
  for each gentry in grpList
    if not strcomp(lcase( left( getObject(LDAP://&gentry).objectCategory,8) ),cn=group ) then
      dictGroups.add lcase(mid(gentry,4,InStr(gentry,,)-4)), gentry
      next line is recursion for multilevel nesting. for performance purposes assumed 2-level structure
      so it is disabled. there should be no more then second-level nesting for permissions
      in fact it can be even dengerous - someone may have accidently mapped drive  
      enumGroupsInGroup(”LDAP://”&gentry)
    end if
  next

End Sub

jak się okazuje, czasem teoria przekłada się na praktykę – mówię tu o podręcznikowym projektowaniu grup (global/domain local i standardowe AGDLP).

eN.

środa, 17 lutego, 2010 - 13:24

bypass proxy for local address – nie działa

Autor: nExoR | Kategorie: tips'n'tricks

jest sobie aplikacja wewnętrzna, działająca… na wewnętrznych serwerach – załóżmy, ze na server.local.domain. po zalogowaniu do aplikacji okazuje się, że część jej się nie ładuje. wyłączamy proxy, restart przeglądarki, wszystko działa. a-ha. wina proxy. tylko zaraz! przecież jest ślicznie zaznaczona flaga “bypass proxy for local addresses”. znajduję artykuł na supporcie, informujący, że ta flaga działa tylko dla krótkich nazw.

niewątpliwie jest to pasqdztwo ze strony eMeSów, że mimo, iż od długiego czasu korzystają z DNS/TCPIP jako podstawowej warstwy, zostawiają co-i-rusz takie paszkwile – czy to przy logowaniu czy w takich sytuacjach – okazuje się, że stare NETBiosowe nazwy mają pierwszeństwo nad pełnymi FQDN czy UPN… no ale nic to. przecież jest lista wyjątków.

dopisuję do wyjątków serwer – żeby zawsze pomijał proxy. sytuacja się nie zmienia – nadal aplikacja nie działa prawidłowo. zacząłem już przeklinać IE ale okazało się, że moje emocje były przedwczesne, ponieważ to nie jest wina IE. po zbadaniu na serwerze logów okazuje się, że durnym komponentem jest java.

no jakże, by inaczej – aplikacje pisane w javie to horror, jej niekompatybilność między wersjami to horror, teraz do listy można jeszcze dopisać konfigurację. teoretycznie w konfiguracji jest opcja “use browser settings” – najwyraźniej jednak nie potrafi wykryć list wyjątków. no więc work-around jest taki, żeby proxy dla java po prostu ustawić na stałę i WOA! nawet jest flaga w konfiguracji “bypass for local” i nawet działa! szczyt technologii – to teraz trzeba przekonfigurować kilkadziesiąt kompów ):

JAVA SUX

eN.

środa, 17 lutego, 2010 - 10:22

Polisy komputera nie są pobierane na maszynie XP Mode

Autor: nExoR | Kategorie: tips'n'tricks, w-files

kiedy sprawdzi się GPResult’em maszynę XP Mode dodaną do domeny okazuje się, że polisy użytkownika są propagowane, jednak w części komputera … pustka – nawet nie ma listingu polis! zupełnie jakby ich w ogóle nie było [w-files O_o].

dziwne.. nie wiem czemu nie potrafi ich nawet odczytać, ale powodem jest to, że maszyna jest za NATem – standardowe ustawienie trybu sieci dla XP Mode. po zmianie działania sieciówki na bezpośrednie – wszystko hula jak powinno.

…czyli jeśli postawię maszyny na NATem – np. w branch office, to nie będą pobierały polis?

eN.

czwartek, 11 lutego, 2010 - 13:19

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.

sobota, 6 lutego, 2010 - 0:41

Vmware server 2.0 i Unknown (Invalid)

Autor: marcins | Kategorie: tips'n'tricks

Czasami się zdarza w vmware server 2.0, że po przeniesieniu wirtualnej maszyny z jednego komputera na inny, wyskakuje taki błąd przy próbie dodania jej do inventory:

Unknown (Invalid)

 

Przyczyną tego błędu jest to, że VM’ka została utworzona w systemie z ustawionymi lokalami na np. polski, i przeniesiona na system gdzie są ustawione inne lokale, np. angielskie

 

Wystarczy wtedy zmienić w plikach vmx (oraz vmsd) linijkę:

.encoding = “<tutaj kodowanie>”

 

Czyli np. .encoding = “windows-1252″ na .encoding = “windows-1250″

 

Potem wystarczy tylko dodać ponownie VM’ke do inventory i powinno wszystko działać.

środa, 3 lutego, 2010 - 14:09

modyfikacja grup mailowych via powershell

q pamięci, odnośnie poprzedniego wpisu:


$searcher=[ADSISearcher]LDAP://DC=domain,DC=name
$searcher.Filter=(&(ObjectClass=group)(name=STR*)) //wszyskie grupy zaczynajace sie na dany ciąg
$searcher.SearchRoot=OU=mail groups,OU=my ou,DC=domain,DC=name
$res=$searcher.FindAll()
foreach ($r in $res) {
    $grp=[ADSI]$r.path;
    $grp.mail=$($grp.mailnickname)@domain.name;
    $grp.putex(2,proxyAddresses,@(SMTP:$($grp.mailnickname)@domain.name));
    $grp.setinfo()
}



POWERSHELL RLZ! q:

*UPDATE

zostałem poproszony o małe wyjaśnienia niniejszym jakie ciekawostki można wyłapać dla początqjących. samych poleceń ADSI nie będę wyjaśniał, sqpię się na składni PS.

jednym z podstawowych problemów na początq sprawiają najprostsze rzeczy – np. wypisywanie na ekran. z punktu widzenia składni najciekawsze polecenie to “$grp.putex(2,"proxyAddresses",@("SMTP:$($grp.mailnickname)@domain.name"));”. postaram się wyjaśnić co tu się dzieje.

wypisanie zmiennej na ekran jest proste:

echo $zm

ale przy dwóch już robi się dziwnie, ponieważ:

echo $zm1 $zm2

wypisze obie.. ale w oddzielnych liniach. znakiem konkatenacji jest niby ‘+’ ale dodanie

echo $zm1 + $zm2

spowoduje wypisanie 3ech linii – gdzie ‘+’ jest normalnym znakiem. odpowiedz jest dość prosta: wystarczy zamknąć zmienne w cudzysłowach:

echo “$zm1 $zm2”

można też zastosować zapis znany z c++:

echo (“{0} {1}” –f $zm1,$zm2)

ciekawie się robi, kiedy wartość ma być  lub wartością atrybutu obiektu. PS po ‘$’ automatycznie kończy wyliczanie po pierwszym znaq specjalnym – np. kropka. w przedstawionym skrypcie wypisać należy wartość atrybutu ‘mailnickname’. wypisanie go w ten sposób:

echo “$grp.mailnickname”

wypisze $grp a na koniec doda ciąg “.mailnickname”. w związq z tym trzeba zadeklarować zmienną tymczasową, przyjmującą wartość wyliczaną:

echo “$($grp.mailnickname)”

trochę o ADSI musi być – ‘putex’ służy do ustawiania atrybutów wielowartościowych i przyjmuje 3 parametry. ten trzeci z nich to ostateczna wartość – zasady są dokładnie takie same jak przy wypisywaniu na ekran – przedstawione powyżej. dodatkowo, ponieważ atrybut jest wielowartościowy, musi to być tablica. stąd cała postać zmiennej przekazywanej do “putex” musi wyglądać tak:

@("SMTP:$($grp.mailnickname)@domain.name")

gdzie ‘@’ oznacza deklarację tablicy, potem jest ciąg, który zawiera jedną wartość wyliczaną: $($grp.mailnickname) . przykładowy output: [jednoelementowa tablica] “SMTP:nexor@domain.name”

eN.

wtorek, 2 lutego, 2010 - 8:56

Bardzo wolno działające RDP

Autor: marcins | Kategorie: tips'n'tricks, windows

Ostatnio przyjechał do nas projektor Dell 4610X - małe czarne pudełko z antenką wifi.

Działa to w ten sposób, że użytkownik łączy się za pomocą przeglądarki z urządzeniem, ściąga aplikacje, uruchamia … i już można prowadzić prezentacje wyświetlając jednocześnie obraz z 4 komputerów - fajnie….. fajnie by było… gdyby  nie to, że wpadliśmy z kumplem na pomysł  aby przetestować czy ta aplikacja będzie działać z maszyn w oddziale z innego miasta (oddziały połączone dedykowanym łączem, na brzegach ISA 2006) i czy nie trzeba będzie rzeźbić czegoś na firewallach.

Tak więc, za wiele nie myśląc, otworzyliśmy pierwszą lepszą aktywną sesję RDP z maszyną z innego miasta, uruchomiliśmy przeglądarkę, ściągnęliśmy soft, odpaliliśmy i …. świat zwolnił - praca po RDP przypominała pracę na modemie 56K z włączonymi wszystkimi wodotryskami.  Ekran odświeżany co kilkanaście sekund, reakcja myszki nie wiele szybsza. Mówiąc krótko - nie da się pracować.

Eeee - pomyśleliśmy - pewnie trafiliśmy akurat na jakiś pik, albo chłopaki po drugiej stronie akurat coś robią na serwerze. Spróbujmy na innym… a więc szybkie logowanie, przeglądarka, uruchomienie softu …. I kurde znowu to samo - wszystko zwalnia niemiłosiernie …  :/

 

Podsumowując: rozwalone dwa serwery produkcyjne w niewiele ponad 2 minuty - myślę, że to całkiem niezły wynik ;-)

 

No ale koniec śmiechów - trzeba to przecież jakoś naprawić.

 

Oczywiście próba odinstalowania aplikacji nic nie pomogła, wyczekiwane okienko czasowe  na  restart serwerów również. Fiaskiem skończyły się też telefony do supportu Dell’a i zaklinanie laleczki voodoo.

 

Dwa dni później, po postawieniu testowej wirtualki i prześledzeniu zmian jakie wprowadziła ta aplikacja do systemu doszedłem co jest grane. Przyczyną okazało się zmienienie poziomu akceleracji dla RDP Display Driver (RDPDD.DLL)  przez aplikacje z projektora Della, a dokładniej nie przywracanie jej wcześniejszego stanu po odinstalowaniu aplikacji .

 

Wartość tą ustawia się w rejestrze, w gałęzi:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RDPDD\Device0

 

Wystarczy zmienić wartość Acceleration.Level (DWORD) na 0

0 - Pełna akceleracja

5 - Brak akceleracji

 

To tyle, jedna mała aplikacja wycięła mi dwa dni życia.

 

Swoją drogą, to nie udało nam się podłączyć projektora między miastami, ale to wbrew pozorom temat na zupełnie inną opowieść.

 

Mały quiz na koniec: która z sytuacji, z opisanych w tej historyjce, nie powinna się nigdy wydarzyć i świadczy o niekompetencji adminów? ;-)

poniedziałek, 1 lutego, 2010 - 15:30

dodatki exchange 2k3 dla w7×64

Autor: nExoR | Kategorie: HOWTO, exchange, tips'n'tricks

trochę przewrotny tytuł ponieważ de facto nie udało mi się znaleźć rozszerzenia dla ADUaC na w7 x64… jest manager: http://www.microsoft.com/downloads/details.aspx?familyid=3403d74e-8942-421b-8738-b3664559e46f&displaylang=en który można zainstalować wymuszając z linii poleceń ‘msiexec /i ESMVISTA.MSI /qb+’ ale nie instaluje/nie działają [nie dochodziłem] uzupełnienia dla dsa.msc.

poza tym… kiedy próbuje zrobić to z interfejsu i tak dostaje acc denied - w końcu tym zajmują się ludki w centrali a ja powinienem im tylko przesyłac informacje komu mają założyć skrzynkę/zrobić skrzynkę mail-enabled. okazuje się, że te uprawnienia są wyłącznie do interfejsu, bo kiedy się pogrzebie w parametrach obiektu można zrobić większość operacji ręcznie - dodać alias, zmusić skrzynkę do mail-enabled etc. wystarczy ładnie uzupełnić pola obiektu:

  • .mail - wypełnia się normalnie z interfejsu dsa.msc
  • .mailNickName - właściwa nazwa usera używana przez Exchange. prefix emaila
  • .proxyAddresses - tutaj są wszystkie maile usera - a więc i aliasy. podstawowy powinien być zapisany dużymi literami: SMTP:user@email.addr a pozostałe małymi: smtp:user@different.addr

et voila! wcale nie dużo roboty. można sobie oskryptować i zapomnieć o interfejsie. to, czy exchange RUS dotknął obiektu będzie widoczne, ponieważ pojawią się dwa atrybuty - msExchALObjectVersion dbający o numer wersji RUS oraz msExchPoliciesIncluded - wskazujący na obiekt polisy dla obiektu.

eN.

środa, 27 stycznia, 2010 - 16:37

DPM 2010 – raportowanie i błędy

Autor: domel | Kategorie: article, security, server, tips'n'tricks

Po świeżej instalacji DPM 2010 beta wszystko działało dobrze tylko raportowanie się wywalało. Przy próbie uruchomienia jakiekolwiek raportu dostawałem śliczny błąd:

An error has occurred during report processing. (rsProcessingAborted)
Cannot impersonate user for data source ‘DLS’. (rsErrorImpersonatingUser)
Log on failed. (rsLogonFailed)
Logon failure: the user has not been granted the requested logon type at this computer. (Exception from HRESULT: 0×80070569)

Chwila grzebania i wymyśliłem, że źródło danych dla raportów jest źle skonfigurowane. Niestety URL do Report Managera nie jest standardowy w DPM2010, więc znalazłem go w konfiguracji Reporting Services:

image

I rzeczywiście nie było źródła DLS, ale za to było jakieś inne. sprawdziłem konfigurację DPMReporterDataSource i wyciągnąłem z niego connection string:

image

Wyglądał on tak: data source="DPM\MSDPMV3Beta1EVAL";persist security info=False;initial catalog=DPMDB 

Więc stworzyłem nowe źródło i nazwałem je DLS

image

Zwróćcie uwagę, że raporty uruchamiają się w kontekście osoby, która go generuje (opcja Windows Integrated Security)

Z tak skonfigurowanym źródłem:

image

Teraz trzeba zmodyfikować każdy raport ustawiając nowo stworzony obiekt jako źródło danych (we właściwościach każdego raportu wybieramy Data Source i klikamy Browse):

image

I po takich paru prostych zabiegach raportowanie śmiga aż miło :)

image

czwartek, 21 stycznia, 2010 - 16:28

Instalacja agentów DPM – Error 270

Autor: domel | Kategorie: security, server, tips'n'tricks

Mały tip ku pamięci – jeśli dodajesz agentów DPM-a do serwera i mimo komunikatu, że dołączenie (attatch) udał się a potem dostajesz error 270:

DPM Error

To upewnij się, że:

  • masz dodane wyjątki do Firewalla (polecenie SetDPMServer.exe to robi na końcówce)
  • Konto komputera na którym stoi serwer DPM-a ma prawo do dostępu do końcówek z sieci (Prawo “Computer Configuration\Security Settings\Local Policies\User Rights Assignment\Access this computer from the network”)