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 ####1T#

ALAPOK

# Dies ist ein einzeiliger Kommentar



#Strings
$aString = "Alma"
[string]$bstring = "Korte"

$aInt = 10
[int]$bint = 5

$aInt = $bInt
$aInt += $bInt
$aInt++
$aInt
$aInt = 10
#Airborne numerische Werte
$aFloat = 1,5
[float]$bFloat = 1.5

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

$bFloat

#Blocks

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

$Global:aString = "Globale Zeichenkette, für das gesamte Skript, mit dem Definialast"

ElsoPS

param(
    [string]$Parameter1, # Parameter1 wurde für ..... erzeugt.
    [string]$Parameter2 # Parameter1 wurde für ..... erstellt
)
[Zeichenfolge]$Global:Parameter1=$Parameter1
$Global:Parameter2=$Parameter2

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

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

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


Funktion bRutin2($iInt){
    for ($i = 1;$i -le $iInt;$i++)
    {
        Write-Host $i.ToString()
    }
    $i=1
    while ($i -le $iInt)
    {
        Schreibe-Host $i.ToString()
        $i++
    }
    $i = 1
    do
    {
        Write-Host $i.ToString()
        $i++
    }
    while ($i -le $iInt)
    
    return $i

}
###############################################################################################
#####
####
## Haupt
####
####
###############################################################################################

CLS

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

Write-Host $Global:Parameter1 -ForegroundColor Cyan

Zählerstände

bRutin2 -iInt 5

Eingebaute Variablen

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

Get-Date -Format "jjjj-MM-tt"
Get-Date -Format "jjjj-MM-tt 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 -Eigenschaft * | 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 = Hole-Vorgang
$SumPagedMemorySize = 0
foreach ($aProc in $ProcList)
{
    
    $SumPagedMemorySize += $aProc.PagedMemorySize

}
Write-Host $SumPagedMemorySize

Dateiverwaltung

$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
        $LogZeilen+=$aZeilen
        $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 "No such file" -ForegroundColor Red
}
finally
{
    Write-Host "Neustart!" -ForegroundColor Cyan
}

Auflistung von Dateien

$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 Verzeichnis,Name,Länge,LastWriteTime,LastAccessTime
Sort-Objekt -Eigenschaft Name

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

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

Gesamtspeicher der Prozesse, Anzahl der Prozesse

CLS

$Prozess = Get-Prozess
$SumMem = 0
$Count = 0
foreach ($aProcess in $Process)
{
    $SumMem += $Process.PagedMemorySize
    $Count++
}
Write-Host "Anzahl der Prozesse:" $Count 

###### WINDOWS admin Projektaufgaben #######

AD-BENUTZER ERSTELLEN

$SamKontoname = "hende"
$Name = "Peter Hende"
$Vorname = "Peter"
$SNachname = "Hende"
$Beschreibung = "Leendo sysadmin"
$CStadt = "Budapest"
$StreetAddress = "Nyílvessző utca 30."
$CUnternehmen = "HendeWEB"
$PasswordNeverExpires = "ja"
$AccountPasswort = "Passwort1"
$AccountExpirationDate ="2050.05.05"
$Organisation = "HendeWEB"
$Pfad = "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 -Nachname $Surname -Description $Description -City $City -StreetAddress $StreetAddress -Company $Company -Organisation $Organisation -PasswordNeverExpires $PasswordNeverExpires -AccountPassword (ConvertTo-SecureString "$AccountPassword" -AsPlainText -Force) -AccountExpirationDate $AccountExpirationDate -Path $Path

CREATE GPO, GPO LINK (GPO-Registrierung)

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

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

Neu-GPO-Name $Name
#Set-GPRegistryValue -Key $keyb -ValueName $ValueNamec -Type DWORD -Value 1 ` `
Neu-GPLink -Ziel $OU

1) Erstellen Sie auf dem Laufwerk S, das während SQL erstellt wurde, einen VM-Ordner - wir werden dies später tun
verwenden.

###### WINDOWS admin Projektaufgaben #######

2) Installieren Sie ein AD mit einem Domänennamen, der der folgenden Benennungskonvention entspricht:
erster Buchstabe des Vornamens+Leadname+comp.local Das heißt, wenn Ihr Name Jakab Gipsz ist, dann ist die Domain
Name: jgipsz.comp.local

Set-ExecutionPolicy Unrestricted -Force

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

Modul ADDSDeployment importieren
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 `
-SysvolPfad "C:\Windows\SYSVOL" `
-Force:$true

3) DNS AD sollte integriert werden


4) Erstellen Sie eine OU IT und dann zwei weitere: COMP und USR
a) Schalten Sie die Vererbung auf COMP OU aus

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

5) Erstellen Sie ein GPO für die IT-OU mit den folgenden Einstellungen
a) Beschränken Sie den Zugriff auf das Control Panel (erstellen Sie einen Benutzer in AD
und setzen Sie ihn auf diesen Benutzer)
b) Deaktivieren Sie die Speicherung des LAN Manager Hash.
c) Deaktivieren Sie den erzwungenen Systemneustart (Windows Update).
d) Deaktivieren Sie Laufwerke für Wechselmedien (CD, DVD)
e) Deaktivieren Sie das Gastkonto
f) Setzen Sie die Mindestlänge des Passworts auf 10
g) Stellen Sie das System so ein, dass es sich die letzten 6 verwendeten Passwörter merkt (Passwort
Geschichte)
h) Erstellen Sie eine Verknüpfung auf dem Desktop, um Ihre bevorzugten Websites zu öffnen
i) Erlauben Sie den Zugriff auf die Registry
j) Stellen Sie den Browser (z. B. den Internet Explorer) so ein, dass er google.com öffnet.

$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 = "Verweigern_Ausführen"

#$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 'Authentifizierte Benutzer' -TargetType Gruppe
#Set-GPPermissions -PermissionLevel gpoapply -TargetName 'Marketing Users' `
#-TargetType group | New-GPLink -Target 'OU=Marketing,DC=cpandl,DC=com' -Order 1


Neu-GPO-Name $Name
Set-GPRegistryValue -Key $keya -ValueName $ValueNamea -Type DWORD -Value 1
#Set-GPRegistryValue -Schlüssel $keyb -WertName $ValueNamec -Typ DWORD -Wert 1 | `
Set-GPRegistryValue -Schlüssel $keyc -Wertname $ValueNamec -Typ DWORD -Wert 1 | `
Set-GPRegistryValue -Schlüssel $keyyd -WertName $ValueNamed -Typ DWORD -Wert 1 | `
#Set-GPRegistryValue -Schlüssel $keye -WertName $ValueNamee -Typ DWORD -Wert 1 | `
#Set-GPRegistryValue -Schlüssel $keyf -WertName $ValueNamef -Typ DWORD -Wert 1 | `
#Set-GPRegistryValue -Schlüssel $keyg -WertName $ValueNameg -Typ DWORD -Wert 1 | `
#Set-GPRegistryValue -Schlüssel $keyyh -WertName $ValueNameh -Typ DWORD -Wert 1 | `
#Set-GPRegistryValue -Schlüssel $keyi -WertName $ValueNamei -Typ DWORD -Wert 1 | `
#Set-GPRegistryValue -Schlüssel $keyj -WertName $ValueNamej -Typ DWORD -Wert 1 | `
Neu-GPLink -Ziel $OU

6) Fügen Sie im DNS einen CNAME-Eintrag für den Server hinzu (der Name ist optional)


Add-DnsServerResourceRecord -CName -Name "etwas" -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) Rufen Sie die Arp-Tabelle und die MAC-Adresse des Rechners ab.

Get-NetNeighbor
GetMac

8) Installieren Sie einen DHCP-Server. Nehmen Sie ein Netzwerk mit 200 Clients und 10 Servern an,
5 Drucker, 4 APs und 3 Layer-3-Switches
a) Stellen Sie den Bereich wie oben beschrieben ein.
b) Der Geltungsbereich sollte inaktiv bleiben

# 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
Dienst dhcpserver neu starten

# Add-DhcpServerInDC -DnsName DHCP.phende.comp.local -IPAdresse 192.168.1.6
# Ermitteln-DhcpServerInDC

Add-DhcpServerV4Scope -Name "DHCP Scope" -StartRange 192.168.1.1 -EndRange 192.168.1.222 -SubnetMask 255.255.255.0
Add-Dhcpserverv4AusschlussBereich -Computername "phende.comp.local" -ScopeId 192.168.1.0 -StartBereich 192.168.1.1 -EndBereich 192.168.1.22
Set-DhcpServ4Scope -ComputerName "phende.comp.local" -ScopeId 192.168.1.0 -State InActive
# Remove-Dhcpserververv4ExclusionRange -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-DhcpServ4Scope -ScopeId 127.0.0.1 -LeaseDuration 1.00:00:00