Outlook2016 sigantuur ADinfo põhjal kasutades powershelli

Seoses W10 juurutamisega lõpetas koostöö üks vbs logon skript, mis automaatselt outlooki signatuure ehitas. Seega sai natuke nokitsetud, et see powershelli üle viia mulle arusaadaval viisil. Kogu skript on saadaval täies mahus siin: pastebin.com

Seletan natuke ka selle töötamise põhimõtteid. Kogu töö tehakse ära nende 3 failiga kus:

docx fail – siin on ettevõtte logo, eelnevalt sätestatud font, stiil, värv ja suurus
ps1 fail – siin failis on põhiline skripti tööosa
vbs fail – see fail kutsub ps1 faili hidden parameetriga, ehk siis ühtegi lisaakent ei teki skripti jooksutamise ajal

SIG_Files.PNG

Skript jookseb kasutaja enda õigustega. Selle lõiguga loeme kasutaja enda atribuute ja seame need muutujateks. Telefoni numbrite puhul teen stringi plokkideks, et ei oleks üks pikk jada +37255667788 vaid oleks +372 5566 7788. Eposti URLi jaoks loon eraldi muutjuja mille ette lisan “mailto:”. Ning kuna minu keskkonnas on Office real vaid linna nimi, siis vastavalt sellele muudan linnanime täispikaks aadressiks.

#############################################
#### Get AD information for current user ####
#############################################
$UserName = $env:username
$signatures = "$env:APPDATA\Microsoft\Signatures"
$Filter = "(&(objectCategory=User)(samAccountName=$UserName))"
$Searcher = New-Object System.DirectoryServices.DirectorySearcher
$Searcher.Filter = $Filter
$ADUserPath = $Searcher.FindOne()
$ADUser = $ADUserPath.GetDirectoryEntry()
$ADDisplayName = $ADUser.DisplayName
$ADDeparment = $ADUser.department
$ADEmailAddress = $ADUser.mail
$ADEmailto = "mailto:$ADEmailAddress"
$ADTitle = $ADUser.title
$ADDescription = $ADUser.description
$ADMobile = "Mob: " + $ADUser.mobile.Substring(0,4) + " " + $ADUser.mobile.Substring(4,4) + " " + $ADUser.mobile.Substring(8)
$ADPhone = "Tel: " + $ADUser.telephonenumber.Substring(0,4) + " " + $ADUser.telephonenumber.Substring(4,3) + " " + $ADUser.telephonenumber.Substring(7)
$ADStreetAddress = $ADUserPath.streetaddress
$ADOffice = $ADuser.physicalDeliveryOfficeName
if ($ADOffice -like "Tallinn") {$Adoffice = "Tallina mnt 15, 12345 Tallinn, Eesti"}
if ($ADOffice -like "Tartu") {$Adoffice = "Tartu mnt 16, 12345 Tartu, Eesti"}

Kui kasutaja esimest korda Outlooki logib, siis tal puudub signatuuri kaust. Outlook loob selle alles siis kui läbi kasutajaliidese kästisi signatuur teha. See lõik kontrollib kas vajalik kaust on olemas ja selle puudumisel loob selle.

#########################################
#### Create Outlook Signature folder ####
#########################################
$sigfoldercheck = (Test-Path $signatures)
if ($sigfoldercheck -like "False"){New-Item $signatures -ItemType Directory}

See lõik kontrollib kas kasutjal on Outlooki profiil seadistatud. Kui profiili ei ole siis skript lõpetab töö. See on vajalik, sest ilma profiilita signatuuri genereerimine ei anna soovitud tulemust.

##########################################
#### Check for Active Outlook Profile ####
##########################################
$checkprofile = Test-Path "HKCU:\HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Profiles\Outlook"
if ($checkprofile -like "False") {exit}

See lõik kontrollib kas Registrys on märge skripti varasema töö kohta. Kui märge tuvastatakse siis skript lõpetab töö. Kui märget ei ole, jookseb skript edasi sh. kustutab varasemad samanimelised signatuurid. See on administreerimise seisukohast vajalik samm. Olukorras, kus on vaja muuta kõikide kasutajate signatuuri, saab skripti muuda ja keskhaldusvahendistest märke kustutada. Nii teeb skript enda töö uuesti.

##############################
#### Clean if no REG Flag ####
##############################
$RegFlagCheck = [bool] (Get-ItemProperty "HKCU:\HKEY_CURRENT_USER\Software\VERSIOONIHALDUS\Outlook Signatuur" | select "Signatuur")
if ($RegFlagCheck -eq "True") {exit}
else {
Get-ChildItem -Path "$signatures\Signatuur*" | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue -WarningAction SilentlyContinue

Siin lõigus avame võrgukettalt .docx faili ja täidame selle AD kogutud infoga. (NB! Sellele failile peavad kõikidel kasutajatel olema modify õigused, faili kirjutatakse aga ei salvestata seega on see alati enda originaalkujul). Kasutan ka info täitmisel if ($var) {“do something”} lähenemist, nii talitades ei teki tühje ridu kui kasutjal peaks AD’s infot puudu olema.

######################################
#### Build signature from AD DATA ####
######################################
$objWord = New-object -comobject Word.Application 
$objWord.Visible = $False 
$objDoc = $objWord.Documents.Open("ENTER YOUR *.docx UNC PATH HERE") 
$objSelection = $objWord.Selection 
# Intro
$text = "Lugupidamisega"
$objSelection.TypeText($text)
$objSelection.TypeParagraph()
$objSelection.TypeParagraph()
# Break
$text = "______________________________"
$objSelection.TypeText($text)
$objSelection.TypeParagraph()
# UserName
if ($ADDisplayName) {$objSelection.TypeText($ADDisplayName)
$objSelection.TypeParagraph()}
# JobTitle
if ($ADTitle) {$objSelection.TypeText($ADTitle)
$objSelection.TypeParagraph()}
# Deparment
if ($ADDeparment) {$objSelection.TypeText($ADDeparment)
$objSelection.TypeParagraph()}
# CompanyName
$text = "Contoso Corp"
$objSelection.TypeText($text)
$objSelection.TypeParagraph()
# OfficeAdress
if ($ADOffice) {$objSelection.TypeText($ADOffice)
$objSelection.TypeParagraph()}
# MobilePhone
if ($ADMobile) {$objSelection.TypeText($ADMobile)
$objSelection.TypeParagraph()} 
# OfficePhone
if ($ADPhone) {$objSelection.TypeText($ADPhone)
$objSelection.TypeParagraph()}
# E-Mail
if ($ADEmailAddress) {$hlink = $objSelection.Hyperlinks.Add($objSelection.Range,"$ADEmailto",$False,$False,"$ADEmailAddress")
$hlink.Range.Font.Size = 8
$hlink.Range.Font.Name = "Verdana"
$objSelection.TypeParagraph()}
$objSelection.TypeParagraph()
# CompnayWebPage
$hlink = $objSelection.Hyperlinks.Add($objSelection.Range,“http://www.contoso.com",$False,$False,“www.contoso.com”)
$hlink.Range.Font.Size = 8
$hlink.Range.Font.Name = "Verdana"
$objSelection.TypeParagraph()
# CompanyFB
$hlink = $objSelection.Hyperlinks.Add($objSelection.Range,"https://www.facebook.com/contoso",$False,$False,“www.facebook.com/contoso”) 
$hlink.Range.Font.Size = 8
$hlink.Range.Font.Name = "Verdana"
$objSelection.TypeParagraph()
$objSelection.TypeParagraph()

Siin lõigus salvetame genereeritud signatuuri Outlooki signatuuri kausta *.HTM; *.RTF ja *.TXT formaadis.

##########################################################
#### Save Signature files to Outlook Signature Folder ####
##########################################################
# Save .HTM to signatures folder
$saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatHTML");
$path = "$signatures\Signatuur.htm"
$objword.ActiveDocument.saveas([ref]$path, [ref]$saveFormat)
# Save .RTF to signatures folder
$saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatRTF");
$path = "$signatures\Signatuur.rtf"
$objword.ActiveDocument.saveas([ref]$path, [ref]$saveFormat)
# Save .TXT to signatures folder
$saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatText");
$path = "$signatures\Signatuur.txt"
$objword.ActiveDocument.saveas([ref]$path, [ref]$saveFormat)

Siin lõigus muudame kus Outlookis signatuuri rakendatakse. Siin näites vaid uute sõnumite puhul aga võib ka Reply sõnumite puhul kui rea eest eemaldada #. Samuti suletakse *.docx fail salvestamata.

##########################################
#### Set Signature options in Outlook ####
##########################################
$EmailOptions = $objWord.EmailOptions
$EmailSignature = $EmailOptions.EmailSignature
$EmailSignature.NewMessageSignature = “Signatuur”
# $EmailSignature.ReplyMessageSignature = “Signatuur”
$objWord.quit()

Siin lõigus lisatakse registrisse eelpool mainitud märge administreerimise lihtsustamiseks tulevikus 🙂

######################
#### Set REG Flag ####
######################
$root = "HKCU:\HKEY_CURRENT_USER\SOFTWARE\VERSIOONIHALDUS\"
$program = "Outlook Signatuur"
$rootcheck = Test-Path -Path $root
$programcheck = Test-Path -Path $root$program
If ($rootcheck -like "False") {New-Item -Path $root}
If ($programcheck -like "False") {New-Item -Path $root$program}
New-ItemProperty -Path $root$program -Name "Signatuur" -PropertyType STRING -Value 1
}

Lisan siia hiljem ka mõne näidise.

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 🙂

SCCM Prerequisite

Platvorm: Windows Server 2016 Standard
Eelnevalt installitud: SQL Server 2016 Standard

See juhend keskendub Prerequisite Check aknast läbi saamiseks vajalike tegevuste tegemiseks (MP, DP on HTTP peal).

  1. Et SCCM installer üldse käima saada on vaja lisada NET Framework 3.5 läbi server manager konsooli
  2. Installi WSUS ja kasuta SQL baasi läbi server manager konsooli
  3. Installi WDS läbi server manager konsooli
  4. Installi BITS läbi server manager konsooli
  5. Lisa linnuke IIS > Management Tools > IIS6 Management Compatibility > IIS 6 WMI Compatibility
  6. Enable RDC via powershell Install-WindowsFeature Rdc
  7. Extend schema installikaust .\SMSSETUP\BIN\X64\extadsch (eeldab Schema admin õigust)
  8. Lae alla ja installi Windows ADK for Windows 10
  9. Edit ADSI https://technet.microsoft.com/library/gg712264.aspx#BKMK_CreateSMContainer
  10. Muuda SQL service account jooksma Local System account alt
  11. Muuda SQL Collation käsuga D:\Setup.exe /QUIET /ACTION=REBUILDDATABASE  /SQLCOLLATION=SQL_Latin1_General_CP1_CI_AS /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=test\admin
    kus: D:\Setup.exe = SQL installmeedia asukoht
    ja /SQLSYSADMINACCOUNTS=test\admin = kasutaja kes SQL baasile ligi saab (näites current user)

MDT – Kohandame Windows 10t

Seadsin endale 4 eesmärki Windows 10 baasimage loomiseks.

  1. Puhasta image provisioned rakendustest
  2. Lisa MDTga mõned programmid ja muudatused
  3. Loo muudetud startmenüü
  4. Muuda vaikerakendused

NB! Ja tingimuseks loomulikult, et need rakenduks kõikidele sisselogivatele kasutajatele

Samm – 1 Puhastame imagefaili.

Kasutasin powershelli skripti käsuga:

.\removeapps.ps1 -pathtowim c:\10\install.wim -selectapps $true

suurepärane skript ja väga lihtne kasutada.
Removing Built-in apps from Windows 10 WIM-File with Powershell – Version 1.2

Samm – 2 MDT programmid. Lisan need programmid järgneva silent käsuga:

7zip – MSIEXEC /i 7z1604-x64.msi /q

Adobe DC Reader – AcroRdrDC1700920044_en_US.exe /sAll /msi /norestart ALLUSERS=1 EULA_ACCEPT=YES

Google Chrome – MSIEXEC /i googlechromestandaloneenterprise64.msi /qn

ID-tarvkara – Open-EID-17.2.0.1693_x86.exe /quiet AutoUpdate=0 RunQesteidutil=0

VLC Media Player – “vlc-2.2.4-win32.exe” /L=1033 /S

Visual C++ Redistributables – powershell.exe -ExecutionPolicy ByPass -Command “& .\Install-VisualCRedist.ps1 -Architecture ‘x64′,’x86’ -ShowProgress -Verbose”
(C++ poole pealt oli suureks abiks see: Install Visual C++ Redistributable applications with PowerShell in MDT)

Lisaks sai pandud MDTga Net Framework 3.5 ja eemaldatud Fax, Media player ja XPS teenused

Lõpptulemus:programmid.PNG

Samm 3 ja 4 – Loo muudetud startmenüü ja vaikeprogrammid

Sea startmenüü ja vaikerakendused paika ja kasuta käske:

Export-StartLayout C:\LayoutModification.xml
Dism /Online /Export-DefaultAppAssociations:C:\AppAssoc.xml

Nüüd on kõik vajalik olemas ja lasin MDT uuesti käima viisil, et lõpus tehtaks Capture. Kui see käes mountime vastloodud faili.

Dism /Mount-Image /ImageFile:"C:\DeploymentShare\Captures\W10PRO1607.wim" /index:1 /MountDir:C:\test

Kuna mul millegipärast Import-StartLayout käsk läbi ei läinud kopeerisin LayoutModification.xml kausta: C:\test\Users\Default\AppData\Local\Microsoft\Windows\Shell ( NB! ära kustuta seal faili DefaultLayouts.xml

Impordime vaikerakendused

Dism.exe /Image:C:\test /Import-DefaultAppAssociations:C:\RemoteInstall\AppAssoc.xml

Salvesta muudatused

Dism /Commit-Image /MountDir:C:\test

Unmount

Dism /Unmount-Image /MountDir:C:\test /commit

Nüüd kui sellest imagefailist installida jäi lõpptulemus minul selline:

Capture.PNG

Igati puhas ning viisakas ja kindlasti parem kui default out-of-the box experience! 😉

Windows server ja RRAS tunnelid, ehk kuidas teha VPN (EAP-MSCHAP v2 SSTP baasil)

Kirjutan natuke VPN lahendustest Microsoft Serveri baasil. Valikuteks on RRAS ja DirectAccess. Kuna viimane eeldab kliendi pool Enterprise litsentsitaset, siis olen kasutanud nö odavamat lahendust RRAS (Routing and Remote Access).

NB!!! See juhend eeldab, et lugeja on juba RRAS konsooliga tuttav ja ei sisalda päris nullist seadistamist.

Kasutasin eelnevalt MS RRAS auditemis protokolli MSCHAP v2 ja protokolli PPTP tunneli loomiseks. Selle koosluse plussiks on üles-seadmise lihtsus aga miinuseks ebaturvalisus (MSCHAP v2 protokollist saab autendimis info MITM ründega kätte) ja teiseks PPTP port 1723, mis võib osades võrkudes blokeeritud olla.

Edaspidi kasutame autendimis protokolliks EAP-MSCHAP v2, ehk siis MSCHAPv2 pakett liigub kliendi-serveri vahel läbi turvatud transpordi kihi. Tunneli protokolliks võtame SSTP, mis liigub üle 443 pordi ja on tõenäoliselt lahti igas kohtvõrgus.

Minu testkeskkonnas on üks füüsiline server litsentsiga MS Server 2012 R2 standard, kus RRAS, IIS, ADDS, DHCP on kõik ühe füüsilise masina peal. Võrgu tasemel tuleb teha järgnevad muutused:

Globaalsed viited zone.ee näitel (siin on eeldatud, et sul on domeen, mida saab aduendida läbi admin@sinudomeen.xyz aadressi):

  • Lisa DNSi uus A kirje (näiteks vpn.sinudomeen.ee), mis viitab Ruuteri välisele aadressile kus asub RRAS server.
  • Soeta sellele kirjele SSL sertifikaat (cheapest will do here)

Lokaalsed viited Mikrotik näitel:

  • Input ahelas lubada paketid mille sihtaadress on ruuteri väline aadress ja port 443
  • NAT ahelas dstnat mis suunab selle liikluse RRAS serveri IP ja pordi 443 peale

Kui registripidaja sulle sertifikaadi väljastab saad RRAS seadistamise lõpule viia.

Samm1 (mittekohustuslik)

Zone.ee väljastas sertifikaadi 3 formaadis .pem .der ja .net et sertifikaat IISi sisse importida on vaja see konvertida .pfx formaati.

pem
Sertifikaadi konverteerimine – https://www.sslshopper.com/ssl-converter.html

Peale konverteerimist saab IIS Server Certificates menüü alt selle importida. Peale seda tuleb ka Default web site bindinguid muuta

  • Type: https
  • IP aadress: serveri sisemine IP aadress
  • Port: 443
  • Host name: võib tühjaks jääda
  • SSL certificate: imporditud sertifikaat

Lihtsalt testimise mõttes tegin lahti ka pordi 80 ja lisasin IISi teenuse HTTP Redirect (add roles and features), see tuleb seadistada viitama https://sinudomeen.xyz peale. Kui kõik on korrektselt tehtud peaks aadressile minnes leht ilusti ette tulema ilma ühtegi turvahoiatust andmata ja http suunatakse alati https peale.encrypted
M
ission accomplished 😛

Samm 2 (kohustuslik)

RRAS server properties menüüs tuleb Security tabis teha järgnevad muudatusedrras1
Authentication Methods: jäta ainult EAP
SSL Certificate Binding: pane sinna korrektne sertifikaat

Samm 3 (kohustuslik)

  1. Nüüd ava Network Policy Server konsool.
  2. Network Policy Server konsoolis, navigeeri kausta Network Policies.
  3. Kustuta või pane Disable kehtivatele reeglitele ja loo uus järgmiste andmetega (Actions -> New)
  • Policy name: VPN Policy
  • Type of network access server: Remote Access Server(VPN-Dial up)
  • Windows Groups: VPN õiguste grupp (Ntx: Domain Users)
  • Specify Access Permission: Access granted
  • Configure Authentication Methods: Eemalda kõik linnukesed Less secure authentication methods valikutes, seejärel add Microsoft Secured password (EAP-MSCHAP v2) ja Microsoft: Smart Card or other certificate. Viimase peal edit ja sööda sisse juba tuttav sertifikaat.
  • Lõpeta wizard aktsepteerides vaikeväärtusi järgnevatel lehtedel.

rras2
L
õpptulemus peaks olema selline

Peale seda sammu on VPN tunnel töövalmis, testi ja veendu, et töötab 🙂

Samm 4 (mittekohustuslik)

Kuna mul NPSi sai VPN ligipääsu Grupp Domain Users, siis piiran selle kasutamist ikkagi eraldi masinapõhise grupiga, mis loob liikme peal VPN võrguprofiili. Selleks loo uus poliitka (GPO) ja piira selle rakendamist viimase grupi peale.

Computer configuration > Preferences > Control panel settings > Network options > New > VPN Connection

VPN Connection tab

  • Action: Create
  • Connection name: suvaline nimi mida kasutaja näeb  (ntx XYZ VPN)
  • IP aadress: Use DNS name linnuke ja lisa aadress

Options tab

  • Linnuke kasti: Display progress while connecting

Security tab

  • Vali: Advanced (custom settings)
  • Data encryption: Required
  • Logon security: Use EAP, kõik muu jäta vaikeväärtuste peale.

Nüüd navigeeri samas GPOs: Computer configuration > Preferences > Windows settings > Ini files > New > Ini File

  • Action: Replace
  • File Path: %ProgramData%\Microsoft\Network\Connections\pbk\rasphone.pbk
  • Section name: eelnevalt loodud ühenduse nimi (XYZ VPN)
  • Property Name: VpnStrategy
  • Property Value: 5

See plokk defineerib loodavas VPN ühenduses ära type of VPNiks SSTP kuna GPO seda ise ei võimalda.

Kui see GPO on korrektselt tehtud, siis luuakse masinate peal VPN profiil. Peale restarti on võimalik teha ka VPN login. See on eriti kasulik kui arvuti pole ettevõtte sisevõrgus ning sisse proovib logida arvuti jaoks tundmatu domeeni kasutaja. Sellisel juhul saab autentimise teha läbi tunneli ja kasutaja saab sisse 🙂

Powershell a must have skillset!

Kevadel 2016 osalesin BCS koolitusel ja vaatasin kuidas Janek Saar kasutas Powershelli nagu vilunud pianist klaverit. Mõtlesin, et oleks tore olla sama vilunud nagu tema aga kas mul ikka on seda vaja? Olen ju siiamaani saanud ilma selleta, miks siis nüüd seda peaks vaja olema?  Kõige lihtsam viis Powershelliga sõbraks saada on mõelda oma ärgipäeva peale. Kas on mõni tegevus, mis kordub ebameeldivalt tihti ja mis kohati juba vaikselt tüütuks muutub? Kuidas seda lahendada? Lahendust otsides oledki kohe Powershelli konksu otsas!

Enamus Powershelli käske hakkab tegusõnaga nagu näiteks: Get, Set, Add, Remove jne. Käsuga Get-Verb saad vaadata kõigi tegusõnu mida Powershell aktsepteerib. Powershell aksepteerib ka cmd käske, näiteks Get-Command ip* (* käitub nagu wildcard)

Capture.PNGNäeme loendis rakendust ipconfig.exe, mida Powershell akspeteerib.

Üsna oluline on omale varakult selgeks teha | kasutamine (pipeline inglise keeles). Ehk ühe käsu väljund on teisele sisend jne. Järjestada võib neid rohkem kui ühe korra.

Oletame, et soovin saada infot arvuti füüsilise mälu kohta:Capture.PNGSaame infost kogu spektri sh. palju sellist, mis meid ei huvita ehk ideaalne koht pipeline kasutamiseks 🙂Capture.PNGNüüd näeme vaid soovitud infot. Siia võiks omakorda otsa pookida veel näiteks | Format-Table või | Export-Csv jne.

Powershelli kasutamine suuremas organisatsioonis, eeldab selle lubamist läbi rühmapoliitika. https://blogs.technet.microsoft.com/poshchap/2014/07/03/ps-remoting-considerations/

See on punkt kus Powershell hakkas vaikselt südamesse pugema! Käsud nagu Invoke-command ja Enter-Pssession on need, mis su elu oluliselt lihtsamaks teevad.

Siiamaani on jutt olnud väga põgus ja mitte eriti põhjalik. Pigem on see sõnum, et teema tundub esmapilgul raskem kui tegelikult aga kui sinu igapäeva töös on pidev kokkupuude Windows tööjaamade ja nende haldamisega on see kindlasti üles korjamist väärt. Enda harimiseks Soovitan järgmist raamatut:

Learn Windows PowerShell in a Month of Lunches

YDpU45_W8Q.jpg

Nüüd siis mõned probleemid mille lahendamiseks olen hakanud kasutama powershelli.

Arvuti eemaldamine AD ja SCCM andmebaasist

# Arvuti eemaldamine AD ja SCCM andmebaasist
$computer =Read-Host -Prompt ‘Sisesta arvuti number’
Remove-ADComputer $computer
Import-Module (Join-Path $(Split-Path $env:SMS_ADMIN_UI_PATH) ConfigurationManager.psd1)
cd S01:
Remove-CMDevice -Name $computer
#

Seda scripti peab 2 korda kinnitama aga siiski etem kui kolada graafilises liideses 🙂

Pinpadi keelamine

Klaviatuuridel kus on sisse ehitatud ID-kaardi luger, võib mõnikord olla selline stsenaarium kus PIN sisestamise akent ei teki, on vaid ajaline counter, mis nulli tiksub. Seda saab ravida nii.

#Pinpadi keelamine
$hostn =Read-Host -Prompt ‘Sisesta arvuti number’
Invoke-Command -ComputerName $hostn -ScriptBlock {New-ItemProperty -Path “HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\” -Name SMARTCARDPP_NOPINPAD -PropertyType String -Value 1}

Printeri installimine

Kuna Windows 7 all ei tööta Branch Office Direct Printing ja meie organistasioonis on väga liikuv printeri ja kasutajate hulk ning kõik see toimub üle mahupõhise võrgu (ehk printserveri kasutamine ei ole mõistlik). Panin kokku scripti printeri installimiseks läbi powershelli. See script installib Konica Minolta 224e.

# Siia sisesta arvuti hostname kuhu soovid printeri installida
$hostn =Read-Host -Prompt ‘Sisesta arvuti number’
# Siia sisesta printeri IP lokaalses võrgus mida host kasutab printeri poole pöördumisel
$ip =Read-Host -Prompt ‘Sisesta Printeri IP’
# Siia sisesta printeri nimi mida host poolt näeb
$Printername=Read-Host -Prompt ‘Sisesta Printeri nimi’
# Siin on ära defineeritud millises kaustas driver asub, see kopeeritakse installi ajaks hosti arvutisse
$driverpath =”\\DC1\install\Drivers\Printer\Konica\bizhub C224e”
# Süsteemiketas 
$DriveLetter =”C”
# Siin on ära defineeritud driveri nimi, mis tuleb eelnevalt *.inf failist ise välja lugeda
$Driver =”KONICA MINOLTA C364SeriesPCL”
# Loodava kausta nimi
$Path = “PRIDRI”
# Siin toimub kontroll, kui driver juba arvutis olemas on, ei hakata seda kopeerima
IF ((Get-PrinterDriver -ComputerName $hostn | Select-Object -Property Name ) -match “$driver” ){
Add-PrinterPort -ComputerName $hostn -name “$ip” -printerhostaddress “$ip”
Add-Printer -ComputerName $hostn -Name $Printername -Drivername $Driver -Portname $ip
exit
# Loogsulgudes olev käsk tekitab printeri jaoks vastava pordi
} Else{Add-PrinterPort -ComputerName $hostn -name “$ip” -printerhostaddress “$ip”
Loob hosti peal kausta
New-Item -Path \\$hostn\$DriveLetter$\$Path -type directory -Force
# kopeerib driveri hosti äsja loodud kausta (siin võiks kasutada ka copy-item “path” “path” -recurse, jusiis ei torganud scripti kirjutamise ajal pähe :D)
xcopy /e “$driverpath” \\$hostn\$DriveLetter$\$Path
#Installib driveri lokaalse masina pnp driverstore’se
Invoke-Command -ComputerName $hostn -ScriptBlock {pnputil.exe -i -a C:\PRIDRI\*.inf}
# Lisab printdriveri printserverile (eelduseks on, et see on pnp’s olemas, muidu lisada ei saa)
Add-PrinterDriver -ComputerName $hostn -Name $Driver
# Lisab printeri
Add-Printer -ComputerName $hostn -Name $Printername -Drivername $Driver -Portname $ip
# Kustutab kausta
Remove-Item -Path “\\$hostn\C$\PRIDRI\” -Recurse
exit
}

Scriptide jookusutamiseks tuleb see lubada käsuga Set-ExecutionPolicy Bypass ning keelamiseks Set-ExecutionPolicy Default. Need on siis mõned mida kasutan tihedamini. Ehk on abiks ka teistele 😉

BIOS uuendamine esimese boodita masinas

Sattusin silmitsi hästi lihtsa probleemiga ja mõtlesin seda jagada. Nimel pidin uuendama BIOS arvutitel Dell Latitude E3330. Ametlik BIOS uuendus Delli lehelt on windowsi launchable. Probleemiks aga on, et kõikidel arvutitel on esimene boot tegemata (Windows 7 Home Premium 64bit). Oleks üsna ajakulukas ronida audit modesse või esimene boot lõpuni teha tühipalja BIOSi uuendamise pärast. Sest eemärk on, et esimene boot ikkagi toimuks ju ikka kliendi käes. Mida siis teha?

Kõige lihtsam on esimene boot lasta esimese aknani Set Up Windows
screen 6

Nüüd saab juba CMD kätte Shift+F10 abil. Eelnevalt Liigutasin BIOS uuenduse SD kaardi peale. Siit edasi käskudega:

  1. DiskPart – tõmbab lahti ketta utiili
  2. List Disk – leia oma mäluseade üles, minupuhul oli mäluseade Disk 1, seega:
  3. Select Disk 1 – valib Disk 1’e
  4. List Part – Näitab sellel kettal olevaid partitsioone, vali see kus bios uuendus peal on, minupuhul part 1.
  5. Select Part 1 – võid ka eelmise käsu vahale jätta kui tead, et ainult üks partitsioon on.
  6. Assign Letter=E – Nüüd on partitsioonil nö path olemas.
  7. Exit – Väljume ketta utiilist

Edasi siis:

  1. E: – Läheme mäluseadme peale
  2. Dir – näitab kataloogi sisu
  3. Nüüd valid oma BIOS uuendus faili, minupuhul oli see 3330A06.exe ja voila biosi uuendus hakkas tööle
  4. Lased masinal natuke vegeteerida ja siis läheb käsk shutdown -r -f – sellega lased masina jõuga rebooti
  5. Kui masin oma “asjadega” lõpuni saab jõuad lõpuks jälle Set Up Windows aknani. Nagu ennem võtad Shift+F10 abil ette CMD akna ja lähetad käsu shutdown -s -f – selle käsu seedimine võtab natuke aega ja esmapilgul võib tunduda, et Windows nagu ei reageerinud sellele.

Nüüd kui masin ennast ise kinni keerab ongi BIOS uuendatud ja esimene boot ikka veel ilusti ühes tükis 🙂

Fog server + Debian

Üsna kasulik asi kui vaja operatsioonisüsteemi imageid paigaldada üle PXE. Inspratsiooni andis Ott Valgu (Tallinna Polütehnikum) lõputöö. Poleks ilmselt selle peale ise üldse tulnud aga nüüd kus kõik läbi tehtud saan kinnitada, et tegemist on väärt lahendusega, mis hoiab metsikult aega kokku. Sarnane lahendus on ka Windows Server platvormil (image capture) aga FOG serveri näol on tegemist tasuta lahendusega.

Keerasin FOGI serveriks jägmise masina: Intel C2D E6300/4GB DDR2/2x500GB RAID1/GBE NIC

Raid 1 miinus on aeglane kirjutamiskiirus. Kasutusel on Debiani tarkvaraline nn “fake raid”. Kirjtuab kiirusega 800-900MB/m, loeb seevastu 4-5GB/m. Kuna imageid hakkab serveris palju olema on RAID 1 siinkohal igati õigustatud, pealegi eelduste kohaselt paigaldab server rohkem kui üles laeb.

Alustuseks siis Debiani netinstall ja peale vaid SSH server ja standard system utils. Ning edasi:

apt-get install mc # minu isiklik eelistus
mkdir /fog # teeme fog kataloogi
cd /fog # liigume tehtud katloogi
wget http://downloads.sourceforge.net/project/freeghost/FOG/fog_1.2.0/fog_1.2.0.tar.gz # tõmba-me alla fog tarkvara paketi
tar -xf fog_1.2.0.tar.gz # pakime selle lahti

Järmgisena käivitan mc ja lähen kausta /fog/fog_1.2.0/bin ja kävitan installfog.sh installikas läheb käima

VALIKUD:

  1. Debian Based Linux (Debian, Ubuntu, Kubuntu, Edubuntu)
  2. * Normal Server: (Choice N)
  3. What is the IP address to be used by this FOG Server? [xxx.xxx.xxx.xxx] # Jätan default
  4. Would you like to setup a router address for the DHCP server? [Y/n] # Jah
  5. What is the IP address to be used for the router on the DHCP server? [xxx.xxx.xxx.xxx# Jätan default
  6. Would you like to setup a DNS address for the DHCP server and client boot image? [Y/n] # Jah
  7. What is the IP address to be used for DNS on the DHCP server and client boot image? [xxx.xxx.xxx.xxx] # Jätan default
  8. Would you like to setup a DNS address for the DHCP server and client boot image? [Y/n] # Jätan default
  9. What is the IP address to be used for DNS on the DHCP server and client boot image? [xxx.xxx.xxx.xxx# Jätan default
  10. Would you like to change the default network interface from eth0? If you are not sure, select No. [y/N] # Ei
  11. Would you like to use the FOG server for DHCP service? [Y/n] # Ei
  12. This version of FOG has internationalization support, would you like to install the additional language packs? [y/N] # Ei
  13. Would you like to donate computer resources to the FOG Project? [y/N] # Ei
  14. Are you sure you wish to continue (Y/N) # Jah
  15. Root SQL password
  16. Did you leave the mysql password blank during install? (Y/n) # Ei ja sisesta muudetud pass
  17. http://xxx.xxx.xxx.xxx/fog/management # kinnitad sellel lehel andmebaasi ära ja ongi valmis

Nüüd tuleb natuke trikitada, et “võõra” DHCPga lahendus tööle hakkab, selleks:

apt-get install dnsmasq
nano /etc/dnsmasq.d/ltsp.conf

Siia läheb järgnev conf:

# Sample configuration for dnsmasq to function as a proxyDHCP server,
# enabling LTSP clients to boot when an external, unmodifiable DHCP
# server is present.
# The main dnsmasq configuration is in /etc/dnsmasq.conf;
# the contents of this script are added to the main configuration.
# You may modify the file to suit your needs.

# Don't function as a DNS server:
port=0

# Log lots of extra information about DHCP transactions.
log-dhcp

# Dnsmasq can also function as a TFTP server. You may uninstall
# tftpd-hpa if you like, and uncomment the next line:
enable-tftp

# Set the root directory for files available via FTP.
tftp-root=/tftpboot

# The boot filename.
dhcp-boot=pxelinux.0

# rootpath option, for NFS
dhcp-option=17,/images

# kill multicast
dhcp-option=vendor:PXEClient,6,2b

# Disable re-use of the DHCP servername and filename fields as extra
# option space. That's to avoid confusing some old or broken DHCP clients.
dhcp-no-override

# PXE menu.  The first part is the text displayed to the user.  The second is the timeout, in seconds.
pxe-prompt="Press F8 for boot menu", 0

# The known types are x86PC, PC98, IA64_EFI, Alpha, Arc_x86,
# Intel_Lean_Client, IA32_EFI, BC_EFI, Xscale_EFI and X86-64_EFI
# This option is first and will be the default if there is no input from the user.
pxe-service=X86PC, "Boot from network", pxelinux

# A boot service type of 0 is special, and will abort the
# net boot procedure and continue booting from local media.
pxe-service=X86PC, "Boot from local hard disk", 0

# If an integer boot service type, rather than a basename is given, then the
# PXE client will search for a suitable boot service for that type on the
# network. This search may be done by multicast or broadcast, or direct to a
# server if its IP address is provided.
# pxe-service=x86PC, "Install windows from RIS server", 1

# This range(s) is for the public interface, where dnsmasq functions
# as a proxy DHCP server providing boot information but no IP leases.
# Any ip in the subnet will do, so you may just put your server NIC ip here.
# Since dnsmasq is not providing true DHCP services, you do not want it
# handing out IP addresses.  Just put your servers IP address for the interface
# that is connected to the network on which the FOG clients exist.
# If this setting is incorrect, the dnsmasq may not start, rendering
# your proxyDHCP ineffective.
dhcp-range=xxx.xxx.xxx.xxx,proxy

# This range(s) is for the private network on 2-NIC servers,
# where dnsmasq functions as a normal DHCP server, providing IP leases.
# dhcp-range=192.168.0.20,192.168.0.250,8h

# For static client IPs, and only for the private subnets,
# you may put entries like this:
# dhcp-host=00:20:e0:3b:13:af,10.160.31.111,client111,infinite

Peale väikest ponnistust avastasin, et vaja on ka:

cd /tftpboot
ln -s undionly.kpxe undionly.0
service dnsmasq restart

Nüüd peaks kõik toimima.