Magic Quadrant™ für Privileged Access Management 2025: Netwrix zum vierten Jahr in Folge anerkannt. Laden Sie den Bericht herunter.

Plattform
Ressourcen­zentrumBlog
Umfassender Leitfaden für PowerShell-Kommentare

Umfassender Leitfaden für PowerShell-Kommentare

Feb 11, 2025

Effektives Kommentieren in PowerShell verbessert die Lesbarkeit, Zusammenarbeit und langfristige Wartbarkeit von Skripten. PowerShell unterstützt Einzeilige (#) und Blockkommentare (<# … #>), sowie fortgeschrittene Techniken wie Inline-Notizen, kommentarbasierte Hilfe und Bereiche zur Organisation. Zu den Best Practices gehören die Erklärung von Logik und Absicht anstelle von Syntax, das Aktualisieren von Kommentaren bei Codeänderungen und das Vermeiden von vagen, veralteten oder übermäßigen Anmerkungen. Strukturiertes Kommentieren macht Skripte klarer, sicherer und einfacher zu debuggen.

Einführung

Wenn Sie Windows PowerShell-Skripte schreiben, ist es wichtig zu verstehen, wie man PowerShell-Kommentare effektiv nutzt. Dieser Artikel kann dabei helfen. Er erklärt die wichtigsten Methoden, wie Sie Kommentare in Ihren Skripten einfügen können, und bietet Anleitungen, wann jede Methode zu verwenden ist. Er erläutert auch beliebte Anwendungsfälle für Kommentare und bietet Best Practices, denen man folgen sollte, sowie häufige Fehler, die es zu vermeiden gilt.

Verständnis von Kommentaren in PowerShell

Kommentare in PowerShell haben eine Vielzahl wertvoller Anwendungen. Sie sind unerlässlich, um Skripte verständlicher und wartbarer zu machen. Kommentare, die den Zweck, die Logik oder die Funktionalität eines Skripts oder eines bestimmten Codeabschnitts erläutern, sind für jeden, der das Skript verwenden, modifizieren oder Fehler beheben muss, sehr hilfreich. Kommentare erleichtern auch die Zusammenarbeit mit anderen Teammitgliedern und reduzieren den Bedarf an mündlichen Erklärungen. Sie helfen auch denen mit weniger PowerShell-Kenntnissen, dem Skript zu folgen und ihre Fähigkeiten zu verbessern.

Kommentare helfen auch Entwicklungs- und Testteams, vorübergehend eine oder mehrere Zeilen Code zu deaktivieren. Kommentare werden vom PowerShell-Interpreter ignoriert, sodass Sie Code einfach deaktivieren können, indem Sie ihn kommentieren. Da der Code auskommentiert und nicht gelöscht wurde, kann er später leicht wiederhergestellt werden. Detaillierte Kommentare verhindern auch Verwirrung bei Aktualisierungen und Fehlerbehebungen, indem sie den Kontext für bestimmte Entscheidungen liefern.

Arten von Kommentaren in PowerShell

Wie man in PowerShell kommentiert

Die zwei grundlegenden Arten von Kommentaren in PowerShell sind Einzeilige und Mehrzeilige (Block-) Kommentare.

Einzeilige Kommentare

Um in PowerShell einen einzeiligen Kommentar zu erstellen, verwenden Sie einfach das Rautenzeichen (#) — jeglicher Text nach dem Rautenzeichen wird vom PowerShell-Interpreter ignoriert. Hier ist ein Beispiel für einen einzeiligen Kommentar:

      # The following script narrow down the users who having logged in for 90 days.

$InactiveUsers = Get-ADUser -Filter {LastLogonDate -lt (Get-Date).AddDays(-90)}
      
      # This is another example of a single-line comment.

Get-Process -Name Notepad
      

Wann man Einzeilige Kommentare verwenden sollte

Hier sind einige der wichtigsten Anwendungsfälle für einzeilige Kommentare:

  • Beschreiben Sie den Zweck einer Zeile oder eines Blocks von Code, der darauf folgt, wie zum Beispiel einer Funktion:
      # Calculate the factorial of a number using recursion.

function Get-Factorial {

    param ([int]$number)

    if ($number -le 1) {

        return 1

    }

return $number * (Get-Factorial -number ($number - 1))

}
      
  • Dokumentieren Sie den Zweck einer Variablen:
      # Store the list of server names to be checked for connectivity

$servers = @("Server1", "Server2", "Server3")
      
  • Erläutern Sie, warum Code vorübergehend hinzugefügt oder auskommentiert wurde:
      # Debugging: Output the current value of the counter

# Write-Output "Counter value is $counter"
      

Mehrzeilige (Block-) Kommentare

Ein PowerShell-Kommentarblock ermöglicht es Ihnen, erläuternde Anmerkungen hinzuzufügen, die sich über mehrere Zeilen erstrecken. Blockkommentare beginnen mit dem Tag <# und enden mit dem #> Tag; aller Text zwischen diesen Tags wird vom PowerShell-Interpreter ignoriert.

Hier ist ein Beispiel für einen mehrzeiligen Kommentar in PowerShell, der detaillierte Informationen über ein Skript liefert:

      <#

This script performs the following tasks:

1. Retrieves the list of all running processes on the system.

2. Filters the processes to include only those consuming more than 100 MB of memory.

3. Outputs the filtered list to the console for review.

Author: Admin

Date: 2025-01-07

#>

# Retrieve all running processes

$processes = Get-Process

# Filter processes using more than 100 MB of memory

$highMemoryProcesses = $processes | Where-Object { $_.WS -gt 100MB }

# Output the filtered processes

$highMemoryProcesses | Format-Table -AutoSize
      
Image

Wann man Blockkommentare verwenden sollte

PowerShell-Blockkommentare sind ideal, wenn Sie lange und detaillierte Erklärungen geben müssen. Obwohl Sie jede Anweisung mit dem Rautensymbol beginnen könnten, sorgt die Verwendung eines Blockkommentars dafür, dass das Skript übersichtlicher und lesbarer bleibt.

Hier sind einige der wichtigsten Verwendungsmöglichkeiten für mehrzeilige Kommentare:

  • Stellen Sie Metadaten über ein Skript bereit:
      <#

Script Name: Cleanup-TempFiles.ps1

Author: Jon Mill

Description: This script deletes temporary files older than 30 days

             from specified directories to free up disk space.

Last Modified: 2025-01-07

#>
      
  • Erklären Sie komplexe Logik oder geben Sie Kontext zu einem Abschnitt des Codes:
      <#

The following block of code checks the connectivity status of multiple servers.

If a server is unreachable, it logs the error and skips to the next one,

ensuring the script doesn't terminate unexpectedly.

#>

foreach ($server in $servers) {

    if (-Not (Test-Connection -ComputerName $server -Count 1 -Quiet)) {

        Write-Output "$server is unreachable" >> error.log

        continue

    }

    # Proceed with the next task

}
      
  • Deaktivieren Sie vorübergehend einen großen Abschnitt des Codes während des Debuggens oder Testens mithilfe von Kommentartags:
      <#

# Commented out the block below for debugging purposes

Write-Output "Starting debugging session"

$debugVar = $true

#>
      

Fortgeschrittene Kommentartechniken

Fortgeschrittene Kommentartechniken wie Inline-Kommentare, kommentarbasierte Hilfe und Abschnittsüberschriften machen Skripte professioneller und benutzerfreundlicher.

Inline-Kommentare

Sie können einen Kommentar in derselben Zeile wie einen Codeabschnitt einfügen, indem Sie ihn mit dem Rautensymbol beginnen. Alles nach dem #-Symbol wird als Kommentar behandelt.

Inline-Kommentare eignen sich am besten für kurze Erklärungen der Logik oder anderer Details, um anderen zu helfen, einen wichtigen Punkt schnell zu verstehen, ohne den Ablauf des Skripts zu unterbrechen. Hier ist ein einfaches Beispiel:

      for ($i = 0; $i -lt 5; $i++) { # Loop from 0 to 4

Write-Output "Iteration $i" }
      

Kommentarbasierte Hilfe für Skripte und Funktionen

Kommentarbasierte Hilfe bietet eine strukturierte Möglichkeit, Skripte innerhalb des Codes zu dokumentieren. Durch die Verwendung spezieller Kommentartags in Mehrzeilenkommentaren können Sie die Informationen festlegen, die über das Skript mit dem Get-Help-Cmdlet bereitgestellt werden sollen. Beispielsweise wird die Beschreibung, die Sie mit dem .SYNOPSIS-Tag angeben, angezeigt, wenn ein Benutzer Get-Help für Ihre Funktion oder Ihr Skript ausführt. Dieser Ansatz führt zu selbst dokumentierendem Code, der die Notwendigkeit einer separaten Dokumentation verringert.

Die vordefinierten Tags umfassen Folgendes:

  • .SYNOPSIS — Verwenden Sie dieses Tag, um eine prägnante Zusammenfassung dessen zu geben, was das Skript oder die Funktion bewirkt:
      .SYNOPSIS

Copies files from one directory to another.
      
  • .DESCRIPTION — Verwenden Sie dieses Tag, um eine detaillierte Erklärung der Funktionalität des Skripts und aller wichtigen Überlegungen für dessen Einsatz zu geben:
      .DESCRIPTION

This function copies files from a source directory to a destination directory.

It allows users to copy files recursively and optionally overwrite existing files.
      
  • .PARAMETER  Verwenden Sie dieses Tag, um jeden vom Skript akzeptierten Parameter zu definieren, einschließlich seiner Funktion, seines Typs und aller spezifischen Regeln für die Verwendung:
      .PARAMETER Source

The path of the source directory from which the files will be copied. The source must be a valid directory path.

.PARAMETER Destination

    The path to the destination directory where the files will be copied to.

    The destination must be a valid directory path.

.PARAMETER Overwrite

    A switch to determine whether existing files at the destination should be overwritten.

If not specified, existing files will not be overwritten.
      
  • .EXAMPLE — Verwenden Sie dieses Tag, um detaillierte Beispiele des Skripts oder der Funktion zu geben, die den Benutzern helfen zu verstehen, wie man es aufruft und welche Ausgaben erwartet werden:
      .EXAMPLE

    Copy-Files -Source "C:\Data" -Destination "D:\Backup" -Overwrite

    Copies files from C:\Data to D:\Backup, overwriting existing files at the destination.
      

Praxisbeispiel für Get-Help-Integration

Das folgende Skript dient dazu, Dateien zu sichern. Die PowerShell-Skriptkommentare am Anfang verwenden die oben detailliert aufgeführten Tags.

      <#

.SYNOPSIS

Backs up files from the source to the destination folder.

.DESCRIPTION

This script copies all files from the specified source folder to the destination folder.

.PARAMETER Source

Specifies the path to the source folder.

.PARAMETER Destination

Specifies the path to the destination folder.

.EXAMPLE

.\Backup-Script.ps1 -Source "C:\Data" -Destination "D:\Backup"

Copies all files from C:\Data to D:\Backup.

#>

param (

    [string]$Source,

    [string]$Destination

)

if (-Not (Test-Path -Path $Source)) {

    Write-Error "Source path does not exist."

    exit

}

if (-Not (Test-Path -Path $Destination)) {

    Write-Host "Destination path does not exist. Creating it..."

    New-Item -ItemType Directory -Path $Destination

}

Copy-Item -Path "$Source\*" -Destination $Destination -Recurse

Write-Host "Backup completed successfully."
      

Das folgende Bildschirmfoto zeigt, wie die Tags es einem Benutzer ermöglichen, schnell Nutzungsinformationen mit dem Befehl Get-Help abzurufen:

Image

Best Practices für das Kommentieren in PowerShell

Um den Code lesbarer und verständlicher für uns selbst und andere zu machen, ist es entscheidend, Kommentare effektiv zu nutzen. Hier sind die besten Praktiken, denen man folgen sollte.

Fügen Sie Kommentare dort ein, wo sie nötig sind, ohne den Code zu überladen

Kommentare sollten häufig im Code verwendet werden, um den Zweck von Funktionen, die Logik hinter komplexen Algorithmen, die Bedeutung von Variablen sowie jegliche Annahmen oder Einschränkungen des Codes zu erklären.

Es ist jedoch wichtig, eine Balance zwischen dem Bereitstellen hilfreicher Kontextinformationen und dem Vermeiden unnötiger Überfrachtung zu finden. Beachten Sie diese Richtlinien:

  • Verwenden Sie Inline- oder Einzeilige Kommentare für kurze Notizen.
  • Verwenden Sie PowerShell-Mehrzeilenkommentare für längere Erklärungen.
  • Vermeiden Sie Kommentare für einfache oder offensichtliche Operationen.
  • Kommentieren Sie den Zweck, nicht die Syntax.
  • Verwenden Sie Kommentare, um Logik oder Absicht zu klären, insbesondere bei komplexem Code.
  • Verwenden Sie Kommentare, um Annahmen, Anforderungen und bekannte Probleme des Skripts hervorzuheben.
  • Folgen Sie dem Formatierungs- und Stilguide, um Kommentare konsistent und ordentlich zu halten.
  • Fügen Sie detaillierte Beschreibungen für Funktionen und Skripte mit der integrierten kommentarbasierten Hilfe hinzu.

Hier ist ein Beispiel für klare, prägnante Kommentare, die Wert hinzufügen, ohne den Leser zu überfordern:

      # Get-Service returns all running services.

Get-Service

# Filter the results to include only services

# related to the World Wide Web.

Get-Service | Where-Object {$_.DisplayName -like "*WWW*"}

# Stop the selected WWW services.

Get-Service | Where-Object {$_.DisplayName -like "*WWW*"} | Stop-Service
      

Vermeiden Sie übermäßigen und zu geringen Einsatz von Kommentaren

Das Kommentieren jeder einzelnen Codezeile kann das Lesen und Verstehen erschweren, besonders wenn der Code an sich bereits selbsterklärend ist. Unten finden Sie ein Beispiel für die übermäßige Verwendung von Kommentaren:

      # Assign the value 10 to the variable $number

$number = 10

# Add 5 to the variable $number

$number = $number + 5
      

Gleichzeitig kann das Fehlen ausreichender Kommentare das Verständnis der Logik und des Zwecks von Code erschweren, insbesondere bei komplexem Code. Zum Beispiel ist der folgende Code dazu bestimmt, alle deaktivierten Benutzer in Active Directory zu aktivieren, aber das Fehlen von Kommentaren erschwert es zu erkennen:

      $users = Get-ADUser -Filter * | Where-Object {$_.Enabled -eq $false}

$users | ForEach-Object {

    Set-ADUser -Identity $_.SamAccountName -Enabled $true

}
      

Verwenden Sie temporäre Kommentare zum Debuggen

Das Auskommentieren von Code ist eine wertvolle Technik zum Debuggen und zur Fehlersuche in Programmen. Es kann Ihnen helfen, Probleme zu isolieren und das Ausführungsverhalten zu verstehen. Vergewissern Sie sich, dass Sie einen Kommentar verwenden, um zu erklären, warum der Code deaktiviert wurde, wie in den folgenden Beispielen dargestellt:

      # Log the value of the Source variable for debugging

Write-Host "Debug: Source path is $Source"

# Temporarily disable file copying to test directory creation

# Copy-Item -Path "$Source\*" -Destination $Destination -Recurse

      

Verwenden Sie mehrere Kommentare für komplexen Code

Um komplexe Logik zu erklären, unterteilen Sie den Code in kleinere Abschnitte und fügen Sie einen Kommentar hinzu, um jeden Abschnitt zu erklären. Hier ist ein Beispiel:

      # Calculate the factorial of a number

function Calculate-Factorial {

    param(

        [int]$Number

)

# Base case: Factorial of 0 is 1

    if ($Number -eq 0) {

        return 1

    }

# Recursive case: Factorial of N is N * Factorial(N-1)

    else {

        return $Number * (Calculate-Factorial ($Number - 1))

    }

}
      

Erklären Sie das Warum, nicht nur das Was

Kommentare zu verwenden, um die zugrundeliegende Logik eines Skripts zu erklären, wird die Wartbarkeit des Codes verbessern, indem sie Kontext für zukünftige Änderungen und Debugging-Aufgaben bietet.

      # Retry the operation up to 3 times to handle intermittent network failures

# This prevents the script from failing on occasional, recoverable issues

for ($i = 0; $i -lt 3; $i++) {

    try {

        # Attempt the operation

        Copy-Item -Path $Source -Destination $Destination

        break  # Exit the loop if the operation is successful

    }

    catch {

        if ($i -eq 2) { throw "Failed after 3 attempts" }

        Start-Sleep -Seconds 2  # Wait before retrying

    }

}
      

Kommentare formatieren, um die Lesbarkeit zu verbessern

Eine effektive Formatierung von Kommentaren verbessert die Lesbarkeit des Codes. Achten Sie genau auf Einrückungen und Ausrichtungen sowie auf die Positionierung von Kommentaren, indem Sie sie konsistent vor dem Code platzieren, den sie beschreiben. Dieser Code zeigt, wie gute Formatierung Kommentare wirksamer macht:

      # This function retrieves a list of all running processes.

function Get-RunningProcesses {

    # Get all running processes

    Get-Process |

        # Select only the process name and ID

        Select-Object ProcessName, ID

}
      

Spezielle Anwendungsfälle für PowerShell-Kommentare

Kommentare zur Versionskontrolle verwenden

Um die Versionskontrolle zu verbessern, verwenden Sie PowerShell-Kommentare, um Änderungen am Skript im Laufe der Zeit zu dokumentieren. Verwenden Sie ein einheitliches Format, das Details wie das Datum, den Autor und den Grund für die Änderung enthält. Diese historische Aufzeichnung hilft Entwicklern, den Kontext hinter jedem Update zu verstehen.

      # Version 2.0 - 2025-01-10

# Added a new parameter for logging options and enhanced error handling.

# Updated the file backup logic to support incremental backups.

param (

    [string]$Source,

    [string]$Destination,

    [switch]$EnableLogging  # New parameter to enable logging

)

# Check if source exists

if (-Not (Test-Path -Path $Source)) {

    Write-Error "Source path does not exist."

    exit

}

# Log file creation if logging is enabled

if ($EnableLogging) {

    $logPath = "$Destination\backup_log.txt"

    "Backup started at $(Get-Date)" | Out-File -Append $logPath

}

# Backup files (incremental logic added in Version 2.0)

if (-Not (Test-Path -Path $Destination)) {

    New-Item -ItemType Directory -Path $Destination

}

Copy-Item -Path "$Source\*" -Destination $Destination -Recurse

# Log completion if logging is enabled

if ($EnableLogging) {

"Backup completed at $(Get-Date)" | Out-File -Append $logPath

}
      

Verwendung von Bereichen zur Code-Organisation

Die <#region und <#endregion Tags können verwendet werden, um logische Abschnitte des Codes zu identifizieren. Zum Beispiel können Sie Teile eines Skripts kennzeichnen, die Aufgaben wie Datenverarbeitung, Konfiguration oder Protokollierung ausführen. Dieser Ansatz erleichtert das Navigieren und Verstehen komplexer Skripte. Entwickler können beispielsweise Abschnitte, an denen sie gerade nicht arbeiten, einklappen, um visuelles Durcheinander zu reduzieren und die Konzentration zu verbessern.

Das folgende Skript ist in drei Bereiche unterteilt: Data Import Functions, Data Processing Functions, und Output Functions. Bereichskommentarblöcke werden verwendet, um ihren Zweck zu beschreiben.

      <#region Introduction

    This script retrieves a list of all running processes.

    It then filters the list to include only processes

    that match a specific criterion.

#>

# Get all running processes

$Processes = Get-Process

<#region Filtering

    Filter processes based on criteria

    (e.g., process name, CPU usage).

#>

$FilteredProcesses = $Processes | Where-Object {$_.ProcessName -eq "notepad"}

<#endregion Filtering

<#region Output

    Display the filtered processes.

#>

$FilteredProcesses | Format-List

<#endregion Output

<#endregion Introduction
      

Fehlerbehebung und Debugging mit PowerShell-Kommentaren

Kommentieren, um Fehler zu isolieren

Kommentare können verwendet werden, um Informationen für das Debugging einzufügen, wie Variablenwerte, potenzielle Problemfelder oder Schritte zur Fehlerbehebung.

Code mit Kommentaren deaktivieren

Wir können die Fehlerquelle eingrenzen, indem wir Abschnitte des Codes vorübergehend auskommentieren, anstatt sie zu löschen.

Dokumentation von Fehlern mit Kommentaren

Kommentare sind eine hervorragende Möglichkeit, bekannte Probleme oder Tipps zur Fehlerbehebung zu dokumentieren, insbesondere für Code, der unter bestimmten Bedingungen anfällig für Fehler ist. Indem Sie Kommentare mit potenziellen Lösungen oder Klarstellungen hinzufügen, helfen Sie sowohl sich selbst als auch anderen, Probleme schnell zu lösen, wenn sie auftreten.

      # Get-Service returns an error on some server versions due to a known bug.

# Workaround: Use WMI to retrieve service status.

try {

    Get-Service -Name "SensorService"

} catch {

    Get-WmiObject Win32_Service -Filter "Name=''SensorService"

}
      
Image

PowerShell-Kommentierung für Zusammenarbeit

Kommentare verbessern die Zusammenarbeit, indem sie Skripte leichter lesbar, verständlich und wartbar machen. Sie können auch das Onboarding neuer Mitwirkender beschleunigen.

Dokumentation von Skripten zur Teamnutzung

Kommentare zu verwenden, um den Zweck eines Skripts zu erklären, die Logik hinter jedem Codebereich und mögliche Fallstricke zu erläutern, verbessert den Wissensaustausch unter Teammitgliedern und reduziert die Zeit für Fehlersuche und -behebung.

Zum Beispiel skizziert der Blockkommentar am Anfang der folgenden Skripte seinen Zweck, Voraussetzungen und Parameter:

      <#

Script Name: Create-ADUserAccounts.ps1

Description: Automates the creation of Active Directory user accounts from a CSV file.

Prerequisites:

  - Active Directory module installed.

  - A valid CSV file with columns: FirstName, LastName, UserName, and Email.

Parameters:

  -CSVPath: Path to the input CSV file.

  -OU: Organizational Unit where accounts will be created.

Usage:

  .\Create-ADUserAccounts.ps1 -CSVPath "C:\Users.csv" -OU "OU=Users,DC=Domain,DC=Com"

#>
      

Wissen durch Kommentare teilen

Kommentare helfen allen Teammitgliedern, die Logik hinter einem Skript, den Zweck jeder Region, die Gründe für die gewählten Ansätze und mögliche Herausforderungen zu verstehen. Dieses gemeinsame Verständnis erleichtert die Fehlersuche, das Debugging und zukünftige Verbesserungen. Wenn beispielsweise ein Skript eine Umgehung für eine bekannte Softwareeinschränkung enthält, können Kommentare das Problem dokumentieren und die Lösung rechtfertigen, sodass andere die Recherche nicht duplizieren müssen.

Hier ist ein Beispiel dafür, wie man Kommentare effektiv nutzen kann, um Informationen über ein Skript zum Neustarten eines Dienstes zu teilen, falls dieser nicht läuft:

      <#

Script Name: Ensure-ServiceRunning.ps1

Description: Checks if a specified service is running and restarts it if necessary.

Purpose:

  - Ensures critical services stay operational without manual intervention.

Decisions:

  - Used “Get-Service” for simplicity and compatibility.

  - Restart logic avoids redundancy by checking the current status first.

Usage:

  .\Ensure-ServiceRunning.ps1 -ServiceName "Spooler"

#>

param (

    [Parameter(Mandatory)]

    [string]$ServiceName  # Name of the service to check

)

# Check the current status of the service

$service = Get-Service -Name $ServiceName -ErrorAction Stop

if ($service.Status -ne "Running") {

    # Log and attempt to restart the service if not running

    Write-Host "Service '$ServiceName' is not running. Attempting to restart..."

    try {

        Restart-Service -Name $ServiceName -Force

        Write-Host "Service '$ServiceName' has been restarted successfully."

    } catch {

        Write-Error "Failed to restart the service '$ServiceName': $_"

    }

} else {

    Write-Host "Service '$ServiceName' is already running."

}
      

Beispiele und Szenarien für das Kommentieren in PowerShell

Das folgende Skript überwacht die Festplattennutzung und sendet eine E-Mail-Warnung, wenn der freie Speicherplatz gering ist:

      <#

Script Name: Monitor-DiskUsage.ps1

Description: Checks each logical drive and sends an alert if free space is below the defined threshold.

Purpose:

  - Prevents system issues caused by insufficient storage.

Usage:

  .\Monitor-DiskUsage.ps1 -Threshold 10 -Email "admin@Netwrix.com"

#>

param (

    [Parameter(Mandatory)]

    [int]$Threshold,       # Minimum free space in GB to trigger an alert

    [Parameter(Mandatory)]

    [string]$Email         # Email address for the alert

)

# Retrieve disk information

$drives = Get-PSDrive -PSProvider FileSystem

foreach ($drive in $drives) {

    if ($drive.Free -gt 0) {

        $freeSpaceGB = [math]::Round($drive.Free / 1GB, 2)

        if ($freeSpaceGB -lt $Threshold) {

            Write-Warning "Drive $($drive.Name) has low space: $freeSpaceGB GB remaining."

            # Send an alert email (replace with real SMTP details)

            try {

                Send-MailMessage -From "alerts@netwrix.com" -To $Email -Subject "Low Disk Space Alert" `

                    -Body "Drive $($drive.Name) has only $freeSpaceGB GB remaining." `

                    -SmtpServer "smtp.domain.com"

            } catch {

                Write-Error "Failed to send alert email: $_"

            }

        }

    }

}
      

Das untenstehende Skript bereinigt Benutzerkonten im Active Directory, indem es inaktive Konten deaktiviert und sie in eine bestimmte OU verschiebt:

      <#

Script Name: Cleanup-ADUsers.ps1

Description: Disables and moves inactive user accounts to a specified OU.

Purpose:

  - Helps maintain a clean and secure Active Directory environment.

Usage:

  .\Cleanup-ADUsers.ps1 -OU "OU=Inactive,DC=Netwrix,DC=Com" -DaysInactive 90

#>

param (

    [Parameter(Mandatory)]

    [string]$OU,           # Target OU for inactive users

    [Parameter(Mandatory)]

    [int]$DaysInactive     # Number of days since last logon

)

# Get the current date and calculate the inactivity threshold

$thresholdDate = (Get-Date).AddDays(-$DaysInactive)

# Find inactive user accounts

$inactiveUsers = Get-ADUser -Filter {LastLogonDate -lt $thresholdDate -and Enabled -eq $true}

foreach ($user in $inactiveUsers) {

    Write-Host "Disabling and moving user: $($user.SamAccountName)"

    # Disable the account

    Disable-ADAccount -Identity $user.SamAccountName

    # Move the account to the specified OU

    Move-ADObject -Identity $user.DistinguishedName -TargetPath $OU

}
      

Häufige Fehler beim Kommentieren

Einige Kommentare in Skripten stiften mehr Verwirrung als Klarheit. Hier sind einige der häufigsten Fehler beim Verwenden von PowerShell-Kommentaren und wie man sie vermeidet.

Unklare oder offensichtliche Kommentare

Einer der häufigsten Fehler ist das Schreiben von Kommentaren, die zu vage oder offensichtlich sind, wie dieser hier:

      # Set the variable to 5

$number = 5
      

Konzentrieren Sie sich stattdessen darauf zu erklären, warum eine bestimmte Entscheidung getroffen wurde oder warum eine komplexe Operation durchgeführt wird, besonders wenn der Code verwirrend sein könnte oder es mehrere mögliche Ansätze gibt.

      # Assign the default retry count to handle intermittent failures

$retryCount = 5
      

Unpräzise oder veraltete Kommentare

Manchmal werden Kommentare nicht aktualisiert, wenn sich der Code ändert, was zu ungenauen oder irreführenden Informationen führen kann. Zum Beispiel wurde hier der Backup-Pfad geändert, aber der Kommentar wurde nicht aktualisiert, was den Leser in die Irre führen kann:

      # This script backs up data to a network drive

Backup-Data -Path "C:\Data"
      

Stellen Sie sicher, dass Kommentare immer dann aktualisiert werden, wenn sich der Code ändert. Überprüfen und refaktorisieren Sie Ihre Kommentare regelmäßig als Teil der Wartung Ihres Codes, um sicherzustellen, dass sie relevant bleiben.

Übermäßiger Gebrauch von Kommentaren

Mancher Code ist mit unnötigen Kommentaren für jede Zeile oder einfache Operationen überfüllt.

      # Initialize the variable

$number = 10

# Increment the variable by 1

$number++
      

Fügen Sie Kommentare nur dort ein, wo sie einen Mehrwert bieten, typischerweise für komplexe Logik, ungewöhnliche Lösungen oder Entscheidungen, die für einen anderen Entwickler nicht sofort offensichtlich sein könnten.

Kommentare nicht verwenden, um komplexen Code zu erklären

Wenn Ihr Skript einen Abschnitt mit komplexem oder nicht intuitivem Code enthält, stellen Sie sicher, dass Sie ihn erklären. Zum Beispiel ist ohne einen Kommentar unklar, warum diese spezifischen Berechnungen durchgeführt werden oder was 1,15 darstellt:

      $finalPrice = $basePrice * (1 - $discountPercentage) * 1.15
      

Bei komplexem oder kryptischem Code geben Sie den Kontext an, warum bestimmte Formeln, Berechnungen oder Algorithmen verwendet werden.

      # Calculate the final price including a 15% tax and applying the discount

$finalPrice = $basePrice * (1 - $discountPercentage) * 1.15
      

Code auskommentieren statt zu entfernen

Entwickler lassen manchmal auskommentierten Code zurück, der von Tests übrig geblieben ist oder anderweitig nicht mehr benötigt wird. Dies verursacht Unordnung im Skript und führt zu Verwirrung darüber, ob der Code jemals wieder aktiviert werden sollte.

      # $oldValue = Get-Item "C:\OldFile.txt"

# $oldValue.Delete()
      

Entfernen Sie toten Code aus dem Skript, anstatt ihn zu kommentieren. Wenn Sie Code für zukünftige Referenzen behalten müssen, dokumentieren Sie diesen Zweck klar.

Fazit

Kommentare sind entscheidend für professionelle und wartbare PowerShell-Skripte. Richtig verwendet, machen sie den Code leichter verständlich, debuggen, troubleshooten, warten und erweitern. Effektives Kommentieren beinhaltet die Dokumentation des Zwecks des Skripts, Entscheidungen, Annahmen und potenzieller Probleme. Entwickler sollten darauf achten, Kommentare weder zu über- noch zu untergebrauchen und Formatierungsstandards zu adoptieren, um die Lesbarkeit zu gewährleisten.

Effektives Kommentieren ist keine einmalige Aufgabe, sondern ein fortlaufender Prozess. Das Überprüfen und Aktualisieren von Kommentaren, wann immer der Code geändert wird, hilft sicherzustellen, dass die Kommentare den aktuellen Zustand des Skripts genau widerspiegeln, um Verwirrung und Fehler zu vermeiden.

FAQ

Können Kommentare die Leistung von PowerShell-Skripten beeinflussen?

Kommentare werden vom PowerShell-Interpreter während der Ausführung nicht verarbeitet, daher beeinflussen sie die Leistung von Skripten zur Laufzeit nicht. Dennoch ist es eine gute Praxis, Kommentare knapp und relevant zu halten, damit sie den größten Nutzen bieten.

Wie oft sollte ich Kommentare in meinen Skripten aktualisieren?

Kommentare sollten überprüft und aktualisiert werden, wann immer wesentliche Änderungen am Code vorgenommen werden, wie zum Beispiel beim Hinzufügen neuer Funktionen, Ändern bestehender Funktionalitäten oder Beheben von Fehlern. Kommentare sollten immer den aktuellen Zustand des Skripts widerspiegeln.

Wie kann ich in PowerShell schnell mehrere Zeilen auskommentieren?

Sie können schnell mehrere Zeilen in PowerShell auskommentieren, indem Sie die Blockkommentar-Syntax verwenden. Schließen Sie einfach die Codezeilen zwischen <# am Anfang und #> am Ende ein.

Was ist der Unterschied zwischen Inline-Kommentaren und Blockkommentaren?

Inline-Kommentare beginnen mit dem Symbol # und befinden sich in derselben Zeile wie der Code, auf den sie sich beziehen. Sie eignen sich am besten für kurze Erklärungen.

Blockkommentare können sich über mehrere Zeilen erstrecken, eingeschlossen von den Begrenzern <# und #>. Sie sind besonders nützlich, um detaillierte Erklärungen zu liefern, komplexe Logik zu dokumentieren oder einen Abschnitt des Codes vorübergehend zu deaktivieren.

Teilen auf

Erfahren Sie mehr

Über den Autor

Asset Not Found

Jonathan Blackwell

Leiter der Softwareentwicklung

Seit 2012 hat Jonathan Blackwell, ein Ingenieur und Innovator, eine führende Rolle in der Ingenieurskunst übernommen, die Netwrix GroupID an die Spitze des Gruppen- und Benutzermanagements für Active Directory und Azure AD Umgebungen gebracht hat. Seine Erfahrung in Entwicklung, Marketing und Vertrieb ermöglicht es Jonathan, den Identity-Markt und die Denkweise der Käufer vollständig zu verstehen.