Short Stories



PHP

Tips PHP
PHP-kod körs på server, för att kontrollera klient använder vi JavaScript. Ibland kan vi behöva att skicka PHP variabel, area eller objekt till JavaScript, för vidare hantering.

Det kan vara komplicerat att försöka forma utdata från PHP på rätt sätt. Detta är ett sätt som alltid fungerar utan att behöva tänka på formatering.

Låt oss säga att vi har följande variabel i PHP:

$namn = 'easec';

Om du vill skicka denna variabel till JavaScript variabel med namnet namn, gör du på följande sätt:

Bild på PHP-kod.

Resultat blir detta:

Bild på resultat.

Windows PowerShell

Arbeta objektorienterat
Procedurorienterad eller objektorienterad programmering

Många programmeringsspråk stödjer olika sätt att skriva program. Ett vanligt sätt är procedurorienterad programmering, ett annat sätt är objektorienterad programmering. Procedurorienterad programmering utförs instruktutioner i ett antal steg liknande monteringsanvisningar för t ex en möbel. Behöver inte utföra stegvis, utan hopp kan ske. Svårt att följa logiken i ett program om många olika hopp sker. För att minska komplexiteten och för att få mer lättläst programkod infördes strukturerad programmering. Finns dock nackdelar framförallt för komplexa, händelsestyrda program. I denna typ är det lättare att arbeta med objektorienterad programmering.

I objektorienterad programmering hanteras klasser av objekt, dessa objekt har medlemsvariabler och metoder. Windows PowerShell har fått en liknande utveckling som exempelvis PHP, börjat som ett skriptspråk och efterhand som produkten har utvecklats gått mot att kunna hantera objektorienterad programmering.

Medlemsvariabler och metoder

Medlemsvariablerna (eng: properties) används för att lagra ett visst läge av ett objekt. Detta läge definieras av värdet på denna typ av variabel. När läge för objekt skall ändras, eller objektet skall användas för att utföra en uppgift, används dess metoder. Metoderna är en förteckning över vad ett objekt kan göra. Objektet har all sin förmåga samlad i metoder och i medlemsvariabel. Allt som objektet behöver lagra finns i dess medlemsvariabler och allt som kan göras med objektet exponeras via dess metoder.

Kapslar in

Exakt hur objektet verkställer saker och ting är objektets ansvar. Ett objekt kapslar in detaljerna för implementationen och erbjuder ett publikt gränssnitt i form av metoderna. Själva implementationen av metoderna är en sak för objektet själv.

Klass

Objekt skapas utifrån en klass. Klassen är en mall, utifrån denna mall skapas nya objekt. Att skapa ett objekt kallas för att instansiera klassen till ett objekt, eller att instansiera ett objekt av klassen.

I verkligheten

Bild på klassdiagram.

Från denna klass kan vi t ex skapa två stycken oberoende objekt, ett objekt för Ford och ett objekt för Volvo. Var och ett av dessa två objekt har metoder för att accelerera, bromsa, svänga och tuta. Objektet innehåller också medlemsvariabler för specifika värden för märke och färg. Varje objekt kan manipuleras individuellt.

Bild på klass i Windows PowerShell ISE.

Skapa instans

När klass har blivit skapad, kan den kopieras, du kommer att skapa en instans av objektet. Nyckelordet New-Object används, tillsammans med referens till klass.

$bil = New-Object Bil

Alla medlemsvariabler och metoder kommer att följa med från klassen.

Bild på klass i Windows PowerShell ISE.

$bil | Get-Member

Kommandot ovan ger information om din instans, medlemsvariabler och metoder.

Sätta medlemsvariablar och kalla på metod

När instans har skapats, kan medlemsvariabler sättas. Detta kan göras med olika tekniker:

$Bil = New-Object bil -Property @{Märke="Volvo";Färg="Gul"}

$Bil.märke = ”Volvo”

Exempel:

$Bil = New-Object bil
// sätt objektets medlemsvariabler
$Bil.Märke = ”Volvo";
$Bil.Färg = ”Gul";
// kalla på objektets metod
$Bil.Svänger()


Åtkomst till eller förändra

För att få åtkomst till eller förändra metod i klass eller medlemsvariabel, är det nödvändigt att lägga till $this som ett prefix. $this refererar till denna klass.

Åtkomst till eller förändra - exempel

# Medlemsvariabler
[String]$Märke
[String]$Färg
[Int]$Hastighet = 40
...
# Metoder
Accelerera()
{
Write-Host "Nuvarande hastighet:” $This.Hastighet
Write-Host "Accelererar ...”
$This.Hastighet = $This.Hastighet + 40
Write-Host "Nuvarande hastighet:" $This.Hastighet
}


Bygga ut

För att knyta till verkligheten, vill vi bygga ut metoden svänga i klassen. När vi kallar på metoden, skall den först bromsa, svänga och därefter accelerera.

Exempel:

Svänger()
{
Write-Host "Svänger ..."
$this.bromsa()
echo "Svänger...\n"
$this.accelerera()
}
Grundkrav: Windows PowerShell version 5.

Arbetsuppgift 1: Skapa klass som startar om valfri dator.

Steg 1: Använd sökfunktionen om du arbetar med Windows 10, sök efter Windows PowerShell ISE, högerklicka på ikon, välj att starta som administratör.

I Windows 8, klicka på Start Charm, skriv in Windows PowerShell ISE, högerklicka på ikon och välj att starta som administratör.

Arbetsuppgift 2: Skapa klass med ett antal variabler

Klass skapas med nyckelordet Class, följt av ett namn samt öppnande måsvingeparantes. På nya rader deklareras variabler och eventuella metoder, innan avslutande måsvingeparantes.

Steg 1: I kodfönstret, skriv in följande:

Class CDator {
[String]$Namn
[String]$Beskrivning
[String]$Typ
[String]$Ägare = ‘easec’
}


Bild på klass.

I koden ovan, tilldelas variabel $Ägare ett värde, lägg märke till att det är rak apostrof som används.

Jag brukar namnge klasser med stor begynnelsebokstav C, för att följa namnkonvention och riktlinjer som bl a
definierats av Apache.

Arbetsuppgift 3: Utöka klass med metod.

Steg 1: I kodfönstret, gör några nya rader innan avslutande måsvingeparantes.

Steg 2: Skriv därefter in följande:

[void]Restart() {
Write-Host ‘Dator kommer att startas om nu!’ -ForegroundColor Green
}


Bild på metod.

[void]indikerar att metoden inte kommer att returnera någon information, vi vill utföra en händelse, i detta fallet starta om datorn. Restart() innebär att vi inte behöver skicka med någon information när vi kallar på metoden.

För tillfället kommer texten ”Dator kommer att startas om nu!” att visas, vi kommer att lägga till ett kommando lite senare.

Steg 3: Spara din klass, använd namnet CDator.ps1.

Arbetsuppgift 4: Skapa instans av klassen.

Instans är en kopia av klassen, som vi lägger i en variabel. Kopian ärver medlemsvariabler och metoder.

Steg 1: Exekvera koden genom att klicka på grön pil i Windows PowerShell ISE.

Steg 2: I konsolfönstret, skriv in följande:

$Dator = New-Object CDator, klicka därefter på Enter.

Bild på instans.

Steg 3: Skriv in följande kommando, för att undersöka innehåll för vår variabel: $Dator och klicka på Enter.

Bild på variabel Dator.

Som du kan se så innehåller variabel Ägare det vi definierade i vår programkod.

De andra medlemsvariablarna kan populariseras på följande sätt: $Dator. (punkt), IntelliSense
hjälper oss med dessa genom att visa en lista.

Bild på popularisera medlemsvariabler.

Skriv in $Dator.Beskrivning=”Server”, klicka därefter på Enter.

Steg 4: Gör på liknande sätt för att populärisera de andra medlemsvariablerna, se bild nedan:

Bild på innehåll.

Arbetsuppgift 5: Testa metoden, ändra metoden.

Steg 1: Skriv in kommandot: $Dator.Restart(), klicka därefter på Enter.

OBS! Tänk på att lägga till slutparantes, Windows PowerShell lägger inte till denna om IntelliSense används.

Bild på resultat.


Steg 2: I ditt kodfönster, lägg till ny tom rad efter ordet Green men innan avslutande måsparantes i metoden.

Steg 3: Skriv in följande:

Restart-Computer –Force

Bild lägga till i metod.


Steg 4: Spara undan din klass, kör ditt skript.

Steg 5: Skapa ny instans av din klass, genom att skriva följande kommando:
$Dator = New-Object CDator -Property @{Namn="easecServer";Beskrivning="Server";Typ=”Server”;Ägare=”easec”},
klicka därefter på Enter.

Nyckelordet New-Object används för att skapa instans.

OBS! Nästa moment kommer att starta om din dator, testa detta i en labbmiljö!

Steg 6: Testa metoden genom att skriva in följande kommando: $Dator.Restart(), klicka därefter på Enter.

Bild omstart via metod.


Arbetsuppgift 6: Ändra metod så att den fungerar på fjärrdator.

Steg 1: I Windows PowerShell ISE, ändra de två raderna efter Restart () {, enligt nedan:

Write-Host ”Dator” $this.Namn ”kommer att starta om nu!” –ForegroundColor Green
Restart-Computer $this.Namn –Force –credential ”domännamn\administratörskonto”


Bild tillägg i metod.


Steg 2: Spara undan din klass, kör ditt skript.

Steg 3: Skapa ny instans av din klass, genom att skriva följande kommando:

$Dator = New-Object CDator -Property @{Namn="namn_på_fjärrdator";Beskrivning="Server";Typ=”Server”;Ägare=”easec”}, klicka därefter på Enter.

Arbetsuppgift 7: Ändra brandväggsregel på fjärrdator.

Steg 1: På fjärrdator, starta cmd.exe som administratör.

Steg 2: Skriv in följande kommando: netsh advfirewall firewall set rule group="windows firewall remote management" new enable=yes, klicka därefter på Enter.

Restart-Computer använder WMI, Remote Management innehåller regelverk för alla verktyg.

Arbetsuppgift 8: Testa din metod.

Steg 1: I Windows PowerShell ISE konsol, skriv in kommandot $Dator.Restart(), klicka därefter på Enter.

Bild omstart fjärrdator.


Ange lösenordet, klicka på OK.

Din fjärrdator kommer att startas om.

Bild omstart fjärrdator.

Enum

Är en speciell informationstyp som ger möjlighet att sättas till fördefinierade konstanter.
Deklareras utanför klassdefinition.
Exempel:

Enum Märke
{
Volvo = 1
SAAB = 2
Ford = 3
}

Class Bil
{
...


Efter instansiering av klassen Bil kan värde tilldelas, antingen med bilmärke i klartext, eller med siffra.

Exempelvis:

$Bil.Märke= ”Volvo";


Alternativt:

$a.märke = 1

Enum har en annan bra funktion, kontrollerar nämligen även att värdet som tilldelas är korrekt. I mitt exempel så måste det vara Volvo, SAAB eller Ford. Ges ett annat värde in kommer detta att generera ett felmeddelande.

Bild på felmeddelande.


Felmeddelandet kan du ta hand om med hälp av try-catch sats.

Exempelvis:

Bild på Try-Catch.


PowerShell Core på Ubuntu 16.04

PowerShell Core, för Linux, är publicerat i ett paketförråd för lättare installation och uppdatering, detta är den rekommenderade metoden.

Arbetsuppgift 1: Importera in publik nyckel för förråd och registrera förråd.

Bild på nerladdning av nyckel.


Steg 1: Skriv in kommandot: curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -, klicka sedan på Enter.

Bild på uppdatering av referens.


Steg 2: Skriv in kommandot: curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/microsoft.list, klicka sedan på Enter.

Bild på uppdatering av referens.


Steg 3: Skriv in kommandot: sudo apt-get update, klicka sedan på Enter. Kommandot kommer att uppdatera apt med referenser till det nya arkivet.

Arbetsuppgift 2: Installera PowerShell.

Bild på installation.


Steg 1: Skriv in kommandot: sudo apt-get install –y powershell, klicka sedan på Enter.

Bild på installation.


Steg 2: När installationen är klar, skriv in kommandot powershell, klicka sedan på Enter.

Windows PowerShell version 5

Bild på felmeddelande.


Arbetsuppgift 1: Kontrollera version av Windows PowerShell.

Steg 1: I Start Charm, skriv in Windows PowerShell ISE, högerklicka på ikon för densamme, välj att starta som administratör.

Steg 2: I konsolfönstret, skriv in följande kommando: $PSVersionTable.PSVersion, klicka därefter på Enter.

Bild på versionstabell.


Arbetsuppgift 2: Ladda ner Windows Management Framework 5.0.

Steg 1: Öppna webbläsare och skriv in följande URL: https://www.microsoft.com/en-us/download/details.aspx?id=50395 , klicka därefter på Enter.

Steg 2: Klicka på Download, välj aktuellt installationspaket, klicka på Next.

Steg 3: Klicka på Open två gånger.

Bild på Installer.


Steg 4: Klicka först på Yes, för att installera KB3134758, klicka därefter på I Accept (när du noggrant har läst igenom licensinformationen).

Steg 5: När installation är klar, starta om din dator.

Arbetsuppgift 3: Verifiera version av Windows PowerShell.

Steg 1: Används sökfunktionen, sök efter Windows PowerShell ISE, högerklicka på kon för densamma, välj att starta som administratör.

Steg 2: I konsolfönstret, skriv in följande kommando: $PSVersionTable.PSVersion, klicka därefter på Enter.

Bild på ny versionstabell.


Övrigt Windows PowerShell
PowerShell Direct är en funktion i PowerShell version 5 där du kan ansluta till virtuell maskin direkt från Hyper-V värd utan att behöva nätverkskoppling.

Grundkrav:

- Virtuell maskin måste köras lokalt och vara uppstartad.
- På Hyper-V värddator måste du vara påloggad som Hyper-V administrator.
- Du måste kunna ange giltig inloggningsinformation på virtuell maskin.
- Värdoperativsystemet måste köras på Windows 10/Windows Server 2016.
- Operativsystemet på virtuell maskin måste vara Windows 10/Windows Server 2016.


Anslutning sker via VMBus och använder PowerShell Remoting Protocol (MS-PSRP). VMBus installeras med Windows Integration Service. VMBus får tillgång till VM genom två parametrar:

- Namn på virtuell maskin.
- ID för virtuell maskin.


Syntax

Samma syntax som för PowerShell session, skillnad är att istället för parameter –ComputerName används parameter –VMName.

Exempelvis:

Enter-PSSession –VMName easec01

Bild PowerShell Direct.


Alternativt:

Enter-PSSession –VMId id

Metoden tillåter dig att logga på VM och köra kommando eller skripts. Resultat av körningen visas i konsol. Om du vill köra kommando utan att öppna interaktiv session, används cmdlet Invoke-Command.

Exempelvis:

Invoke-Command –VMName easec01 –ScriptBlock { kommando }

Bild Invoke-Command.


Skript som finns på host kan exekveras i VM.

Exempelvis:

Invoke-Command –VMName easec01 –FilePath ‘C:\skript\MittSkript.ps1’

Bild PowerShell Direct exekvera skript.


Cmdlet Get-VM visar all den information som behövs för att ansluta till VM.

Exempelvis:

Get-VM | Select-Object –Property Name, VMId

Bild PowerShell Direct med VMId.


Execution Policy används för att sätta vilkor för hur Windows PowerShell laddar konfigurationsfiler och kör skript. Inställning kan sättas för lokal dator, nuvarande användare eller för specifik session.

Inställning för lokal dator och nuvarande användare lagras i registret, för sessionen lagras inställningen i minnet och kommer att försvinna när session avslutas.

Execution Policy är inte en säkerhetsåtgärd, utan används för att sätta regelverk och att se till att detta regelverk åtföljs.

Bild ExecutionPolicy.


Vilka inställningar finns?

Det finns sex inställningar som kan användas: Restricted, AllSigned, RemoteSigned, Unrestricted, Bypass och Undefined.

Restricted

Tillåter individuella kommando, kommer inte att köra skript. Förhindrar körning av alla skript, inkluderat formaterings- och konfigurationfiler (.ps1xml) moduler (.psm1) och Windows PowerShell profiler (.ps1).

AllSigned

Tillåter exekvering av skript, men kräver att dessa är signerade. Kräver även att konfigurationsfiler är signerade.

RemoteSigned

Skript kan exekveras, kräver digitial signering för skript eller konfigurationsfiler som är nerladdade från Internet. Kräver ingen digital signering på lokala skript.

Om blockering tas bort kan nerladdade skript exekveras.

Unrestricted

Osignerade skript kan köras, kommer dock att varna användare om skript eller konfigurationsfiler nerladdade från Internet körs.

Bypass

Ingen blockering eller varningsmeddelande. Inställningen är designat för konfigurationer där Windows PowerShell skript är en del i ett större sammanhang med egen säkerhetsmodell.

Scope

Regel kan sättas för specifikt scope. Följande scope kan användas: Process, CurrentUser och LocalMachine.

Process

Regel påverkar bara nuvarande process. Inställning lagras i miljövariabel $env:PSExecutionPolicyPreference.

CurrentUser

Kommer att påverka nuvarande användare. Inställning lagras i registret, under HKEY_CURRENT_USER.

LocalMachine

Påverkar alla användare på lokal dator. Inställning lagras i registret, under HKEY_LOCAL_MACHINE.

Group Policy

Group Policy kan användas för att sätta inställningar för användare och för dator.

Get-ExecutionPolicy

Bild Get-ExecutionPolicy.


Cmdlet Get-ExecutionPolicy används för att visa nuvarande inställning. Med hälp av parameter –list, listas inställningar.

Set-ExecutionPolicy

Bild Set-ExecutionPolicy.


Cmdlet Set-ExecutionPolicy används för att sätta inställning för ExecutionPolicy.

Exempelvis:

Set-ExecutionPolicy AllSigned

För att sätta inställning för specifikt scope, använd parameter –Scope scope.

Exempelvis:

Set-ExecutionPolicy RemoteSigned –Scope CurrentUser

Plocka bort inställning för ExecutionPolicy

För att plocka bort inställning, sätt inställning till Undefined.

Exempelvis:

Set-ExecutionPolicy Undefined –Scope CurrentUser

Sätta inställning för process

För att sätta inställning för process, använder du parameter –ExecutionPolicy följt med inställning.

Bild sätta inställning för process.


Inställning kommer att lagras i miljövariabel, denna kommer att plockas bort när process avslutas.

Turordning

Följande turordning för inställningen gäller:

- Group Policy: Computer Configuration.
- Group Policy: User Configuration.
- Execution Policy: Process.
- Execution Policy: CurrentUser.
- Execution Policy: LocalMachine.



Microsoft Authenticode

Ger möjlighet för utvecklare att inkludera information om de själva och deras kod genom digital signatur. Authenticode självt garanterar in att den signerad programkoden är säker att köra.

Är själva mekanismen som informerar användaren att den som publicerar programkoden är med i infrastrukturen för Authenticode.

Typ av certifikat

Vem skall använda programkod?

- Globala användare utanför organisationen, använd global Certificate Authority.
- Interna användare, använd egen PKI.
- Testsyfte, använd självsignerat certifikat.

Certifikatet skall vara av typen CodeSigning.

Tillverka självsignerat certifikat

MakeCert.exe, finns med i SDK, numera borttagit i senaste SDK för Windows 10. Cmdlet New-SelfSignedCertificate används.

Exempelvis:

New-SelfSignedCertificate -DnsName easec.se -CertStoreLocation cert:\LocalMachine\My -Type CodeSigning

Bild cmdlet.


Lokalisera certifikat

Använd certlm.msc.

Bild lokalisera certifikat.


Flytta certifikat

Använd certlm.msc.

Högerklicka på certifikat, välj All Tasks – Export.

Bild exportera certifikat.


Högerklicka på Trusted Root ..., välj All Tasks – Import.

Bild importera certifikat.


Sätt ExecutionPolicy

Sätt ExecutionPolicy, genom att exekvera följande kommando:

Set-ExecutionPolicy AllSigned

Bild ExecutionPolicy.


Skapa skript

Bild skapa skript.


Provkör script

Felmeddelande.


Signera script

Tilldela variabel $cert det certifikat vi skapade tidigare.

Bild tilldela certifikat.


Använd cmdlet: Set-AuthenticodeSignature för att signera ditt skript.

Bild signera.


Provkör skriptet

Bild provkör skript.


Signerat skript

Bild signerat skript.


Signera skript Länk till PDF för steg för steg anvisning att signera skript.




Tangentbord Resultat
Pil upp Scannar bakåt i historik.
Pil ner Scannar framåt i historik.
PgUp Första kommandot.
PgDn Sista kommandot.
Vänster pil Ett tecken till vänster.
Höger pil Ett tecken till höger.
Home Början av kommandot.
End Slutet av kommandot.
Control+vänster pil Ett ord åt vänster.
Control+höger pil Ett ord åt höger.



Windows Server 2016

Nested virtualization



Grundkrav: Basmaskin med Windows 10 64-bitars med Windows 10 Anniversary Update installerat/Windows Server 2016 installerat, med Hyper-V installerat. Virtuell maskin med Windows Server 2016 installerat, konfigurationsversion 8.0 eller högre.

Arbetsuppgift 1: Starta och logga på din Windows 10/Windows Server 2016 baserad maskin.

Steg 1: Starta maskin med Windows 10/Windows Server 2016.

Steg 2: Logga på med användarenamn med tillhörande lösenord.

Arbetsuppgift 2: Stäng eventuellt ner virtuell maskin.

Steg 1: Klicka på sökverktyget, skriv in Hyper-V, klicka på Hyper-V Manager.

Steg 2: Kontrollera namnet för virtuell maskin.

Steg 3: Högerklicka på virtuell maskin, välj alternativet Shut Down (om virtuell maskin är igång).

Arbetsuppgift 3: Konfigurera Nested Virtualization.

Steg 1: På din Windows 10/Windows Server 2016 maskin, klicka på sökverktyget, skriv in Windows PowerShell, högerklicka på Windows PowerShell, välj alternativet Run as administrator.

Steg 2: I konsol för Windows PowerShell, skriv in följande kommando: Set-VMProcessor -VMName namn_på_virtuell_maskin -ExposeVirtualizationExtensions $true, klicka därefter på Enter.

Arbetsuppgift 4: Starta virtuell maskin och installera Hyper-V.

Steg 1: Klicka på sökverktyget, skriv in Hyper-V, klicka på Hyper-V Manager.

Steg 2: Högerklicka på virtuell maskin, välj alternativet Connect, klicka sedan på grön knapp.

Steg 3: Logga på som administratör med tillhörande lösenord.

Steg 4: I Server Manager, klicka på Add roles and features, lägg till Hyper-V, klicka på Add features. Klicka på Next tills knappen Install aktiveras (vi väljer att arbeta med standardinställningar, inget nätverkskort).

Steg 5: Klicka på Install.

Steg 6: När installation är klar, klicka på Close. Starta inte om virtuell maskin!

Arbetsuppgift 5: Ändra namn på din server (vid behov).

Steg 1: I Server Manager, klicka på Local Server.

Steg 2: Klicka på länk med genererat datornamn.

Steg 3: Klicka på Change, skriv in Win2016, klicka på OK. Bekräfta meddelandet om omstart, genom att klicka på OK.

Steg 4: Klicka på Close.

Steg 5: Starta om virtuell maskin, genom att klicka på Restart.


.easec
Stävgatan 16
234 42 LOMMA
Kontakt: kontakt(@).easec.se
Website
Alla rättigheter till materialet reserverade © 2014 - 2020 .easec