CMTrace Push Via GPO

Kaido Järvemets ütleb, et kui sul on SCCM siis kogu konfiguratsioon tuleks läbi selle välja pushida. Siiski on mõned tegevused mida armastan teha läbi GPOde. Mulle meeldib nii teha kuna see on lihtsam ja minujaoks mugavam. Muidugi on tõsi, et nii talitades puudub mul igasugune tagasiside paigalduse edukuse osas aga mõndade tegevuste puhul on see minu jaoks täiesti aktsepteeritav.

System Center 2012 R2 Configuration Manager: Mastering the Fundamentals 3rd Edition

See raamat soovitab pushida CMTrace kõikidesse masinatesse default logide vaatamise programmiks. Kuna SCCM adminile on .log failid väga oluline informatsioon siis tundus see mõte igati mõistlik enda prodcution keskkonnas ära teha aga mitte läbi SCCMi vaid läbi GPO.

Tegin CP CMTrace  nimelise GPO ja hakkasin ehitama (kasuan GPOde puhul alati eesliideseid CP – Computer policy, UP – User policy, CUP – Cumputer&User policy, nii talitades on parem ülevaade ja saab GPO panna alati subjektile võimalikult lähedale). Kõigepealt tuleb CMTrace.exe liigutada kohalikku masinasse, seda saab teha:

Computer Configuration > Preferences > Windows Settings > Files

cmtrace.PNG
Siin ma kopeerin faili võrgukettalt kohalikku masinasse.

Windowsi registri muudatuste jälgmiseks on mugav kasutada sellist utiliiti nagu fc.exe. Kui CMTrace esimest korda käivitada pakub ta võimalust muuta ennast default logide vaatamise rakenduseks. Kuidas ma vajalikud seaded teada saan? Lihtne, võta lahti regedit.exe, võta hive HKCU, tee paremklõps ja Export. Nimeks panen näiteks HKCU-1st.reg. Siis võtan lahti CMTrace ja muudan ta default logide vaatamise rakenduseks. Järgmiseks teen HKCUst järgmise ekspordi ja panen nimeks HKCU-2nd.reg. Nüüd võrdlen mõlemaid faile läbi CMD

FC HKCU-1st.reg HKCU-2nd.reg > Result.txt /u

Tulemuse põhjal tegin GPOs järgneva registry settingute pushi:

Computer Configuration > Preferences > Windows Settings > Registry

regsett.PNG

Kuna soovisin, et kogu policy oleks arvutipõhine, siis tegin muudatused HKLM alla aga vajadusel saaks ka teha HKCU alla.

Nüüd on mul CMTrace ühe GPO all. Panen policy mõne OU alla ja kõik liikmed hakkavad .log faile avama CMTracega, täpselt see mida vaja 🙂

POSH (aka PowerShell) – Funktsioonid

Märkasin, et minu töökeskonna SCCMis on Obsolete Clientide arv 36 ja tänu sellele hakkas uuenduste compliance langema. Võtsin obsolete hostide nimekirja ja koostasin excelis skripti, mis testib kõik hostid üle ja sülitab väljundi ühte txt faili kust näeb kohe ära, mis hostid võrgus kättesaadavad on ja millised mitte. Selle info alusel saab juba konkreetsemalt mõne masina ette võtta ja uurida, miks SCCM klient obsolete staatuses on ja teha vastavad parandused.

$space=" "
$hostname="16-CXC4511D0P"
$result= Test-NetConnection $hostname | Select-Object -ExpandProperty pingsucceeded
$hostname+$space+$result | Add-Content C:\Users\$env:username\Desktop\obsolete_hosts.txt
$hostname="14-8PY3P56"
$result= Test-NetConnection $hostname | Select-Object -ExpandProperty pingsucceeded
$hostname+$space+$result | Add-Content C:\Users\$env:username\Desktop\obsolete_hosts.txt
...etc

Juhuslikult jäi mulle ette artikkel Introduction to Advanced PowerShell Functions.

Excel ja POSH sobivad üsna hästi kokku, valemite abiga saab suvalise listi teha scriptiks ja siis copy & paste POSHi. Ühekordsete tegevuste puhul on selline lahendust isegi talutav. Pidevalt korduvate tegevuste puhul peaks koostama POSH funktsioone, mis hoiavad üsna tublisti edaspidi aega kokku. Loetud artiklist inspireerituna otsustasin proovida Excelis koostatud script muuta POSH funktsiooniks. Peale paari tunnist nokitsemist oli tulemus käes ja olin Excelist selle ülesande täitmisel vaba. Koostatud funktsioone saab vajadusel ka permanentselt powershelli sisse integreerida, mis on samuti suureks plussiks. Funktsioon ise kukkus välja selline:

Function Test-NetStatus 
{
 [CmdletBinding()]
 Param(
[Parameter(Mandatory=$true,ValueFromPipeLine)][String]$ComputerName)
Process 
 {
$aaa = "Host is "
$bbb = " --- "
$ccc = " -- "
$result = Test-Connection -ComputerName $ComputerName -Count 1 -Quiet -ErrorAction SilentlyContinue
If ($result -eq "True") {$result = "Online"}
Else {$result = "Offline"}
IF ($result -eq "Online") {Write-host $aaa$result$bbb$computername -ForegroundColor Green}
Else {Write-host $aaa$result$ccc$computername -ForegroundColor Red}
 }
}

PasteBin link

Kui see plokk powershelli sööta tekib uus käsk nimega “Test-NetStatus”. Funktsiooni koostamise ajal oli minu jaoks kõige olulisem, et funktsioon aktsepteeriks pipeline inputi st. saab sööta sisse korraga rohkem kui ühe hosti.

Näiteks on mu töölaual hostid.txt fail, järgneva sisuga:

127.0.0.1
227.0.0.1
8.8.8.8
err.ee
www.err.ee
www.neti.ee
www.neti.com
Test-PC

Nüüd söödan need hostid vastloodud funktsiooni sisse:

Get-Content "C:\Users\Taunov\Desktop\Hostid.txt" | Test-NetStatus

Skript ise-enesest on kiire ja tõhus ja pikalt tulemust ootama ei pea. Ehk on see kellegile veel abiks peale minu 🙂