https://github.com/green-fox-academy/safely-syllabus/tree/master/materialreview/scripts/powershell

https://github.com/green-fox-academy/safely-syllabus/tree/master/materialreview/powershell-commands

##### MatRev #####

ALAPOK

# Ez egy egy soros comment
<#
Többsoros komment

#>

<#
Változók

#>
#Stringek
$aString = "Alma"
[string]$bstring = "Korte"

$aInt = 10
[int]$bint = 5

$aInt = $bInt
$aInt += $bInt
$aInt++
$aInt
$aInt = 10
#Lebegőpontos numerikus valtozok
$aFloat = 1.5
[float]$bFloat = 1.5

#$bFloat = $aFloat * $aInt
$bFloat = $bFloat * $aInt

$bFloat

#Tömbök

$aArray= (1, 2, 3, 4, 5)
$bArray= (1..5)

$Global:aString = "Globalis string valtozo, az egesz scriptre ervenyes a definialast kovetoen"

ElsoPS

<#
Script ismertetes!

#>
param(
    [string]$Parameter1,      # Parameter1 ertek azert, hogy .....
    [string]$Parameter2      # Parameter1 ertek azert, hogy .....
)
[string]$Global:Parameter1=$Parameter1
$Global:Parameter2=$Parameter2

Set-StrictMode -Version 2.0   #warning
###############################################################################################
#function [string]aRutin([int]$iInt){
function aRutin([int]$iInt){
    
    return "S"
}
###############################################################################################
function bRutin($iInt){
    return "S"
}
###############################################################################################
#function [void]cRutin(){
function cRutin(){
    return "S"
}

function Ellenorzes(){
    if(($Global:Parameter1 -eq $null) -or ($Global:Parameter1 -eq ""))
    {
        Write-Host "Parameter1 ures!" -ForegroundColor Red
    }
    else
    {
        Write-Host $Global:Parameter1 -ForegroundColor Cyan
    }

    if(($Global:Parameter2 -ne $null) -and ($Global:Parameter2 -ne ""))
    {
        Write-Host $Global:Parameter2 -ForegroundColor Red
    }
    else
    {
        Write-Host "Parameter2 ures!" -ForegroundColor Cyan
    }
}


function bRutin2($iInt){
    for ($i = 1;$i -le $iInt;$i++)
    {
        Write-Host $i.ToString()
    }
    $i=1
    while ($i -le $iInt)
    {
        Write-Host $i.ToString()
        $i++
    }
    $i = 1
    do
    {
        Write-Host $i.ToString()
        $i++
    }
    while ($i -le $iInt)
    <#
    foreach()
    {

    }
    #>
    return $i

}
###############################################################################################
####
####
##   Main
####
####
###############################################################################################

CLS

# $cString = aRutin -iInt 10
[string]$aString = aRutin -iInt 5
$aString

Write-Host $Global:Parameter1 -ForegroundColor Cyan

Ellenorzes

bRutin2 -iInt 5

Beépített változók

#Get-Help Write-Host
#Get-ChildItem | Get-Member

Get-Date -Format "yyyy-MM-dd"
Get-Date -Format "yyyy-MM-dd HH:mm:ss.ms"

$b =$env:COMPUTERNAME
$b

$files=Get-ChildItem -Path "C:\Users\MSI\AppData\Local\Temp" -Filter "*.tmp"
#$files | Select-Object -Property * | Select-Object -Last 5 | Select-Object -Property FullName,Length | Sort-Object Length -Descending
$files | Select-Object -Property * | Select-Object -First 5

$Files5biggest = $files | Sort-Object Length -Descending | Select-Object -First 5 | Sort-Object Name | Select-Object -Property FullName,Length 
$Files5biggest | Format-Table -AutoSize

Get-Process | Select-Object -Property * | Select-Object -First 1

$ProcList = Get-Process
$SumPagedMemorySize = 0
foreach ($aProc in $ProcList)
{
    
    $SumPagedMemorySize += $aProc.PagedMemorySize

}
Write-Host $SumPagedMemorySize

Fájlkezelés

$Lines = Get-Content -Path "C:\Users\MSI\Documents\suli\mat review\batch\DeleteOldFiles.log"
$Lines.Length
$LogLines = ""
foreach($aLine in $Lines)
{
    If($aLine.Contains(".tmp"))
    {
        Write-Host $aLine
        $LogLines+=$aLine
        $LogLines+="`n"
    }
}

$LogLines | Out-File -FilePath "C:\Users\MSI\Documents\suli\mat review\PowerShell\___LogDeleteOldFiles.log"
$LogLines.Length

Copy-Item -Force "C:\Users\MSI\Documents\suli\mat review\PowerShell\___LogDeleteOldFiles.log" "C:\Users\MSI\Documents\suli\mat review\PowerShell\___LogDeleteOldFiles2.log"
Remove-Item -Force -Path "C:\Users\MSI\Documents\suli\mat review\PowerShell\___LogDeleteOldFiles2.log"
#Remove-Item -Force -Path "C:\Users\MSI\Documents\suli\mat review\PowerShell\___LogDeleteOldFiles2.log" -Filter "*.log"

#Move-Item -Force "C:\Users\MSI\Documents\suli\mat review\PowerShell\___LogDeleteOldFiles.log" "C:\Users\MSI\Documents\suli\mat review\PowerShell\___LogDeleteOldFiles2.log"


try
{
    $Lines = Get-Content -Path "C:\Users\MSI\Documents\suli\mat review\batch\DeleteOldFiles.log"
}
catch
{
    Write-Host "Nincs ilyen fájl" -ForegroundColor Red
}
finally
{
    Write-Host "Indíts újra!" -ForegroundColor Cyan
}

Fájlok listázása

<#
1, Az összes PDF (itt most .log) fajl az adott mappaban. Nalam a logok
2, Melyik az 5 legujabb
3, tablazatba: konyvtar, file neve, merete, utolsomodositas,utolso olvasas
4, CSV-be konvertalas
#>

$SourceFolder = "C:\Users\MSI\Documents\suli\mat review\PowerShell"

$PDFfiles = Get-ChildItem -Path $SourceFolder -Filter "*.log"

#$PDFfiles | Select-Object -Property * -First 1

$PDFfiles5 = $PDFfiles | Sort-Object LastWriteTime | Select-Object -Last 5

$PDFfiles5s = $PDFfiles5 | Select-Object -Property Directory,Name,Length,LastWriteTime,LastAccessTime | 
Sort-Object -Property Name

$RiportFileName = $SourceFolder + "\PDFriport.csv"
$RiportFileName

$PDFfiles5s | Export-Csv -Path $RiportFileName -Delimiter ';'

Processek össz memória, processek száma

CLS

$Process = Get-Process
$SumMem = 0
$Count = 0
foreach ($aProcess in $Process)
{
    $SumMem += $Process.PagedMemorySize
    $Count++
}
Write-Host "Processek száma:" $Count 

###### WINDOWS admin projektfeladatok #####

CREATE AD USER

$SamAccountName = "hende"
$Name = "Peter Hende"
$Firstname = "Peter"
$Surname = "Hende"
$Description = "Leendo sysadmin"
$City = "Budapest"
$StreetAddress = "Nyílvessző utca 30."
$Company = "HendeWEB"
$PasswordNeverExpires = "yes"
$AccountPassword = "Password1"
$AccountExpirationDate ="2050.05.05"
$Organization = "HendeWEB"
$Path = "IT"
$Path = "ou="+ $Path + ",dc=phende,dc=comp,dc=local"
if ($PasswordNeverExpires = "yes")
{
    $PasswordNeverExpires = $true
}else
{
    $PasswordNeverExpires = $false
}


New-ADUser -SamAccountName $SamAccountName -Name $Name -GivenName $Firstname -Surname $Surname -Description $Description -City $City -StreetAddress $StreetAddress -Company $Company -Organization $Organization -PasswordNeverExpires $PasswordNeverExpires -AccountPassword (ConvertTo-SecureString "$AccountPassword" -AsPlainText -Force) -AccountExpirationDate $AccountExpirationDate -Path $Path

CREATE GPO, GPO LINK (GPO registry)

$Name = "TestGPO"
$OU= "ou=IT,dc=phende,dc=comp,dc=local"

#$keyb = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\ActiveDesktop'
#$ValueNameb = "NoChangingWallPaper"

New-GPO -name $Name | `
#Set-GPRegistryValue -Key $keyb -ValueName $ValueNamec -Type DWORD -Value 1 | `
New-GPLink -Target $OU

1) Az SQL során létrehozott S meghajtón készíts egy VM mappát – ezt később fogjuk
használni

###### WINDOWS admin projektfeladatok #####

2) Telepíts fel egy AD-t, melynek domain neve a következő névkonvenciót kövesse:
keresztnév első betűje+vezetéknév+ comp.local Azaz, ha a neved: Gipsz Jakab, akkor a domain
név: jgipsz.comp.local

Set-ExecutionPolicy Unrestricted -Force

Add-WindowsFeature AD-Domain-Services -IncludeManagementTools
$SecurePassword  = convertto-securestring "sxCTo768" -asplaintext -force

Import-Module ADDSDeployment
Install-ADDSForest -SafeModeAdministratorPassword $SecurePassword `
-CreateDnsDelegation:$false `
-DatabasePath "C:\Windows\NTDS" `
-DomainMode "WinThreshold" `
-DomainName "phende.comp.local" `
-DomainNetbiosName "PHENDE" `
-ForestMode "WinThreshold" `
-InstallDns:$true `
-LogPath "C:\Windows\NTDS" `
-NoRebootOnCompletion:$false `
-SysvolPath "C:\Windows\SYSVOL" `
-Force:$true

3) A DNS AD integrated legyen


4) Készíts egy IT OU-t,majd ebben további kettőt: COMP és USR
a) A COMP OU-n kapcsold ki az öröklődést

New-ADOrganizationalUnit IT
New-ADOrganizationalUnit USR -Path "OU=IT,DC=PHENDE,DC=COMP,DC=LOCAL"
New-ADOrganizationalUnit COMP -Path "OU=IT,DC=PHENDE,DC=COMP,DC=LOCAL"
Set-GPInheritance -Target "ou=COMP,ou=IT,dc=phende,dc=comp,dc=local" -IsBlocked Yes 

5) Készítsünk egy GPO-t az IT OU-ra a következő beállításokkal
a) Korlátozzuk a Vezérlőpulthoz való hozzáférést (készítsünk egy felhasználót az AD-ben
és állítsuk be arra a felhasználóra)
b) Tiltsuk le a LAN Manager Hash tárolását.
c) Tiltsuk le a kikényszerített rendszer-újraindítást (Windows Update).
d) Tiltsuk le a cserélhető adathordozó-meghajtókat (CD,DVD)
e) Tiltsuk le a Guest accountot (Vendég fiók)
f) Állítsuk a minimális jelszó hosszt 10-re
g) Állítsuk be a rendszert úgy, hogy az utoljára használt 6 jelszót jegyezze meg (Password
history)
h) Hozz létre a desktopon egy parancsikont, amely a kedvenc weboldalatokat nyitja meg
i) Engedélyezzük a registry elérést
j) Állítsuk be, hogy a böngésző (pl. internet explorer) nyitóoldala a google.com legyen

$Name = "TestGPO"
$OU= "ou=IT,dc=phende,dc=comp,dc=local"

$keya = 'HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer'
$ValueNamea = "Nocontrolpanel" 

#$keyb = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\ActiveDesktop'
#$ValueNameb = "NoChangingWallPaper"

$keyc = 'HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU'
$ValueNamec = "NoAutoBootWithLoggedOnUsers"

$keyd = 'HKLM\Software\Policies\Microsoft\Windows\RemovableStorageDevices\{53f56308-b6bf-11d0-94f2-00a0c91efb8b}'
$ValueNamed = "Deny_Execute"

#$keye = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\ActiveDesktop'
#$ValueNamee = "NoChangingWallPaper"

#$keyf = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\ActiveDesktop'
#$ValueNamfe = "NoChangingWallPaper"

#$keyg = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\ActiveDesktop'
#$ValueNameg = "NoChangingWallPaper"

#$keyh = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\ActiveDesktop'
#$ValueNameh = "NoChangingWallPaper"

#$keyi = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\ActiveDesktop'
#$ValueNamei = "NoChangingWallPaper"

#$keyj = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\ActiveDesktop'
#$ValueNamej = "NoChangingWallPaper"

# https://gpsearch.azurewebsites.net/#4847
# https://gpsearch.azurewebsites.net/Default_legacy.aspx

#new-gpo -name TestGPO | new-gplink -target "ou=marketing,dc=contoso,dc=com" | set-gppermissions -permissionlevel gpoedit -targetname "Marketing Admins" -targettype group



# Set-GPPermission -Name "ScreenSaverTimeOut" -TargetName "Petra" -TargetType User -PermissionLevel GPOApply



# new-gpo -name $Name | new-gplink -target "ou=$OU,dc=comp,dc=local"

#New-GPO -name $Name | Set-GPRegistryValue -Key $key `
#-ValueName $ValueName -Type DWORD -Value 1 | Set-GPPermissions -Replace `
#-PermissionLevel None -TargetName 'Authenticated Users' -TargetType group | `
#Set-GPPermissions -PermissionLevel gpoapply -TargetName 'Marketing Users' `
#-TargetType group | New-GPLink -Target 'OU=Marketing,DC=cpandl,DC=com' –Order 1


New-GPO -name $Name | `
Set-GPRegistryValue -Key $keya -ValueName $ValueNamea -Type DWORD -Value 1 | `
#Set-GPRegistryValue -Key $keyb -ValueName $ValueNamec -Type DWORD -Value 1 | `
Set-GPRegistryValue -Key $keyc -ValueName $ValueNamec -Type DWORD -Value 1 | `
Set-GPRegistryValue -Key $keyd -ValueName $ValueNamed -Type DWORD -Value 1 | `
#Set-GPRegistryValue -Key $keye -ValueName $ValueNamee -Type DWORD -Value 1 | `
#Set-GPRegistryValue -Key $keyf -ValueName $ValueNamef -Type DWORD -Value 1 | `
#Set-GPRegistryValue -Key $keyg -ValueName $ValueNameg -Type DWORD -Value 1 | `
#Set-GPRegistryValue -Key $keyh -ValueName $ValueNameh -Type DWORD -Value 1 | `
#Set-GPRegistryValue -Key $keyi -ValueName $ValueNamei -Type DWORD -Value 1 | `
#Set-GPRegistryValue -Key $keyj -ValueName $ValueNamej -Type DWORD -Value 1 | `
New-GPLink -Target $OU

6) A DNS-ben vegyünk fel egy CNAME rekordot a szerverre (a név szabadon választható)


Add-DnsServerResourceRecord -CName -Name "valami" -HostNameAlias "gf-win-u03.phende.comp.local" -ZoneName "phende.comp.local"

# Add-DnsServerResourceRecord -CName -Name "hende" -HostNameAlias "gf-win-u03.phende.comp.local" -ZoneName "phende.comp.local" -AllowUpdateAny  -TimeToLive 01:00:00
# Add-DnsServerResourceRecordCName -Name "hende" -HostNameAlias "gf-win-u03.phende.comp.local" -ZoneName "phende.comp.local"

7) Kérdezzük le a gép arp tábláját és a MAC címet

Get-NetNeighbor
GetMac

8) Telepítsünk fel egy DHCP szervert. Tételezzük fel, hogy a hálózatban 200 kliens, 10 szerver,
5 nyomtató, 4 AP és 3 Layer-3 szintű switch van
a) A scope-ot a fentieknek megfelelően állítsuk be.
b) A scope maradjon inaktív

# https://learn.microsoft.com/en-us/windows-server/networking/technologies/dhcp/dhcp-deploy-wps
# https://argonsys.com/microsoft-cloud/library/how-to-manage-dhcp-using-powershell/
Install-WindowsFeature DHCP -IncludeManagementTools
netsh DHCP add SecurityGroups
Restart-Service dhcpserver

# Add-DhcpServerInDC -DnsName DHCP.phende.comp.local -IPAddress 192.168.1.6
# Get-DhcpServerInDC

Add-DhcpServerV4Scope -Name "DHCP Scope" -StartRange 192.168.1.1 -EndRange 192.168.1.222 -SubnetMask 255.255.255.0
Add-Dhcpserverv4ExclusionRange -ComputerName "phende.comp.local" -ScopeId 192.168.1.0 -StartRange 192.168.1.1 -EndRange 192.168.1.22
Set-DhcpServerv4Scope -ComputerName "phende.comp.local" -ScopeId 192.168.1.0 -State InActive
# Remove-Dhcpserverv4ExclusionRange -ComputerName "phende.comp.local" -ScopeId 192.168.1.0 -EndRange 192.168.1.222
# Set-DhcpServerV4OptionValue -DnsServer 127.0.0.1 -Router 10.39.91.1
# Set-DhcpServerv4Scope -ScopeId 127.0.0.1 -LeaseDuration 1.00:00:00