Delen via


about_Logging_Non-Windows

Korte beschrijving

PowerShell registreert interne operaties van de engine, providers en cmdlets.

Lange beschrijving

PowerShell registreert details van PowerShell-bewerkingen, zoals het starten en stoppen van de engine en het starten en stoppen van providers. Ook worden details over PowerShell-opdrachten in een logboek opgeslagen.

Zie about_Loggingvoor meer informatie over logboekregistratie in Windows PowerShell 5.1.

De locatie van PowerShell-logboeken is afhankelijk van het doelplatform.

  • PowerShell registreert in Linux het systeemlogboek dat kan worden doorgestuurd naar een syslog--server. Zie de man pagina's voor uw Linux-distributie voor meer informatie.
  • In macOS wordt het geïntegreerde logboekregistratiesysteem van Apple gebruikt. Zie de documentatie voor ontwikkelaars van Apple over het registreren vanvoor meer informatie.

PowerShell ondersteunt het configureren van twee categorieën logboekregistratie:

  • Module logging - Registreer de pijplijnuitvoeringsgebeurtenissen voor opgegeven modules. Modulelogboekregistratie moet zijn ingeschakeld voor zowel de sessie als specifieke modules. Zie about_PowerShell_Configvoor meer informatie over het configureren van deze logboekregistratie.

    Als modulelogboekregistratie is ingeschakeld via configuratie, kunt u logboekregistratie voor specifieke modules in een sessie in- en uitschakelen door de waarde van de LogPipelineExecutionDetails in te stellen eigenschap van de module.

    Als u bijvoorbeeld modulelogboekregistratie wilt inschakelen voor de PSReadLine module:

    $psrl = Get-Module PSReadLine
    $psrl.LogPipelineExecutionDetails = $true
    Get-Module PSReadLine | Select-Object Name, LogPipelineExecutionDetails
    
    Name       LogPipelineExecutionDetails
    ----       ---------------------------
    PSReadLine                        True
    
  • Logboekregistratie van scriptblokken: noteer de verwerking van opdrachten, scriptblokkeringen, functies en scripts, ongeacht of deze interactief worden aangeroepen of via automatisering.

    Wanneer u Logboekregistratie van scriptblokkering inschakelt, registreert PowerShell de inhoud van alle scriptblokkeringen die worden verwerkt. Zodra deze is ingeschakeld, registreert elke nieuwe PowerShell-sessie deze informatie.

    Notitie

    Het is raadzaam beveiligde logboekregistratie van gebeurtenissen in te schakelen wanneer u logboekregistratie van scripts voor andere doeleinden dan diagnostische doeleinden gebruikt. Zie about_PowerShell_Configvoor meer informatie.

Logboekregistratie configureren in Linux of macOS

De configuratie voor logboekregistratie in Linux en macOS wordt opgeslagen in het powershell.config.json-bestand. Het powershell.config.json-bestand is een JSON--bestand dat zich in de PowerShell-map $PSHOME bevindt. Als dit configuratiebestand niet bestaat, moet u het maken om de standaardinstellingen te wijzigen. Elke installatie van PowerShell maakt gebruik van een eigen kopie van dit bestand.

PowerShell schakelt standaard Informational logboekregistratie in op het Operational-kanaal. U kunt de configuratie wijzigen als u aanvullende logboekuitvoer nodig heeft, zoals uitgebreide uitvoer of het inschakelen van analyse-uitvoer.

De volgende code is een voorbeeldconfiguratie:

{
    "ModuleLogging": {
        "EnableModuleLogging": false,
        "ModuleNames": [
            "PSReadLine",
            "PowerShellGet"
        ]
    },
    "ScriptBlockLogging": {
        "EnableScriptBlockInvocationLogging": true,
        "EnableScriptBlockLogging": true
    },
    "LogLevel": "verbose"
}

Hier volgt een lijst met eigenschappen voor het configureren van PowerShell-logboekregistratie. Als de eigenschap niet wordt vermeld in de configuratie, gebruikt PowerShell de standaardwaarde.

  • LogIdentity
    • Waarden: <string name>, powershell
    • Beschrijving: De naam die moet worden gebruikt bij logboekregistratie. De standaardidentiteit is powershell. Deze waarde kan worden gebruikt om het verschil te zien tussen twee exemplaren van een PowerShell-installatie, zoals een release- en bètaversie. Deze waarde wordt ook gebruikt om logboekuitvoer om te leiden naar een afzonderlijk bestand.
  • LogChannels
    • Waarden: Operational, Analytic
    • Beschrijving: De kanalen die moeten worden ingeschakeld. Scheid de waarden met een komma wanneer u meerdere waarden opgeeft. De standaardwaarde is Operational.
  • Logboekniveau
    • Waarden: Always, Critical, Error, Warning, Informational, Verbose, Debug
    • Beschrijving: Geef één waarde op. De waarden worden weergegeven in een toenemende mate van nadrukkelijkheid. De waarde die u kiest, schakelt zichzelf en alle voorgaande waarden in. De standaardwaarde is Informational.
  • LogKeywords
    • Waarden: Runspace, Pipeline, Protocol, Transport, Host, Cmdlets, Serializer, Session, ManagedPlugin
    • Beschrijving: Trefwoorden bieden de mogelijkheid om logboekregistratie te beperken tot specifieke onderdelen in PowerShell. Standaard zijn alle trefwoorden ingeschakeld en het wijzigen van deze waarde is alleen nuttig voor gespecialiseerde probleemoplossing.
  • PowerShellPolicies
    • Beschrijving: de instelling PowerShellPolicies bevat de ModuleLogging-, ProtectedEventLoggingen ScriptBlockLogging opties. Zie Algemene configuratie-instellingenvoor meer informatie.

PowerShell-logboekgegevens weergeven in logboeken in Linux

PowerShell registreert zich bij het systeemlogboek met behulp van de journald daemon op Linux-distributies zoals Ubuntu en Red Hat Enterprise Linux (RHEL).

De journald daemon slaat logberichten op in een binair formaat. Gebruik het hulpprogramma journalctl om PowerShell-vermeldingen in het logboek op te vragen.

journalctl --grep powershell

De logboekregistratie daemon kan logboekberichten doorsturen naar een Syslog-server (System Logging Protocol). Schakel de optie ForwardToSysLog in het /etc/systemd/journald.conflogboek configuratiebestand in als u syslog wilt gebruiken logboekregistratie op uw Linux-systeem. Dit is de standaardconfiguratie voor veel Linux-distributies.

PowerShell-logboekgegevens weergeven in Syslog in Linux

Gebruik pakketbeheer voor uw Linux-distributie om een syslog-server te installeren, zoals rsyslog als u syslog-logboekregistratie op uw Linux-systeem wilt gebruiken. Sommige Linux-distributies zoals Ubuntu installeren vooraf rsyslog.

Het Syslog-protocol slaat logboekberichten op in een gestandaardiseerde tekstindeling. U kunt elk hulpprogramma voor tekstverwerking gebruiken om syslog inhoud op te vragen of weer te geven.

Standaard schrijft syslog logboekvermeldingen naar de volgende locatie:

  • Op Debian gebaseerde distributies, waaronder Ubuntu: /var/log/syslog
  • Op RHEL-distributies: /var/log/messages

In het volgende voorbeeld wordt de opdracht cat gebruikt om een query uit te voeren op PowerShell syslog vermeldingen in Ubuntu.

cat /var/log/syslog | grep -i powershell

Syslog-berichtindeling

Syslog-berichten hebben de volgende indeling:

TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
  [EVENTID:TASK.OPCODE.LEVEL] MESSAGE
  • TIMESTAMP - een datum/tijd waarop de logboekvermelding is geproduceerd.
  • MACHINENAME : de naam van het systeem waarin het logboek is geproduceerd.
  • PID-: de proces-id van het proces dat de logboekvermelding heeft geschreven.
  • COMMITID : de git-doorvoer-id of tag die wordt gebruikt om de build te produceren.
  • TID- : de thread-id van de thread die de logboekvermelding heeft geschreven.
  • CID- - De hexadecimale kanaal-ID van de logboekinvoer.
    • 0x10 = Operationeel
    • 0x11 = Analyse
  • EVENTID : de gebeurtenis-id van de logboekvermelding.
  • TAAK - De taakidentificatie voor de gebeurtenisvermelding
  • OPCODE - De opcode voor de gebeurtenisvermelding
  • LEVEL - Het logboekniveau voor de gebeurtenisvermelding
  • MESSAGE - Het bericht dat is gekoppeld aan de gebeurtenisvermelding

EVENTID, TASK, OPCODEen LEVEL dezelfde waarden zijn als die worden gebruikt bij het vastleggen in het Windows-gebeurtenislogboek.

PowerShell-logboekbericht naar een afzonderlijk bestand schrijven

Het is ook mogelijk om de PowerShell-logboekvermeldingen om te leiden naar een afzonderlijk bestand. Wanneer de Vermeldingen in het PowerShell-logboek worden omgeleid naar een afzonderlijk bestand, worden ze niet meer vastgelegd in het standaard syslog-bestand.

Met de volgende stappen configureert u PowerShell-logboekvermeldingen op Ubuntu om naar een logboekbestand met de naam powershell.logte schrijven.

  1. Maak een configuratiebestand (conf) voor de Configuratie van het PowerShell-logboek in de /etc/rsyslog.d-map met behulp van een tekstbestandseditor zoals nano. Begin de bestandsnaam met een getal dat kleiner is dan het standaardnummer. Bijvoorbeeld 40-powershell.conf waar de standaardwaarde is 50-default.conf.

    sudo nano /etc/rsyslog.d/40-powershell.conf
    
  2. Voeg de volgende informatie toe aan het bestand 40-powershell.conf:

    :syslogtag, contains, "powershell[" /var/log/powershell.log
    & stop
    
  3. Controleer of /etc/rsyslog.conf een insluitingsinstructie voor het nieuwe bestand heeft. Het kan een algemene instructie bevatten die deze bevat, zoals:

    $IncludeConfig /etc/rsyslog.d/*.conf
    

    Als dit niet gebeurt, moet u handmatig een include-opdracht toevoegen.

  4. Controleer of de kenmerken en machtigingen juist zijn ingesteld.

    ls -l /etc/rsyslog.d/40-powershell.conf
    
    -rw-r--r-- 1 root root   67 Nov 28 12:51 40-powershell.conf
    

    Als uw 40-powershell.conf bestand een ander eigendom of andere machtigingen heeft, voert u de volgende stappen uit:

    1. Stel het eigendom in op root-.

      sudo chown root:root /etc/rsyslog.d/40-powershell.conf
      
    2. Toegangsmachtigingen instellen: root heeft lees- en schrijfrechten, gebruikers hebben leesrechten.

      sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
      
  5. Start de rsyslog-service opnieuw.

    sudo systemctl restart rsyslog.service
    
  6. Voer pwsh uit om PowerShell-gegevens te genereren die moeten worden vastgelegd.

    pwsh
    

    Notitie

    Het /var/log/powershell.log-bestand wordt pas gemaakt nadat de rsyslog-service opnieuw is opgestart en PowerShell gegevens genereert om te registreren.

  7. Voer een query uit op het powershell.log-bestand om te controleren of PowerShell-gegevens worden vastgelegd in het nieuwe bestand.

    cat /var/log/powershell.log
    

PowerShell-logboekgegevens weergeven in macOS

PowerShell logt naar het geïntegreerde logboekregistratiesysteem van Apple, een functie van macOS waarmee systeem- en applicatielogboeken op één centrale locatie kunnen worden verzameld en opgeslagen.

Het geïntegreerde logboekregistratiesysteem van Apple slaat logboekberichten op in binaire indeling. U moet het hulpprogramma log gebruiken om een query uit te voeren op het geïntegreerde logboeksysteem voor PowerShell-logboeken. De PowerShell-logboeken worden niet weergegeven in de Console toepassing op macOS. Console-app is ontworpen voor de oudere op syslog gebaseerde logboekregistratie die voorafgaat aan het geïntegreerde logboekregistratiesysteem.

PowerShell-logboekgegevens weergeven vanaf de opdrachtregel in macOS

Als u PowerShell-logboekgegevens wilt weergeven vanaf een opdrachtregel in macOS, gebruikt u de opdracht log in de Terminal- of een andere shell-hosttoepassing. Deze opdrachten kunnen worden uitgevoerd vanuit PowerShell-, Z Shellof Bash-.

In het volgende voorbeeld wordt de opdracht log gebruikt om de logboekgegevens op uw systeem weer te geven terwijl deze in realtime plaatsvinden. De proces parameter filtert de logboekgegevens alleen voor het pwsh proces. Als er meer dan één exemplaar van pwsh wordt uitgevoerd, accepteert de procesparameter ook een proces-id als waarde. De parameter niveau toont berichten op het opgegeven niveau en hieronder.

log stream --predicate "subsystem == 'com.microsoft.powershell'" --level info

De opdracht log show kan worden gebruikt om logboekitems te exporteren. De opdracht log show biedt opties voor het exporteren van de laatste N items, items sinds een bepaalde tijd of items binnen een bepaalde periode.

Met de volgende opdracht worden bijvoorbeeld items geëxporteerd sinds 9am on April 5, 2022:

log show --start "2022-04-05 09:00:00" --predicate "subsystem == 'com.microsoft.powershell'"

Voer log show --help uit om de helpinformatie voor de opdracht log show weer te geven.

U kunt ook de logboekgegevens uitvoeren in JSON-indeling, zodat u de gebeurtenisgegevens kunt converteren naar PowerShell-objecten. In het volgende voorbeeld worden de gebeurtenissen uitgevoerd in JSON-indeling. De ConvertFrom-Json cmdlet wordt gebruikt om de JSON-gegevens te converteren naar PowerShell-objecten die worden opgeslagen in de $logRecord variabele.

log show --predicate "subsystem == 'com.microsoft.powershell'" --style json |
    ConvertFrom-Json | Set-Variable logRecord

U kunt ook overwegen om de logboeken op te slaan op een veiligere locatie, zoals SIEM (Security Information and Event Management) aggregator. Met Microsoft Defender voor Cloud Apps kunt u SIEM instellen in Azure. Zie Algemene SIEM-integratievoor meer informatie.

Modi en niveaus van PowerShell-logboekgegevens in macOS

Standaard registreert het PowerShell-subsysteem berichten op informatieniveau in het geheugen (modus) en berichten op het standaardniveau op schijf (persistentie) in macOS. Dit gedrag kan worden gewijzigd om een andere modus en logboekregistratieniveau in te schakelen met behulp van de opdracht log config.

In het volgende voorbeeld wordt logboekregistratie en persistentie op informatieniveau ingeschakeld voor het PowerShell-subsysteem:

sudo log config --subsystem com.microsoft.powershell --mode level:info,persist:info

Gebruik de parameter opnieuw instellen om de logboekinstellingen terug te zetten naar de standaardinstellingen voor het PowerShell-subsysteem:

sudo log config --subsystem com.microsoft.powershell --reset

Zie ook