Perrypackettracer / Powershell-scripts-to-use-in-an-active-directory

0 stars 0 forks source link

Powershell script to check for free memory with moving object a min runtime #3

Open Perrypackettracer opened 8 months ago

Perrypackettracer commented 8 months ago

clear

<#
OPDRACHT: Zorg dat hieronder default waarden voor de variabelen $seconds en $ResultFile worden ingesteld

>

$seconds = 60 $ResultFile = "C:"

$MachineName = hostname

Check and set values for seconds and ResultFile from command line arguments

If ($args[0] -Is [int]) {$seconds = $args[0]}

<#
OPDRACHT: Zorg dat ook gecontroleerd wordt of als tweede argument de naam van een resultfile wordt ingevoerd. Zo ja, dan moet de default waarde van $ResultFile daarmee vervangen worden

>

if ($args.Count -ge 2) { $ResultFile = $args[1]

Check if the ResultFile already exists

If (Test-Path -LiteralPath $ResultFile) { Write-Host -ForegroundColor Red "WARNING: " -NoNewline Write-Host "$ResultFile already exists. What do you want to do?" Write-Host "[1] Add the results to this file" Write-Host "[2] Delete it and start with an empty one" Write-Host "[9] Quit" $answer = Read-Host -Prompt "Please make your choice"

<#  
OPDRACHT:
Zorg dat de gebruiker net zolang gevraagd wordt om 1 van bovenstaande opties (1,2,9) in te voeren
tot $answer 1 van deze waarden heeft. Je hebt hier maximaal 3 regels voor nodig.
#>
do {
    $answer = Read-Host "Voer 1, 2 of 9 in"
} until ($answer -eq '1' -or $answer -eq '2' -or $answer -eq '9')

# Process user choice
If ($answer -Eq '2') {
    Set-Content -path $ResultFile -value "DELETE FROM MemoryUsage WHERE ID > 0;"
    Add-Content -path $ResultFile -value "INSERT INTO MemoryUsage (Hostname,FreeMemory,Date) VALUES"
}

<#  
OPDRACHT:
Zorg ervoor dat het programma stopt als het antwoord 9 is. Dit zou in 1 regel kunnen.
#>
do {
    $answer = Read-Host "Voer 1, 2 of 9 in"
} until ($answer -eq '1' -or $answer -eq '2' -or $answer -eq '9'; break)

} else { Set-Content -path $ResultFile -value "DELETE FROM MemoryUsage WHERE ID > 0;" Add-Content -path $ResultFile -value "INSERT INTO MemoryUsage (Hostname,FreeMemory,Date) VALUES" } }

$aantalSeconden = New-timespan -seconds $seconds $startAt = Get-Date $stopAt = (Get-Date) + $aantalSeconden

clear $LineOut = "Checking free virtual memory on $MachineName for $seconds seconds" Write-Host $LineOut

<#
OPDRACHT: Leg in 1 commentaarblok uit wat de volgende 4 regels doen

>

$LengthLineOut = $LineOut.Length For($i=1;$i -le $LengthLineOut;$i++){ Write-Host -NoNewline "=" } Write-Host "`r"

<# De volgende 4 regels dienen om een lijn van '=' tekens af te drukken op basis van de lengte van de variabele $LineOut:

  1. $LengthLineOut = $LineOut.Length: Bereken de lengte van de string in $LineOut en wijs deze toe aan $LengthLineOut.
  2. For($i=1;$i -le $LengthLineOut;$i++): Initialiseer een for-lus waarin $i wordt geïnitialiseerd op 1 en wordt verhoogd tot $LengthLineOut. Deze lus wordt gebruikt om '=' tekens af te drukken op basis van de lengte van $LineOut.
  3. Write-Host -NoNewline "=": Druk een '=' teken af zonder een nieuwe regel toe te voegen, herhaald voor elke iteratie van de for-lus.
  4. Write-Host "`r": Voeg een nieuwe regel toe na het afdrukken van de '=' tekens om naar de volgende regel over te gaan.

    >

<#
OPDRACHT: Zorg ervoor dat de volgende regels net zolang lopen tot de $stopAt voorbij is.

>

$stopAt = 100

do { $FreeMemory = Get-CIMInstance Win32_OperatingSystem | Select FreePhysicalMemory ForEach ($entry in $FreeMemory){ $TimeStamp = Get-Date -Format "yyyyMMddHHmmss" $MemValue = $entry.FreePhysicalMemory $NewLine = "('$MachineName',$MemValue,$TimeStamp)," Add-Content -Path $ResultFile -Value $NewLine $TimeStamp = Get-Date Write-Host "Free memory at ${TimeStamp}:" $entry.FreePhysicalMemory } } until ($MemValue -ge $stopAt)

$FreeMemory = Get-CIMInstance Win32_OperatingSystem | Select FreePhysicalMemory ForEach ($entry in $FreeMemory){ $TimeStamp = Get-Date -Format "yyyyMMddHHmmss" $MemValue = $entry.FreePhysicalMemory $NewLine = "('$MachineName',$MemValue,$TimeStamp)," Add-Content -Path $ResultFile -Value $NewLine $TimeStamp = Get-Date Write-Host "Free memory at ${TimeStamp}:" $entry.FreePhysicalMemory }

<#
OPDRACHT: Zorg er voor dat de gebruiker iets bewegends op het scherm te zien krijgt voordat de volgende check plaatsvindt.

>

$stopAt = 100

do { $FreeMemory = Get-CIMInstance Win32_OperatingSystem | Select FreePhysicalMemory ForEach ($entry in $FreeMemory){ $TimeStamp =

Get-Date -Format "yyyyMMddHHmmss" $MemValue = $entry.FreePhysicalMemory $NewLine = "('$MachineName',$MemValue,$TimeStamp)," Add-Content -Path $ResultFile -Value $NewLine $TimeStamp = Get-Date Write-Host "Free memory at ${TimeStamp}:" $entry.FreePhysicalMemory

    # Laat een bewegend symbool zien voor visuele feedback
    $spinners = "|", "/", "-", "\"
    foreach ($spinner in $spinners) {
        Write-Host -NoNewline $spinner
        Start-Sleep -Milliseconds 100
        Write-Host -NoNewline "`b"  # Backspace om het symbool te wissen
    }
}

} until ($MemValue -ge $stopAt)

clear Write-Host -NoNewline "Monitoring process is done. Results can be found in "

<#
OPDRACHT Voeg aan de volgende regel iets toe waardoor de kleur van het lettertype rood wordt

>

Write-Host ("Free memory at ${TimeStamp}:" $entry.FreePhysicalMemory) -ForegroundColor Red

Write-Host $pwd\$ResultFile

$answer = Read-Host -Prompt "`nDo you want to open it (y/n)?"; While (($answer -ne "y") -And ($answer -ne "n")) { $answer = Read-Host -Prompt "Please make your choice (y/n)"; }

<#
OPDRACHT Vervang hieronder de puntjes (...) door een check: als het antwoord 'y' is moet de file geopend worden

>

$stopAt = 100

do { $FreeMemory = Get-CIMInstance Win32_OperatingSystem | Select FreePhysicalMemory ForEach ($entry in $FreeMemory){ $TimeStamp = Get-Date -Format "yyyyMMddHHmmss" $MemValue = $entry.FreePhysicalMemory $NewLine = "('$MachineName',$MemValue,$TimeStamp)," Add-Content -Path $ResultFile -Value $NewLine $TimeStamp = Get-Date Write-Host "Free memory at ${TimeStamp}:" $entry.FreePhysicalMemory

    # Laat een bewegend symbool zien voor visuele feedback
    $spinners = "|", "/", "-", "\"
    foreach ($spinner in $spinners) {
        Write-Host -NoNewline $spinner
        Start-Sleep -Milliseconds 100
        Write-Host -NoNewline "`b"  # Backspace om het symbool te wissen
    }
}

} until ($MemValue -ge $stopAt)

Vervang de puntjes door een check

$openFile = Read-Host "Wil je het bestand openen? (y/n)" if ($openFile -eq 'y') { Start-Process $ResultFile } If (...) {Invoke-Item $ResultFile} Else {Write-Host "Dan niet joh..."}

Write-Host "================================nScript finished at", (Get-Date), "n" ;



This script has been annotated with comments (in Dutch) to explain the purpose and functionality of each section.