cykl technologiczny dot. wdrożenia Windows 7

w sierpniu odbędzie się cały cykl spotkań Live Meeting, otwarty dla wszystkich zainteresowanych, dotyczący wdrożeń Windows 7 – od podstaw bo wykorzystanie zaawansowanych narzędzi typu SCCM.

w-files też będzie miał swój wkład w całe zdarzenie, ponieważ d0m3l i ja rozpoczniemy całość dwoma spotkaniami – 3 i 5.o8 przedstawiając podstawowe informacje dot. instalacji w7 [d0m3l] i podstawowe informacje dot. migracji i wdrożenia w firmie [nXr].

oficjalny news jest tu

zapraszam – będzie można obejrzeć nasze śliczne facjaty lajf (;

eN.

niespodzianka

taki wesoły komunikat przywitał mnie po zalogowaniu na wXP SP3:

image

przez chwilę komputer zaczął zachowywać się dziwnie, po dwóch restartach można już było zalogować się normalnie. a w logu jak zwykle cisza i spokój… wtf?

eN.

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”””

Puste konsolki mmc

Ostatnio, przy zabawię z ISA 2006 (Windows 2003 R2 SP2) pojawił mi się dziwny problem – zniknęły pola w konsolce mmc. Drzewko było widoczne, ale nie można było zobaczyć jakiegokolwiek ustawienia konfiguracji:

Podobny problem spotkał konsolkę mmc services.msc:

Google radzi w takich wypadkach uruchomić, vbscript.dll, oraz mshtml.dll

regsvr32 jscript.dll & regsvr32 vbscript.dll & regsvr32 mshtml.dll

Niestety nie pomogło.

Moją uwagę jednak zwróciło to, że powinniśmy przerejestrować komponenty odpowiedzialne za wyświetlanie html-a w systemie, razem ze skryptami. Chwilka zastanowienia, szybki rzut oka na logi systemowe – i tak, ostatnio z aktualizacji spłynął IE 8. Po odinstalowaniu, sytuacja wróciła do normy – konsolki zaczęły się wyświetlać normalnie.

pedanteria niepożądana

prosty search po obiektach w AD, które mają włączoną flagę niewygasania hasła:

$searcher = New-Object DirectoryServices.DirectorySearcher([ADSI]"LDAP://OU=PL,OU=Country,DC=domain,DC=test")
$searcher.filter = "(&(objectCategory=User)(userAccountControl:1.2.840.113556.1.4.803:=65536))"
$searcher.propertiesToLoad.add("sAMAccountName")
$searcher.propertiesToLoad.add("displayname")
$searcher.propertiesToLoad.add("sn")
$searcher.propertiesToLoad.add("distinguishedname")
$s=$searcher.findall()
echo *************************

foreach($a in $s) {
    $i=$a.Properties
    echo "[$($i.sAMAccountname)] , $($i.displayName) , $($i.sn), $($i.distinguishedName)"
}

i okazuje się, ze na ekranie pustka… wyświetlają się tylko pola ‘sn’. WTF?

problemem jest pedanteria i używanie małych/wielkich znaków – okazuje się, że PS przyjmuje wyłącznie małe literki:

echo "[$($i.samaccountname)] , $($i.displayname) , $($i.sn), $($i.distinguishedname)"

pffff…

eN.

BCD i skrypty

Totalny w-file tym razem. Tyle, że rozwiązany :)

Problem – zautomatyzować operację dodawania wpisów w BCD, żeby skryptem dodawać Pingwina do boot menu w Windows 7.

Pierwszy krok prosty: dodajemy wpis dla grub4dos – http://grub4dos.sourceforge.net/wiki/index.php/Grub4dos_tutorial#Booting_GRUB_for_DOS_via_the_Windows_Vista_boot_manager

Teraz wypada by to przenieść na inną maszynę – chwilka przekopywania się przez dokumentację i okazuje się, że BCDEdit umożliwia import i export ustawień. piknie – robić backup i potem go odzyskać na innej maszynie. Niestety nie działa. Z tego prostego powodu, że wpis dla W7 nie ma GUID {current}, tylko jakiś dziwoląg – niestety GUIDy są generowane pseudolosowo. Efekt: pingwin się podnosi, Windows nie ^^

Rozwiązania są dwa:

1. Wykorzystać WMI i BCDProvider (http://msdn.microsoft.com/en-us/library/aa362675(v=VS.85).aspx) i można zrobić tak (wymaga wcześniejszego dodania wpisów):

set args = WScript.Arguments
num = args.Count

if num <> 1 then
  WScript.Echo "Usage: CScript \nologo [Menu Selection]"
  WScript.Quit 1
end if

MenuPick=args.Item(0)

Const BcdLibraryString_Description = &h12000004
Const BootMgrId = "{9dea862c-5cdd-4e70-acc1-f32b344d4795}"
Const DefaultType = &h23000003
Const WindowsImages = &h10200003

strComputer = "."
Set objStoreClass = GetObject("winmgmts:{(Backup,Restore)}\" & _
strComputer & "rootwmi:BcdStore")
objStoreClass.OpenStore "", objStore
objStore.EnumerateObjects WindowsImages, colObjects
For Each objObject in colObjects
  objObject.GetElement BcdLibraryString_Description, objElement
  If Instr(objElement.String, MenuPick) Then
    objStore.OpenObject BootMgrId, objBootMgr
    objBootMgr.SetObjectElement DefaultType, objObject.ID
  End If
Next

2. wykręcić pętlę w CMD:

for /f "tokens=3" %%a in ('bcdedit -create -d "PJWSTK Linux"  -application bootsector') do set guid=%%a
bcdedit /set %guid% device boot
bcdedit /set %guid% path grldr.mbr
bcdedit /displayorder %guid% /addlast

działa pięknie – po prostu pobiera trzecie słowo z outputu BCDEDIT – to ZAWSZE jest GUID :)

teraz można to wrzucić jako cmd /c “%scriptroot%bcd.cmd” do Task Sequence w MDT i mamy zautomatyzowane dodawanie pingwinów na W7 :D

PS. warto pamiętać, ze sysprep kasuje zawartość BCD :)

ping to file

taka mała piątkowa gimnastyka.

krótki kod, powalający sprawdzić czy host żyje i zapisać wyniki do pliq.

Get-Content .hostyerr.txt | %{ $out=`ping $(($_).trim()) -n 1` ; if( ($out[5]).contains("0% loss")) {echo $_}} >hostsok

nie jest to rozwiązanie idealne, ale co fajnego:

  • dla zmiennej można przypisać wynik działania programu – używa sie tych ciapek w lewym-górnym rogu [jak się nazywają?]
  • znów wszystko można zrobić w jednej linijce.

zamiast ‘contains’ lepiej używać –match ale to kiedyś indziej bo…

czas na weekend.

eN.