# Need to know where our script is so we can use full path to all our dependent files.
$InvocationPath = Split-Path -Path $MyInvocation.MyCommand.Path -Parent

function Get-ComputerName()
{
    return [system.environment]::MachineName
}

function Start-PowerLogs {
param (
    [parameter(Mandatory=$true)][string]$PowerLogsPath
)
    # change to $PowerLogsPath directory
    Set-Location -Path "$PowerLogsPath"
            
    # netsh trace start scenario=WLAN maxSize=400 tracefile=mytrace.etl report=yes perfmerge=yes
    $destDir = "$PowerLogsPath\tempFiles"
    $FilesToCab = $null
    $LatestPerftraceEtl = $null
    $LatestDripsWatchdogLiveDump = $null

    $MYHOST = Get-ComputerName
    "$MYHOST" | Set-Content "$PowerLogsPath\out.txt"

    if (-not (Test-Path "$destDir" -pathType container))
    {
        # Path for tempFiles
        "Creating tempFiles directory" | Add-Content "$PowerLogsPath\out.txt"
        New-Item $destDir -ItemType directory 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    }

    Write-Host "Copying Windows Update logs"
    "Copying Windows Update logs" | Add-Content "$PowerLogsPath\out.txt"
    $windowsUpdateLogs = "$env:systemroot\windowsupdate.log"
    if ((Test-Path "$windowsUpdateLogs" -pathType leaf))
    {
        Copy-Item $windowsUpdateLogs $destDir -Force 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    }

    Write-Host "Copying Windows Live Logs"
    "Copying Windows Live Logs" | Add-Content "$PowerLogsPath\out.txt"
    $windowsLiveLogs = "$env:localappdata\Packages\microsoft.windowscommunicationsapps_8wekyb3d8bbwe\LocalState\*.etl"
    Copy-Item $windowsLiveLogs $destDir -Force 2>&1 | Add-Content "$PowerLogsPath\out.txt"

    Write-Host "Copying Network Information"
    "Copying Network Information" | Add-Content "$PowerLogsPath\out.txt" 
    $netTraceCab = "$env:TEMP\NetTraces\NetTrace.cab"
    if ((Test-Path $netTraceCab -pathType leaf))
    {
        Copy-Item $netTraceCab $destDir -Force 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    }
    cmd.exe /c "route print > `"$destDir\route-nic-id.txt`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "ipconfig /all > `"$destDir\ipconfig-out.txt`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"

    Write-Host "Flushing always on network tracing"
    "Flushing always on network tracing" | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "LogMan Update LwtNetLog -fd -ets" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "netsh trace merge %SystemRoot%\System32\LogFiles\WMI\LwtNetLog.etl `"$destDir\LwtNetLog-merged.etl`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    $wifiEtl = "$env:SystemRoot\System32\LogFiles\WMI\Wifi.etl"
    Copy-Item $wifiEtl $destDir -Force 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    
    Write-Host "Capturing BCD information"
    "Capturing BCD information" | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "bcdedit > `"$destDir\bcdedit-out.txt`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"

    Write-Host "Capturing Bitlocker status"
    "Capturing Bitlocker status" | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "manage-bde -status > `"$destDir\bde-status-out.txt`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"

    # look for Drivers that are missing (code ">28<" or ">43<" or ">52<")
    Write-Host "Capturing PNP Information"
    "Capturing PNP Information" | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "ddodiag -o `"$destDir\ddodiag-driverInstall.xml`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    # get some dxdiag output for device tree
    cmd.exe /c "dxdiag /whql:off /t `"$destDir\dxdiag_out.txt`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "driverquery.exe /FO TABLE /V > `"$destDir\$MYHOST.Drivers.log`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    
    Write-Host "Capturing System information"
    "Capturing System information" | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "systeminfo > `"$destDir\systeminfo.txt`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "msinfo32.exe /nfo `"$destDir\$MYHOST.SystemInfo.nfo`" /categories +all" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "reg query `"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion`" /v BuildLab > `"$destDir\osver.txt`"" 2>&1 | `
        Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "reg query `"HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System`" /f SystemBios >> `"$destDir\osver.txt`"" 2>&1 | `
        Add-Content "$PowerLogsPath\out.txt"

    Write-Host "Capturing Power Configuration"
    "Capturing Power Configuration" | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "powercfg /qh > `"$destDir\powercfg.txt`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "powercfg a > `"$destDir\powercfg-a.txt`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "powercfg /requests > `"$destDir\powercfg-requests.txt`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    # Registry power settings
    cmd.exe /c "reg save HKLM\System\CurrentControlSet\Control `"$destDir\powersettings_REG`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"

    Write-Host "Capturing PowerCfg Logs"
    "Capturing PowerCfg Logs" | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "wevtutil qe System /q:`"*[System[(EventID=506 or EventID=507 or EventID=109) and TimeCreated[timediff(@SystemTime) <= 259200000]]]`" /c:100 /f:renderedXml > `"$destDir\cs-exit-events.xml`"" 2>&1 | `
        Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "wevtutil qe System /q:`"*[System[EventID=520 and TimeCreated[timediff(@SystemTime) <= 259200000]]]`" /c:100 /f:TEXT > `"$destDir\%COMPUTERNAME%.BrightnessEngine.log`"" 2>&1 | `
        Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "wevtutil epl System `"$destDir\SystemEventLog.evt`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "wevtutil epl Microsoft-Windows-TaskScheduler/Operational `"$destDir\tasksOperational.evt`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "wevtutil epl Microsoft-Windows-GroupPolicy/Operational `"$destDir\gplog.evt`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "wevtutil epl Microsoft-Windows-PushNotification-Platform/Operational `"$destDir\PushNotificationOp.evt`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "powercfg /srumutil output `"$destDir\srumutil-$MYHOST.csv`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "powercfg /batteryreport output `"$destDir\battery-report-$MYHOST.html`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "powercfg /sleepstudy output `"$destDir\sleepstudy-report-$MYHOST.html`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "powercfg /sleepstudy /duration 20 /output `"$destDir\long20-sleepstudy-report-$MYHOST.html`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "powercfg /sleepstudy /duration 10 /output `"$destDir\long10-sleepstudy-report-$MYHOST.html`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "powercfg /sleepstudy /duration 5  /output `"$destDir\long5-sleepstudy-report-$MYHOST.html`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "powercfg /sleepstudy /duration 10 /output `"$destDir\sleepstudy-report-$MYHOST.xml`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "powercfg /systemsleepdiagnostics /output `"$destDir\system-sleep-diagnostics-$MYHOST`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    $sleepStudyEtls = "$env:windir\system32\SleepStudy\*.etl"
    Copy-Item $sleepStudyEtls $destDir -Force 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    
    "" | Add-Content "$PowerLogsPath\out.txt"
    "Starting Energy Analysis ..." | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "powercfg /energy output `"$destDir\energy-report-$MYHOST.html`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"

    "Capturing telemetry MachineId" | Add-Content "$PowerLogsPath\out.txt"
    cmd.exe /c "reg query `"HKLM\Software\Microsoft\SQMClient`" /v MachineId > `"$destDir\machine_id.txt`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"

    "" | Add-Content "$PowerLogsPath\out.txt"
    "Generating CAB file ..." | Add-Content "$PowerLogsPath\out.txt"

    ".OPTION EXPLICIT" | Set-Content "$destDir\input.ddf"
    "" | Add-Content "$destDir\input.ddf"
    ".Set CabinetName1=PowerLogs.CAB" | Add-Content "$destDir\input.ddf"
    ".Set DiskDirectory1=..\output" | Add-Content "$destDir\input.ddf"
    ".Set MaxDiskSize=0" | Add-Content "$destDir\input.ddf"
    ".Set Cabinet=on" | Add-Content "$destDir\input.ddf"
    ".Set Compress=on" | Add-Content "$destDir\input.ddf"
    cmd.exe /c "dir /b $destDir | findstr /v exclude | findstr /v setup  | findstr /v disk |findstr /v input.ddf >> `"$destDir\input.ddf`"" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    Set-Location -Path $destDir
    cmd.exe /c "makecab /f input.ddf" 2>&1 | Add-Content "$PowerLogsPath\out.txt"

    "" | Add-Content "$PowerLogsPath\out.txt"
    Set-Location -Path $PowerLogsPath
    cmd.exe /c "dir output" 2>&1 | Add-Content "$PowerLogsPath\out.txt"
    Remove-Item $destDir -Force -Recurse 2>&1 | Add-Content "$PowerLogsPath\out.txt"
}

Export-ModuleMember -Function Start-PowerLogs

# SIG # Begin signature block
# MIIPFgYJKoZIhvcNAQcCoIIPBzCCDwMCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDcxqReMup4+POM
# ptiGVU8UExGJ4Edt+g6Uy8ZqGsKRy6CCDBEwggV2MIIEXqADAgECAhMzAAAFdY/t
# ZZABUyRhAAEAAAV1MA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBUZXN0aW5nIFBD
# QSAyMDEwMB4XDTIzMDIxNjE4MzM0MloXDTI0MDUxNjE4MzM0MlowdDELMAkGA1UE
# BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEeMBwGA1UEAxMVTWljcm9zb2Z0
# IENvcnBvcmF0aW9uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAorUr
# gCj5FlJ+7vhjx+0mGUFTOka+WKbcrK7B95uaztftwdrnWN27Jslwy9AWtQJY3826
# OWRV4ajdLBVUB94DUgcw2heDY71cYIC7jcMwpwV6N8FHJN+OwTBzkAUWWwVarEPb
# 957z09miEYlJtASbQ8Sf61Beo2h0h82SRLPU4Q1F4CRN9WlXyn+6u5kulYIUUC0c
# bQP6qe+yukueASohANo9BRI/M6bAebYfvFookHLdybZdNFMo7sr1Bt6mCYdHPlyO
# sFYBXyZd+iQ3P6LQnjeZl9aFXXp6aFW88QawMKk/8ce2YTKAFG8y31/0IQWsAZw/
# iyhPJ9e9f9z8xdAWAQIDAQABo4IB+jCCAfYwPAYJKwYBBAGCNxUHBC8wLQYlKwYB
# BAGCNxUIg8+JTa3yAoWhnwyC+sp9geH7dIFPi/M4gp/5IgIBZAIBFTApBgkrBgEE
# AYI3FQoEHDAaMAwGCisGAQQBgjcKAxUwCgYIKwYBBQUHAwMwDgYDVR0PAQH/BAQD
# AgeAMB8GA1UdJQQYMBYGCCsGAQUFBwMDBgorBgEEAYI3CgMVMB0GA1UdDgQWBBTR
# /PEuPn+0r5mHo7syx14SmaNUSDAfBgNVHSMEGDAWgBS/ZaKrb3WjTkWWVwXPOYf0
# wBUcHDBcBgNVHR8EVTBTMFGgT6BNhktodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
# cGtpb3BzL2NybC9NaWNyb3NvZnQlMjBUZXN0aW5nJTIwUENBJTIwMjAxMCgxKS5j
# cmwwaQYIKwYBBQUHAQEEXTBbMFkGCCsGAQUFBzAChk1odHRwOi8vd3d3Lm1pY3Jv
# c29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRlc3RpbmclMjBQQ0El
# MjAyMDEwKDEpLmNydDBDBgkrBgEEAYI3FAIENh40AE0AUwBJAFQAVABlAHMAdABD
# AG8AZABlAFMAaQBnAG4AaQBuAGcAUwBoAGEAMgAtAEMAUzAMBgNVHRMBAf8EAjAA
# MA0GCSqGSIb3DQEBCwUAA4IBAQAg7Ej3KuUo0ndCL+pCb2eqn8rz77O2j90YQr2Y
# MhMsinWGq1OTp3LZfPNeI3G2BXFtvjIE++ZXjLRa/bnReVrq2p/PikV7zq0WpWzS
# gb1TBvmg80mt7Pgq/RcuNfBlO5t1wRKnmmoR3zZLHmJrXCKKSL55CyL2ZYvi+ilO
# UgcBn4E7fTGAGr41x2aKt7BhnUbiYaVwGdyYKnJv9q+6AC+fI7xnoX2mbO63zWl8
# Se9LfD7P4S/03jwAafqPiHXgkAmw4cgsK4kX9pTS/sYb336dvlilbmcAhtGf1cQ0
# /5h279IUhQb53WulhCAZ3H42KxtetiyNi8MNLoEWK9wh/hb2MIIGkzCCBHugAwIB
# AgITMwAAAC01ekaIyQdx2AAAAAAALTANBgkqhkiG9w0BAQsFADCBkDELMAkGA1UE
# BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE6MDgGA1UEAxMxTWljcm9zb2Z0
# IFRlc3RpbmcgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0yMDEy
# MTAyMDQzMjBaFw0zNTA2MTcyMTA0MTFaMHkxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
# EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
# ZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBUZXN0aW5nIFBDQSAy
# MDEwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvzxggau+7P/XF2Py
# pkLRE2KcsBfOukYaeyIuVXOaVLnG1NHKmP53Rw2OnfBezPhU7/LPKtRi8ak0CgTX
# xQWG8hD1TdOWCGaF2wJ9GNzieiOnmildrnkYzwxj8Br/gampQz+pC7lR8bNIOvxE
# Ll8RxVY6/8oOzYgIwf3H1fU+7+pOG3KLI71FN54fcMGnybggc+3zbD2LIQXPdxL+
# odwH6Q1beAlsMlUQR9A3yMf3+nP+RjTkVhaoN2RT1jX7w4C2jraGkaEQ1sFK9uN6
# 1BEKst4unhCX4IGuEl2IAV3MpMQoUpxg8ArmiK9L6VeK7KMPNx4p9l0h09faXQ7J
# TtuNbQIDAQABo4IB+jCCAfYwDgYDVR0PAQH/BAQDAgGGMBIGCSsGAQQBgjcVAQQF
# AgMBAAEwIwYJKwYBBAGCNxUCBBYEFOqfXzO20F+erestpsECu0A4y+e1MB0GA1Ud
# DgQWBBS/ZaKrb3WjTkWWVwXPOYf0wBUcHDBUBgNVHSAETTBLMEkGBFUdIAAwQTA/
# BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2Nz
# L1JlcG9zaXRvcnkuaHRtMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMA8GA1Ud
# EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUowEEfjCIM+u5MZzK64V2Z/xltNEwWQYD
# VR0fBFIwUDBOoEygSoZIaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwv
# cHJvZHVjdHMvTWljVGVzUm9vQ2VyQXV0XzIwMTAtMDYtMTcuY3JsMIGNBggrBgEF
# BQcBAQSBgDB+ME0GCCsGAQUFBzAChkFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
# cGtpL2NlcnRzL01pY1Rlc1Jvb0NlckF1dF8yMDEwLTA2LTE3LmNydDAtBggrBgEF
# BQcwAYYhaHR0cDovL29uZW9jc3AubWljcm9zb2Z0LmNvbS9vY3NwMA0GCSqGSIb3
# DQEBCwUAA4ICAQAntNCFsp7MD6QqU3PVbdrXMQDI9v9jyPYBEbUYktrctPmvJuj8
# Snm9wWewiAN5Zc81NQVYjuKDBpb1un4SWVCb4PDVPZ0J87tGzYe9dOJ30EYGeiIa
# aStkLLmLOYAM6oInIqIwVyIk2SE/q2lGt8OvwcZevNmPkVYjk6nyJi5EdvS6ciPR
# mW9bRWRT4pWU8bZIQL938LE4lHOQAixrAQiWes5Szp2U85E0nLdaDr5w/I28J/Z1
# +4zW1Nao1prVCOqrosnoNUfVf1kvswfW3FY2l1PiAYp8sGyO57GaztXdBoEOBcDL
# edfcPra9+NLdEF36NkE0g+9dbokFY7KxhUJ8WpMiCmN4yj9LKFLvQbctGMJJY9Ew
# HFifm2pgaiaafKF1Gyz+NruJzEEgpysMo/f9AVBQ/qCdPQQGEWp3QDIaef4ts9QT
# x+RmDKCBDMTFLgFmmhbtUY0JWjLkKn7soz/LIcDUle/p5TiFD4VhfZnAcvYQHXfu
# slnyp+yuhWzASnAQNnOIO6fc1JFIwkDkcM+k/TspfAajzHooSAwXkrOWrjRDV6wI
# 0YzMVHrEyQ0hZ5NnIXbL3lrTkOPjf3NBu1naSNEaySduStDbFVjV3TXoENEnZiug
# JKYSwmhzoYHM1ngipN5rNdqJiK5ukp6E8LDzi3l5/7XctJQY3+ZgHDJosjGCAlsw
# ggJXAgEBMIGQMHkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
# DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
# IzAhBgNVBAMTGk1pY3Jvc29mdCBUZXN0aW5nIFBDQSAyMDEwAhMzAAAFdY/tZZAB
# UyRhAAEAAAV1MA0GCWCGSAFlAwQCAQUAoIGcMBkGCSqGSIb3DQEJAzEMBgorBgEE
# AYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJ
# BDEiBCAscmQ7ULw2c0nC1L+cHyDhzMofOleT0OWueT1d9tCDODAwBgorBgEEAYI3
# AgEMMSIwIKAegBwAUwBTAEMAXABXAGkAbgBSAFQATQBwAGIAbABkMA0GCSqGSIb3
# DQEBAQUABIIBAHNsUeoZDAR7rz10aaHDkdYv/dif+93cHQ7kykq/ndFbbllSZ2xg
# EVNuPE6eaFzBp0e2n8dlKzsdGE4amhs6FIlbWq42meGNwrJ5qFMpHuugtRtcobHT
# SOlSaBkIUAO+Xrx3Lg3Smzyq/TJBic9g1vYsWk4zc3xt2KY8cmd4CqEduhCjx4EM
# fbDw0UFqqVSU5AiJ8yGH9CWplEv4InTBMietFzeEQxcXlPWlZOBDGUF5pVEVg8OY
# 8GN/xOZJYMUWouR+Q1e5jaMocjd+ZjYyGC0Smt68QU+5/0/BzLUFNTL/I14/TL+F
# WlyR5Eqni3+mvQLi84HfslB7KjDSTEB8c+U=
# SIG # End signature block
