OT:czemu ludzie wierzą w dziwne rzeczy?
polecam dwie fajne prezentacje TED (:
eN.
jakiś czas temu pisałem o fajnym narzędziu do sprawdzenia uprawnień w AD – AD ACL Scanner. chciałem użyć go do przeniesienia uprawnień między domenami… i okazało się, że nie jest to wcale takie proste:
oto szkic skryptu, który potrafi zaciągnąć plik z ADADCLscan i przenieść do innej domeny. to, co trzeba zrobić przed jego użyciem to:
param( [parameter(ParameterSetName="FILE",Mandatory=$true,Position=0)][string]$fileName ) import-module ActiveDirectory $AD_ACLS=import-csv $fileName -delimiter ';' -header "OU","Trustee","Right","inheritance","objectTypeGUID","InheritedObjectTypeGUID","objectACEFlags","AccessControlType","isInherited","inheritanceFlag","propagationFlags" foreach($ACLentry in $AD_ACLS) { $grpSID=new-object System.Security.Principal.SecurityIdentifier (get-adgroup $ACLentry.trustee).SID $objTypeGUID=New-Object guid $ACLentry.objectTypeGUID $inheritedOTGUID=New-Object guid $ACLentry.InheritedObjectTypeGUID $ace=New-Object System.DirectoryServices.ActiveDirectoryAccessRule( $grpSID, $ACLentry.right, $ACLentry.AccessControlType, $objTypeGUID, $ACLentry.inheritance, $inheritedOTGUID ) $acl=get-acl AD:$($ACLentry.OU) $acl.AddAccessRule($ace) set-acl -AclObject $acl AD:$($ACLentry.OU) }
skrypt jest bardzo prymitywny – np. zakłada, że uprawnienia są tylko dla grup a nie dla użytkowników czy komputerów, nie ma obsługi błędów, etc – niemniej pokazuje kilka ważnych elementów: jak wygląda pełny nagłówek, w jaki sposób korzysta się z cmdletów ACL.
eN.
jak rozpoznać kartę WiFi?
scenariusz: trzeba napisać skrypt, który będzie wyłączał rejestrację DNS dla interfejsów LANowych. służy do tego metoda SetDynamicDNSRegistration klasy Win32_NetworkAdapterConfiguration. pozostaje problem – jak znaleźć owe interfejsy LANowe, bo zwykłe wylistowanie interfejsów pokaże ich multum… są dwa warunki, które trzeba sprawdzić – odfiltrować te, które nie są IPEnabled oraz te, które nie są Wired. i tu się zaczynają schody – IPEnabled to parametr klasy Win32_NetworkAdapterConfiguration a typ interfejsu pokazuje atrybut AdapterTypeID klasy Win32_NetworkAdapter.
sprawdzenie obu tych warunków byłoby niemożliwe [mega-złożone] gdyby nie klasy asocjacyjne – w tym przypadku Win32_NetworkAdapterSetting, która łączy obie wcześniej wymienione. klasy asocjacyjne pobierają atrybuty dla obu klas dla danego urządzenia i publikują je w dwóch gałęziach – element oraz setting. skrypt finalnie wygląda tak:
proste, nie? a teraz ciekawostka na koniec. na MSDN wyraźnie i jasno opisane są 'adaptertype’ oraz 'adaptertypeid’.. a oto jak przedstawia się moja karta WiFi /:
PS C:\_ScriptZ> .\setDynDNSReg.ps1
[debug] adapter type: Ethernet 802.3
[debug] zmieniam parametr dla: [00000000] Karta Intel(R) Centrino(R) Wireless-N 1000
eN.