kb4560960 - 0x80073701

Page 1 of 2 12 LastLast

  1. Posts : 8
    Windows 11
       #1

    kb4560960 - 0x80073701


    Hi,

    I can't install kb4560960 - 0x80073701

    Windows 10.0.18363

    CMD:
    Code:
    DISM.exe /Online /Add-Package /PackagePath:C:\Users\aq\Desktop\kb4560960\Windows10.0-KB4560960-x64_PSFX.cab /LogPath:C:\Users\aq\Desktop\kb4560960.log
    CBS.log

    Code:
    (0)  AddCat: flags: 1 catfile: @0x14018d349e0
    2020-06-29 12:05:10, Error                 CSI    000001b6@2020/6/29:10:05:10.677 (F) onecore\base\wcp\componentstore\csd_locking.cpp(95): Error STATUS_SXS_ASSEMBLY_MISSING originated in function CCSDirectTransaction::LockComponent expression: (null)
    2020-06-29 12:05:10, Error                 CSI    000001b7 (F) STATUS_SXS_ASSEMBLY_MISSING #856751# from CCSDirectTransaction::OperateEnding at index 0 of 1 operations, disposition 2[gle=0xd015000c]
    2020-06-29 12:05:10, Error                 CSI    000001b8 (F) HRESULT_FROM_WIN32(ERROR_SXS_ASSEMBLY_MISSING) #856605# from Windows::ServicingAPI::CCSITransaction::ICSITransaction_PinDeployment(Flags = 0, a = Microsoft-Windows-ProjFS-Deployment, version 10.0.18362.1, arch amd64, nonSxS, pkt {l:8 b:31bf3856ad364e35}, cb = (null), s = (null), rid = 'Microsoft-Windows-ProjFS-Package~31bf3856ad364e35~amd64~~10.0.18362.1.0f1f6213531945ccfd5f99e2750305ed', rah = (null), manpath = (null), catpath = (null), ed = 0, disp = 0)[gle=0x80073701]
    2020-06-29 12:05:10, Info                  CBS    Failed to pin deployment while resolving Update: Microsoft-Windows-ProjFS-Package~31bf3856ad364e35~amd64~~10.0.18362.1.0f1f6213531945ccfd5f99e2750305ed from file: (null) [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]
    2020-06-29 12:05:10, Info                  CBS    Failed to bulk stage deployment manifest and pin deployment for package:Microsoft-Windows-ServerManager-UX-Client-Package~31bf3856ad364e35~amd64~en-US~10.0.18362.1 [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]
    2020-06-29 12:05:10, Info                  CBS    CommitPackagesState: Started persisting state of packages
    2020-06-29 12:05:10, Info                  CBS    CommitPackagesState: Completed persisting state of packages
    2020-06-29 12:05:10, Info                  CSI    000001b9@2020/6/29:10:05:10.702 CSI Transaction @0x1401458acb0 destroyed
    2020-06-29 12:05:10, Info                  CBS    Perf: Resolve chain complete.
    2020-06-29 12:05:10, Info                  CBS    Failed to resolve execution chain. [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]
    2020-06-29 12:05:10, Error                 CBS    Failed to process single phase execution. [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]
    2020-06-29 12:05:10, Info                  CBS    WER: Generating failure report for package: Package_for_RollupFix~31bf3856ad364e35~amd64~~18362.900.1.8, status: 0x80073701, failure source: Resolve, start state: Absent, target state: Installed, client id: DISM Package Manager Provider
    2020-06-29 12:05:10, Info                  CBS    Not able to query DisableWerReporting flag.  Assuming not set... [HRESULT = 0x80070002 - ERROR_FILE_NOT_FOUND]
    2020-06-29 12:05:10, Info                  CBS    Added C:\WINDOWS\Logs\CBS\CBS.log to WER report.
    2020-06-29 12:05:10, Info                  CBS    Added C:\WINDOWS\Logs\CBS\CbsPersist_20200629092710.log to WER report.
    2020-06-29 12:05:10, Info                  CBS    Added C:\WINDOWS\Logs\CBS\CbsPersist_20200629090626.cab to WER report.
    2020-06-29 12:05:10, Info                  CBS    Not able to add %windir%\winsxs\poqexec.log to WER report. [HRESULT = 0x80070002 - ERROR_FILE_NOT_FOUND]
    2020-06-29 12:05:10, Info                  CBS    Not able to add %windir%\winsxs\pending.xml to WER report. [HRESULT = 0x80070002 - ERROR_FILE_NOT_FOUND]
    2020-06-29 12:05:10, Info                  CBS    Not able to add %windir%\winsxs\pending.xml.bad to WER report. [HRESULT = 0x80070002 - ERROR_FILE_NOT_FOUND]
    2020-06-29 12:05:11, Info                  CBS    Reboot mark cleared
    2020-06-29 12:05:11, Info                  CBS    Winlogon: Simplifying Winlogon CreateSession notifications
    2020-06-29 12:05:11, Info                  CBS    Winlogon: Deregistering for CreateSession notifications
    2020-06-29 12:05:11, Info                  CBS    FinalCommitPackagesState: Started persisting state of packages
    2020-06-29 12:05:11, Info                  CBS    Reporting package change for package: Package_for_RollupFix~31bf3856ad364e35~amd64~~18362.900.1.8, current: Absent, pending: Default, start: Absent, applicable: Installed, target: Installed, limit: Installed, status: 0x0, failure source: Resolve, reboot required: False, client id: DISM Package Manager Provider, initiated offline: False, execution sequence: 108, first merged sequence: 108, reboot reason: REBOOT_NOT_REQUIRED, RM App session: -1, RM App name: N/A, FileName in use: N/A, release type: Update, OC operation: False, download source: 0, download time (secs): 4294967295, download status: 0x0 (S_OK), Express download: False, Download Size: 0
    2020-06-29 12:05:11, Info                  CBS    Reporting package change completion for package: Package_for_RollupFix~31bf3856ad364e35~amd64~~18362.900.1.8, current: Absent, original: Absent, target: Installed, status: 0x80073701, failure source: Resolve, failure details: "(null)", client id: DISM Package Manager Provider, initiated offline: False, execution sequence: 108, first merged sequence: 108, pending decision: InteractiveInstallFailed, primitive execution context: Interactive 
    2020-06-29 12:05:11, Info                  CBS    The store corruption status report is incomplete. [HRESULT = 0x80070002 - ERROR_FILE_NOT_FOUND]
    2020-06-29 12:05:11, Info                  CBS    Resolve time performance datapoint is invalid. [HRESULT = 0x80070490 - ERROR_NOT_FOUND]
    2020-06-29 12:05:11, Info                  CBS    Stage time performance datapoint is invalid. [HRESULT = 0x80070490 - ERROR_NOT_FOUND]
    2020-06-29 12:05:11, Info                  CBS    Execute time performance datapoint is invalid. [HRESULT = 0x80070490 - ERROR_NOT_FOUND]
    2020-06-29 12:05:11, Info                  CBS    FinalCommitPackagesState: Completed persisting state of packages
    2020-06-29 12:05:11, Info                  CBS    Enabling LKG boot option
    2020-06-29 12:05:11, Info                  CBS    Exec: End: nested restore point - complete.
    2020-06-29 12:05:11, Info                  CBS    Exec: Will not run corruption repair because no store corruption found.
    2020-06-29 12:05:11, Info                  CBS    Exec: Processing complete.  Session: 30821884_174995287, Package: Package_for_RollupFix~31bf3856ad364e35~amd64~~18362.900.1.8, Identifier: KB4560960 [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]
    2020-06-29 12:05:11, Info                  CBS    Removing the pending hard reserve adjustment for Client: DISM Package Manager Provider, Session: 30821884_174995287
    2020-06-29 12:05:11, Error                 CBS    Failed to perform operation.  [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]
    2020-06-29 12:05:11, Info                  CBS    Session: 30821884_174995287 finalized. Reboot required: no [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]
    2020-06-29 12:05:11, Info                  CBS    Failed to FinalizeEx using worker session [HRESULT = 0x80073701]
    2020-06-29 12:05:11, Info                  CBS    Maint: idle processing paused
    2020-06-29 12:05:11, Info                  CBS    Session: 30821884_3336761266 initialized by client DISM Package Manager Provider, external staging directory: (null), external registry directory: (null)
    a
    Please help. I can send additional logs if needed.
      My Computer


  2. Posts : 42,982
    Win 10 Pro (22H2) (2nd PC is 22H2)
       #2

    Hi, welcome to tenforums.

    I suggest you first perform basic disk and file system checks:

    HD Tune v2.55 (free) Health and Error scan tabs (e.g. from Softpedia.com)

    If ok from an admin command prompt run
    chkdsk c: /scan

    If ok, proceed to an in-place upgrade repair install - which keeps all progs and data- for which you will need a build 1909 iso.
    (Some might suggest upgrading to build 2004 at this point, but there are known bugs which affect some and not everyone is being offered it yet).

    If you have one, or a 1909 bootable disk, you can use those- login as normal, and run setup.exe from the mounted iso or disk.

    If not, see the tutorial on how to download an iso for Win 10 - section on Heidoc iso downloader.

    Make sure you have at least -say- 30Gb free on C:

    Tutorial for in-place upgrade install available if needed.
      My Computers


  3. Posts : 8
    Windows 11
    Thread Starter
       #3

    Disk surface is fine. The "chkdsk c: /scan" check is also ok.

    I can't perform " in-place upgrade repair install " because I can't disable/unistall AV (McAfee). Is there no other way?
      My Computer


  4. Posts : 42,982
    Win 10 Pro (22H2) (2nd PC is 22H2)
       #4

    Thank you for your reply.

    a. Why do you think you can't perform an in-place upgrade repair install.. have you tried and does it fail? And why do you think it's because of McAfee s/w?

    b. What prevents you from uninstalling it? Does uninstalling fail?

    c. If you can't uninstall it, something definitely needs fixing. Have you considered
    https://kc.mcafee.com/corporate/inde...ent&id=kb65863

    (Most AV's provide a means of uninstalling their product when normal uninstall fails).

    Is there no other way?
    If an in-p upgrade repair install fails, upgrading is more likely to. So that's not available.

    You could, of course, back up (hopefully you have) and perform a clean install, or a reset e.g.
    Reset Windows 10
      My Computers


  5. Posts : 8
    Windows 11
    Thread Starter
       #5

    Hi,

    I assume that 'uninstall AV' was a required pre-condition. If that's not the case then I will try "in-place upgrade repair install" and post results.
      My Computer


  6. Posts : 42,982
    Win 10 Pro (22H2) (2nd PC is 22H2)
       #6

    Ok, iso from here for 1909 if you don't already have one:
    Download Windows 10 ISO File

    Options 5,6
      My Computers


  7. Posts : 8
    Windows 11
    Thread Starter
       #7

    Well,

    trying install from ISO I got:
    Code:
    0x1900101-0x20017 / Error in the installation in the SAFE_OS phase with an error during the BOOT
      My Computer


  8. Posts : 42,982
    Win 10 Pro (22H2) (2nd PC is 22H2)
       #8

    That's not a good sign at all. Unfortunately diagnosing upgrade errors is next to impossible- plenty of examples of threads looking at the log files running for days without outcome
    0x1900101-0x20017 is typically related to driver incompatibility.
    https://docs.microsoft.com/en-us/win...upgrade-errors

    https://support.microsoft.com/en-gb/...sion-of-window

    And see the tutorial on upgrading to Win 10 which has a useful section on troubleshooting and links to related articles.

    You might be able to work out which drivers are the problem by looking at the log files.

    MS offers
    setupdiag.exe
    (Google) which it purports will give some analysis, but so far it hasn't proved useful.

    You might consider post #2 here:
    Windows 10 Recovery Tools - Bootable Rescue Disk
    - useful tool..

    or one of the forms of resetting or refreshing Windows.
    Reset Windows 10
      My Computers


  9. Posts : 41,472
    windows 10 professional version 1607 build 14393.969 64 bit
       #9

    There are log collectors used in another Ten Forums room.
    Run V2 and upload results directly into this thread:
    BSOD - Posting Instructions

    How to Upload and Post Screenshots and Files at Ten Forums


    Open administrative Powershell and copy and paste:

    Code:
    function wh   
        {  
            Param ( [parameter (Mandatory = $true)][string]$txt )  
            Write-Host $txt -ForegroundColor Green -BackgroundColor Black -NoNewline  
            ##Example usage wh "Alias for `n Write-Host"  
      
        } ## End function wh  
      
      
    function StartScript   
        {  
            ##Locating Temp Dir and writing Transcript  
            $global:tempDir = [System.IO.Path]::GetTempPath()   
            MD $tempDir\LOGS -EA SilentlyContinue   
            CD $tempDir\LOGS  
            $txtCount = Get-Item $tempDir/LOGS/*.TXT -EA SilentlyContinue  
            if((Get-Host).Version.Major -cge 5) ##WIN7 Not Supported  
                {  
                    if($txtCount.Count -cge 1)   
                    {Start-Transcript -Append -Path $tempDir/LOGS/Event-Search.TXT}   
                    Else{Start-Transcript -Path $tempDir\LOGS\Event-Search.TXT}   
                }  
      
            $global:explore = $tempDir + "LOGS\"  
            $global:Ver = "1.6.3"  
            wh "`nLog Collection... (V$Ver)`n"  
      
            #clearing previous actions  
            Stop-Job *  
      
            #Initialize CheckBox Vars to $True/$False  
                $Global:EventsCollect = $true; $Global:SetupDiagCollect = $true  
                    $Global:UpdatesCollect = $true; $Global:WLANCollect = $true  
                        $Global:PowerCollect = $true; $Global:GPCollect = $true  
                            $Global:miscCollect = $true; $Global:bingCollect = $true  
                                $Global:eventOut = $false        
            #Clear Jobs  
            Stop-Job *  
            Remove-Job *  
                                              
        } ## End function Start-Script  
      
      
    function SetupDiagFunc  
        {  
            wh "`n Grabbing SetupDiag.exe ..."       
            Invoke-WebRequest https://go.microsoft.com/fwlink/?linkid=870142 -OutFile $tempDir\SetupDiag.exe -TimeoutSec 3 -UseBasicParsing  
                #check for successful download  
                if((Get-Item $tempDir\SetupDiag.exe).length -gt 100000)  
                    {  
                      wh "`nSuccessful DL!"  
                      wh "`n Invoking SetupDiag.exe ..."  
                      $SetupDiag = {CMD.EXE /C "%temp%\setupdiag.exe /Verbose /Output:%temp%\SetupDiag-Log.txt"}  
      
                      ## Kick-Off SetupDiagJob  
                      Start-Job -Name SetupDiagJob -ScriptBlock $SetupDiag                     
                      
                    }Else{Write-Host "`nDownload of SetupDiag.exe Failed!" -BackgroundColor RED }  
      
        } ## End Function SetupDiagFunc  
      
      
    function EventSearch  
        {  
        wh "`n Starting EventSearch Job-Function ...`n"  
        ## Gathering Events from System using Get-WinEvent via Job  
        $EventSearchJob =   
            {  
            $evtPaths = Get-Item C:\Windows\System32\Winevt\Logs\*.evtx -Exclude "*PowerShell*",   
                "*known folders*" | Select-Object FullName  
            $i = $evtPaths.Count  
      
            $x = 0 ##For 1st Loop do Until x = i  
            $events = @()  
            $gatherEvents = @()  
            $eventsArray = @()  
            $searchResult = @()  
            $MaxEvents = 99  
      
            #Loading/Gathering Events Loop...  
            do {  
           
                ##Getting Events w/ Get-WinEvent         
                $gatherEvents = Get-WinEvent -Path $evtPaths[$x].FullName -MaxEvents $MaxEvents -EA SilentlyContinue  
                $events = $events + $gatherEvents             
      
                $x++  
                  
                }  
                 Until ($x -eq $i)      
      
            $x = $x +1 ##Total Events Found!  
              
            $eventsLength = $events.Length ##Total events catalogged!  
              
            $xx = 0  
                   
            # Write Event Properties to a row and roll it out - Collapsing Array ...   
            do {  
                   $date = $events[$xx].TimeCreated | Get-Date -Format "yyyyMMdd".ToString() -EA SilentlyContinue ##EA SC for Blank Entries  
                      
                    $eventRow = new-object PSObject -Property @{  
                    Date = $date;  
                    Id = $events[$xx].Id;  
                    Level = $events[$xx].LevelDisplayName;  
                    Provider = $events[$xx].ProviderName;  
                   Message = $events[$xx].Message;  
                    }  
      
                    $cRow = $date + " " + "ID:" +  $events[$xx].Id + " " + "Level:" + $events[$xx].LevelDisplayName + " " + "Provider:" + $events[$xx].ProviderName + " " + "Message:" + $events[$xx].Message   
                    $eventsArray += $cRow  
                   
                    $xx++  
                    $d++  
            }  
            Until ($xx -eq $events.Length)  
     
            ##Looking for patterns error or fail in $eventsArray  
            $search = $eventsArray | Select-String -pattern ("error|fail") 
     
            Return $search ## | Write-Output ##Output for job  
      
            } ## End $EventSearchJob  
      
        Start-Job -Name EventSearchJob -ScriptBlock $EventSearchJob  
      
        } ## End function Event-Search  
      
      
    function writeSearch  ##   
        {  
            ##Event Logs Cont.  
            MD $tempDir\LOGS\EVTX\ -EA SilentlyContinue 
     
            ##output to file  
            $search | Group-Object | Sort-Object Count -Descending | Format-Table Count, Name -Wrap > TOP-ERRORS.TXT  
            $search > $tempDir\LOGS\SEARCH.TXT  
      
        if($Global:eventOut -eq $True)  
            {  
            $search | Group-Object | Sort-Object Count -Descending |   
                Select-Object -Property Count, Name | Out-GridView -Title "Top `"Errors`" via EVTX - V-$Ver"  
            }  
      
            wh "`n Collecting Matching EVTX Entries ...`n"     
            #Collecting all prev matching EVTX  
            #$evtx = Get-ChildItem C:\Windows\System32\Winevt\Logs\*.evtx  
            $evv = 0  
                      
               $providerName =   
                   (($search | Select-String "Provider:.*Message:").Matches.Value -Replace   
                          " Message:", "" -Replace "Provider:", "" | Group-Object ).Name  
                  
                #Converting Provider Name to Log Name                 
                $providerName = (($providerName | ForEach-Object {Get-WinEvent -ProviderName $_ -MaxEvents 1 -EA SilentlyContinue}).LogName | Group-Object).Name     
                   $providerName = $providerName -replace "Microsoft.", ""  
                      $providerName = $providerName -replace "Windows.", ""  
                         $providerName = $providerName -replace "`/.*$", ""  
                               
                               
                             $evtx = $providerName | foreach{Get-ChildItem "C:\Windows\System32\winevt\logs\*$_*"}  
      
                    Do{  
                        COPY $evtx[$evv].PSPath $tempDir\LOGS\EVTX\ 
                           $evv++  
                      }  
                      Until($evv -eq $evtx.Count)  
      
        } #End function writeSearch  
      
      
    function GetUpdates  
        {  
            wh "`n Starting Get-WindowsUpdateLog Job-Function ...`n"  
            $updateJob = {get-WindowsUpdateLog}  
             
            if((Get-Host).Version.Major -cge 5) ##Modern Gatherer  
            {  
                Start-Job -Name GetUpdates -ScriptBlock $updateJob  
            }  
              
            ##Legacy Gatherer  
            CP C:\Windows\WindowsUpdate.log $tempDir\LOGS\WindowsUpdate.log  
      
            ##Installed-Updates/Packages 
            Get-WmiObject win32_quickfixengineering > $tempDir\LOGS\Installed_Updates.TXT  
            Get-WmiObject Win32_OperatingSystemQFE >> $tempDir\LOGS\Installed_Updates.TXT  
        DISM /Online /Get-Packages /Format:Table >> $tempDir\LOGS\Installed_Updates.TXT 
      
        } ## End function Get-Updates  
      
           
    function PrinterCheck  
        {  
            wh "`n Getting Printer Information ..."  
            get-printer | ft Name, ComputerName, Type, DriverName, PortName, Datatype, Location, DriverName > $tempDir\LOGS\Printers.TXT  
            get-printerDriver | fl >> $tempDir\LOGS\Printers.TXT  
            Get-ChildItem -Recurse Registry::"HKLM\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows NT x86\Drivers" | Out-File $tempDir\LOGS\Printers.TXT -Append  
            Get-ChildItem -Recurse Registry::"HKLM\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Drivers" | Out-File $tempDir\LOGS\Printers.TXT -Append  
            Get-ChildItem -Recurse Registry::"HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors" | Out-File $tempDir\LOGS\Printers.TXT -Append  
            write-output "## CBS ntprint CHECK ##" >> $tempDir\LOGS\Printers.TXT  
            $cbsCheck = (Get-ChildItem C:\Windows\Logs\CBS\*cbs* -Recurse | select-string -Pattern "E_INVALIDARG in eventsXml.*Microsoft-Windows-PrintService")  
            if($cbsCheck.Count -eq 0){Write-Output "## NO MATCHES IN CBS ##" >> $tempDir\LOGS\Printers.TXT} Else{$cbsCheck | Group-Object  >> $tempDir\LOGS\Printers.TXT}  
            write-output "## ntprint.dll CHECK ##" >> $tempDir\LOGS\Printers.TXT  
            (Get-ChildItem C:\Windows\System32\ntprint.dll).VersionInfo | ft -AutoSize >> $tempDir\LOGS\Printers.TXT  
            (Get-ChildItem C:\Windows\SysWOW64\ntprint.dll).VersionInfo | ft -AutoSize >> $tempDir\LOGS\Printers.TXT  
      
        } ## End function PrinterCheck  
      
      
    function UpdateHelper  
        {  
        if((Get-Host).Version.Major -cge 5)  
            {  
                $winupdatelog = get-item $tempDir\LOGS\windows-update.log    ##WIN-10 File  
                MD $tempDir\LOGS\Windows\Logs\WindowsUpdate\ -EA SilentlyContinue | Out-Null  
                CP C:\Windows\Logs\WindowsUpdate\*.etl $tempDir\LOGS\Windows\Logs\WindowsUpdate\ -EA SilentlyContinue  
            }  
                Else{$winupdatelog = get-item $tempDir\LOGS\windowsupdate.log} ##LEGACY File  
      
        $updateError = ($winupdatelog | select-string -pattern "error.*0x........");  
        $updateErrorSplit = $updateError -Split " "  
        $updateErrorCount = (($updateErrorSplit | select-string -pattern "0x........") -Replace "[(),'`.:]", "" -Replace "hr=", "");  
      
        $updateErrorCount | Group-Object | Sort-Object Count -Descending | Format-Table Count, Name | Out-File $tempDir\LOGS\UPDATE-ERRORS.TXT -Width 999  
        $updateError >> UPDATE-ERRORS.TXT  
        if($updateError.length -eq 0){"No `"error.*0x........`" patterns Found in Windows-Update.log" | Out-File $tempDir\LOGS\UPDATE-ERRORS.TXT}  
      
        ($winupdatelog | Select-String "KB\d\d\d\d\d\d\d" | Select-string "fail") | Out-file $tempDir\LOGS\UPDATE-ERRORS.TXT -Append -width 999  
      
        } ## End function UpdateHelper  
      
      
    function getProcesses  
        {  
        wh "`nGetting Active Process ...`n"   
        Get-Process > $tempDir\LOGS\Running-Processes.TXT  
        CMD.EXE /C "tasklist /svc" | Out-File -Append  $tempDir\LOGS\Running-Processes.TXT  
          
        } ## End function getProcesses  
      
      
    function GetApps  
        {  
        wh "`n Getting List of Installed Apps...`n"  
        Get-WmiObject -Class Win32_Product | Format-Table -Property Name, Version, Vendor > $tempDir\LOGS\Installed-Apps.TXT  
        Get-AppxPackage | ft Name, Version, InstallLocation, IspArtiallyStaged, SignatureKind, Status >> $tempDir\LOGS\Installed-Apps.TXT  
          
        } ## End function GetApps  
      
      
    function SetupLogs  
        {  
        wh "`nGetting Windows Setup Logs Independent of SetupDiage.exe...`n"  
            MD $tempDir\LOGS\SETUP\ -EA SilentlyContinue  
        dir C:\ > $tempDir\LOGS\Dir_Structure.txt  
          
        ## Main Setup Collection  
        if($env:SystemDrive -eq 'C:') ##Verify SystemDrive  
        {  
            $SetupPaths = @()  
      
            $locations = @(  
                'C:\GetCurrent',  
                'C:\$Reset',  
                'C:\$SysReset',  
                'C:\$Windows.~BT',  
                'C:\$Windows.~WS',  
                'C:\Windows\Logs\',  
                'C:\Windows\Panther\',  
                'C:\Windows\inf\',  
                'C:\Windows\System32\LogFiles\',  
                'C:\Windows\System32\SysPrep\',  
                'C:\Windows10Upgrade',  
                'C:\Windows.old\Windows\Panther')  
      
            for($i = 0; $locations.count -gt $i; $i++)  
            {   
                if((get-item $locations[$i] -Force -EA SilentlyContinue).length -gt 0) ##Null Path Check -Force for Hidden  
                {  
                    CD $locations[$i]  
                    ##Search includes setuperr/setupact only  
                    $SetupPaths += Get-ChildItem * -Force -Recurse -Include setuperr.log, setupact.log, miglog.xml, *APPRAISER_Humanreadable.xml -EA SilentlyContinue      
                }  
            }  
      
            $cleanPaths = @()  
      
            for($i = 0; $SetupPaths.count -gt $i; $i++)  
            {  
                $cleanPaths += $SetupPaths[$i].PSParentPath.ToString() -replace "Microsoft\.PowerShell\.Core\\FileSystem\:\:C\:\\", ""  
            }  
      
            CD $tempDir\LOGS\SETUP\  
            MD $cleanPaths -Force  
            CD $tempDir\LOGS\  
      
            for($i = 0; $SetupPaths.count -gt $i; $i++)  
            {  
                $destPath = "$tempDir\LOGS\SETUP\" + $cleanPaths[$i]  
                $copyPathLog = ($SetupPaths[$i].ToString())  
                  
                Copy  $copyPathLog -Destination $destPath  
            }  
          
        }Else{Write-Host "`nSystem Drive is not C:... Setup Collection Aborted!`n"}  
        ## End Main Setup Collection  
          
              
            ## Setup Reg Output      
            Get-ChildItem HKLM:\SYSTEM\SETUP\ | Out-File $tempDir\LOGS\SETUP\HKLM_SYSTEM_SETUP-OOBE.TXT  
            Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE\Me* -recurse -EA SilentlyContinue | Out-File $tempDir\LOGS\SETUP\HKLM_SYSTEM_SETUP-OOBE.TXT -Append  
            Get-Childitem HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate | Out-File $tempDir\LOGS\SETUP\HKLM_SYSTEM_SETUP-OOBE.TXT -Append  
      
            ## SetupAct String Search  
      
      
              
             $setupRegx = @("MOUPG SetupHost..Initialize:",  
                            "============================",  
                            (Get-ChildItem $tempDir\LOGS\*setupact.log -Recurse | Select-String "MOUPG  SetupHost..Initialize. CmdLine"),  
                            "",  
                            "MOUPG Setup build & Host OS Build:",  
                            "==================================",  
                            "",  
                            (Get-ChildItem $tempDir\LOGS\*setupact.log -Recurse | Select-String "MOUPG  SetupHost..Setup build"),  
                            "...",  
                            (Get-ChildItem $tempDir\LOGS\*setupact.log -Recurse | Select-String "MOUPG      Host OS"),  
                            "",  
                            "Watson Parameters (4&5):",  
                            "=======================",  
                            "",  
                            (Get-ChildItem $tempDir\LOGS\*setupact.log -Recurse | Select-String "Watson Bucketing Parameters\[[4-5]\]" ),  
                            "",  
                            "\[0x........\]Error:",  
                            "==================",  
                            "",  
                            (Get-ChildItem $tempDir\LOGS\*setupact.log -Recurse | Select-String "\[0x........\]\[0x.....\]"),  
                            "",  
                            "`"FATAL`":",  
                            "======",  
                            "",  
                            (Get-ChildItem $tempDir\LOGS\*setupact.log -Recurse | Select-String "FATAL" | Select-String -NotMatch "FatalExecutionEngineError" | Select-String -NotMatch "non-fatal"),  
                            "",  
                            "`"Error   `":",  
                            "===========",  
                            "",  
                            (Get-ChildItem $tempDir\LOGS\*setupact.log -Recurse | Select-String "Error   "),  
                            "",  
                            "MIGRATE.*DATA:",  
                            "==============",  
                            "",  
                            (Get-ChildItem $tempDir\LOGS\*setupact.log -Recurse | Select-String "MIGRATE.*DATA"),  
                            ""             
                            )  
                $q=0  
                Do {$setupRegx[$q] | Out-File $tempDir\LOGS\SETUP\SetupAct-Regex.TXT -Append -Width 999 ##spool out results  
                                      $q++                    
                                                }Until($q -eq $setupRegx.Count)  
      
        } ## End function SetupLogs  
      
      
    function powerCFGInfo  
        {  
        MD $tempDir\LOGS\POWER\ -EA SilentlyContinue  | Out-Null  
        wh "`n Grabbing PowerCFG, Sleep & Battery Info ...`n"  
          
        ("`n" + "Available Sleep States (/A): `r" + "`n" +"============================`r" + "`r").ToString() | Out-File -Encoding ascii $tempDir\LOGS\POWER\POWERCFG_INFO.txt  
        powercfg /a | Out-File -Append -encoding ascii $tempDir\LOGS\POWER\POWERCFG_INFO.txt  
      
        ("`n" + "-DeviceQuery Wake_Armed: `r" + "`n" +"========================`r" + "`r").ToString() | Out-File -Append -Encoding ascii $tempDir\LOGS\POWER\POWERCFG_INFO.txt  
        powercfg -devicequery wake_armed  | Out-file -Append -encoding ascii $tempDir\LOGS\POWER\POWERCFG_INFO.txt  
      
        ("`n" + "Last Wake (-lastwake):  `r" + "`n" +"=====================`r" + "`r").ToString() | Out-File -Append -Encoding ascii $tempDir\LOGS\POWER\POWERCFG_INFO.txt  
        powercfg -lastwake  | Out-file -Append -encoding ascii $tempDir\LOGS\POWER\POWERCFG_INFO.txt  
        ("`n`r").ToString() | Out-File -Append -Encoding ascii $tempDir\LOGS\POWER\POWERCFG_INFO.txt  
      
        ("`n" + "-Requests: `r" + "`n" +"==========`r" + "`r").ToString() | Out-File -Append -Encoding ascii $tempDir\LOGS\POWER\POWERCFG_INFO.txt  
        powercfg -requests  | Out-file -Append -encoding ascii $tempDir\LOGS\POWER\POWERCFG_INFO.txt  
      
        $powerList = powercfg -list  
        $powerList | Out-File -Append -encoding ascii $tempDir\LOGS\POWER\POWERCFG_INFO.txt  
        $powerActive = $powerList | select-string "\*" | powercfg /QH "$_"   
        ("`n`r").ToString() | Out-File -Append -Encoding ascii $tempDir\LOGS\POWER\POWERCFG_INFO.txt  
      
        ("`n" + "Active Power Scheme Details: `r" + "`n" +"============================`r" + "`r").ToString() | Out-File -Append -Encoding ascii $tempDir\LOGS\POWER\POWERCFG_INFO.txt  
        $powerActive | Out-File -Append -encoding ascii $tempDir\LOGS\POWER\POWERCFG_INFO.txt  
      
      
        if((Get-Host).Version.Major -cge 5) ##WIN7 Does not Support powercfg /battery /sleepstudy  
             {   
               $ifbattery = Get-WmiObject win32_battery  
               if ( $ifbattery.__SERVER.count -cge 1 ) { CMD.EXE /C "powercfg /batteryreport /output %temp%\LOGS\POWER\battery-report.html" }  
               CMD.EXE /C "powercfg /sleepstudy /output %temp%\LOGS\POWER\sleepstudy-report.html"  
             }  
               CMD.EXE /C "powercfg /ENERGY /duration 10 /output %temp%\LOGS\POWER\energy-report.html"         
          
        } ## End function powerCFGInfo  
      
      
    function sysProductCheck  
        {  
        wh "`n Getting SystemProductName ...`n"  
        ##SystemInformation Reg   
        reg query HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SystemInformation\ /v SystemProductName  > $tempDir\LOGS\REG_SystemProductName.TXT   
        Get-WmiObject Win32_ComputerSystem > $tempDir\LOGS\WMI_Object_System.TXT  
        Get-WmiObject Win32_ComputerSystemProduct >> $tempDir\LOGS\WMI_Object_System.TXT  
          
        } ## End functions sysProductCheck  
      
      
    function showWLAN  
        {  
        wh "Generating NETSH WLAN Report...`n"  
      
        $showWLANjob = {  
                        CMD.EXE /c "netsh wlan show networks mode=ssid > %temp%\LOGS\Network\wlan.txt"  
                        CMD.EXE /c "netsh wlan show networks mode=bssid >> %temp%\LOGS\Network\wlan.txt"  
                        CMD.EXE /c "netsh winhttp show proxy > %temp%\LOGS\Network\proxy.txt"  
                        CMD.EXE /c "netsh wlan show wlanreport & COPY C:\ProgramData\Microsoft\Windows\wlanReport\wlan-report-latest.html %temp%\LOGS\Network\wlan-report-latest.html"   
                        ##WIN7 Does not Support netsh wlanreport                                                    
                        }   
      
        Start-Job -Name showWLAN -ScriptBlock $showWLANjob  
      
        } ## End function sysProductCheck  
      
      
    function getGPRESULT  
        {  
        wh "`nGetting GPRESULT...`n"  
        CMD.EXE /C "GPRESULT /V > %temp%\LOGS\GPRESULT.TXT"  
          
        } ## End function getGPRESULT  
      
      
    function reservedCheck  
        {       
             
        $reservedJob =   
            {  
            $vol = (mountvol /L | select-string -Pattern "\\\\")  
            $volstring = "mountvol y:" + $vol[0]  
            CMD.EXE /C $volstring  
          
            SLEEP 2  
      
            CMD.EXE /C "CHKDSK y: > %temp%\LOGS\SystemReserved.TXT"  
          
            SLEEP 2 # Pause after drive dismount  
          
            CMD.EXE /C "mountvol y: /D"  
            }  
      
        Start-Job -Name reservedJob -ScriptBlock $reservedJob  
          
        } ## End function reservedCheck  
      
      
    function fltmcCheck  
        {  
        wh "`n Getting fltmc Filters ...`n"  
        CMD.EXE /c "fltmc filters > %temp%\LOGS\fltmc_filters.TXT"  
          
        } ## End function fltmcCheck  
      
      
    function getDXDiag  
        {  
        wh "`n Grabbing DXDiag Info...`n"  
        C:\Windows\System32\dxdiag /x $explore\DxDiag  
          
        } ## End function getDXDiag  
      
      
    function getMSINFO  
        {  
        wh "`n Gathering MSINFO32 ...`n"  
        ## check if msinfo is already gathering - if so stop  
        If((get-process | select-string -Pattern "msinfo").Pattern -eq "msinfo")  
        {Stop-Process -ProcessName msinfo32}  
      
            C:\Windows\System32\msinfo32.exe /nfo $tempDir/LOGS/MSINFO32.NFO  
                     
        } ## End function getMSINFO  
      
      
    function getAV  
        {  
         if((Get-Host).Version.Major -cge 5) ##Modern OS Only  
            {  
            wh "`n Grab root\SecurityCenter2 AntivirusProduct ...`n"  
            $avPath = (Get-WmiObject -Namespace root\SecurityCenter2 -Class AntivirusProduct) | % {$_.pathtoSignedProductEXE}  
            "AV Info" + "`n========" | Out-File $tempDir/LOGS/SecurityProductInformation.TXT 
        $avPath | Out-File $tempDir/LOGS/SecurityProductInformation.TXT -Append  
            if($avPath[0] -match "exe")  
                {   
                    $path = (Get-Item $avPath[0]).PSParentPath  
                    Get-Item $path/*.ini | Out-File $tempDir/LOGS/SecurityProductInformation.TXT -Append  
                    Get-Content $path/*.ini | Out-File $tempDir/LOGS/SecurityProductInformation.TXT -Append             
                }  
                Get-ChildItem "HKLM:\SOFTWARE\Policies\Microsoft\Windows Defender\" -recurse -EA SilentlyContinue | Out-File $tempDir/LOGS/SecurityProductInformation.TXT -Append      
            }  
        } ## End function getAV  
      
      
    function getDrivers  
        {  
        wh "`n Grabbing Driver listing via DISM.EXE ...`n"  
            $drivers = cmd.exe /C "dism /online /get-drivers /format:table"  
            $drivers += cmd.exe /C "dism /online /get-drivers /all /format:table"  
            $drivers | Out-File $tempDir/LOGS/DISM-Get-Drivers.TXT  
        wh "`n Done!`n"  
        } ## End Function getDrivers  
      
      
    function getMISCLogs  
        {  
            wh "`nCopying misc. logs ...`n"   
            MD $tempDir\LOGS\WER\ -EA SilentlyContinue   
            MD $tempDir\LOGS\Windows\Logs\WindowsUpdate\ -EA SilentlyContinue  
            CP "C:\Users\All Users\Microsoft\Windows\WER\ReportArchive\*" $tempDir\LOGS\WER\ -Recurse -EA SilentlyContinue  
            CP "C:\Windows\Logs\CBS\*cbs*" $tempDir\LOGS\Windows\Logs\  
            CP "C:\Windows\Logs\DISM\*dism*" $TempDir\LOGS\Windows\Logs\  
            CP "C:\Windows\Logs\WindowsUpdate\*" $TempDir\LOGS\Windows\Logs\WindowsUpdate\  
      
                
            #DMP Collect  
            $dmp = @()  
            $dmp += Get-ChildItem C:\Windows\*.dmp   
            $dmp += (Get-ChildItem C:\Windows\LiveKernelReports\*.dmp -Recurse -EA SilentlyContinue)  
            $dmp += (Get-ChildItem C:\Windows\Minidump\*.dmp -Recurse -EA SilentlyContinue)  
            #Validate empty array  
            if($dmp.length -ne 0)  
                {  
                $dd=0  
                      Do{       
                            If($dmp[$dd].length -lt 2000000)  
                                { $destPath = $dmp[$dd].PSParentPath.Replace('C:\', '').Replace('Microsoft.PowerShell.Core\FileSystem::', '')  
                                    MD $destPath -EA SilentlyContinue 
                                        COPY -Path $dmp[$dd].PSPath -Destination $destPath }  
                            $dd++  
                        }  
                        Until($dd -eq $dmp.Count)  
                }  
     
             #disk info 
             "`nGet-Disk:`n=========" > $tempDir\LOGS\Disk-Info.TXT  
             Get-Disk |fl >> $tempDir\LOGS\Disk-Info.TXT 
             "`nGet-Partition:`n==============" >> $tempDir\LOGS\Disk-Info.TXT  
             Get-Partition >> $tempDir\LOGS\Disk-Info.TXT 
             Manage-bde -protectors -get C: >> $tempDir\LOGS\Disk-Info.TXT 
             "`nIO Fail Search:`n===============`n" >> $tempDir\LOGS\Disk-Info.TXT 
             $search | Select-String ".*io.fail.*" | Select-String -NotMatch '0, 0, 0, 0' >> $tempDir\LOGS\Disk-Info.TXT        
      
        } ## End function getMISCLogs  
      
      
    function bingCollect  
        {  
            ##O365 Firewall Check & Bing.com diagnostics.asp  
            ##URIs based on Article:   
            ##https://support.office.com/en-us/article/Network-requests-in-Office-365-ProPlus-and-Mobile-eb73fcd1-ca88-4d02-a74b-2dd3a9f3364d  
                    
            MD $TempDir\LOGS\Network\ -EA SilentlyContinue  
      
            wh "Performing Bing & O365 URI Check ... `n"  
      
      
                  $bingCheck = (Invoke-WebRequest -Uri https://www.bing.com/fdv2/diagnostics.aspx -UseBasicParsing)   
                  $bingCheck | Out-File $tempDir\LOGS\Network\O365-URL-Query.TXT  
                     
                  $URIs = @('api.login.microsoftonline.com',    #0  Standard Reply = 403  
                  'api.passwordreset.microsoftonline.com',      #1  Standard Reply = 200  
                  'becws.microsoftonline.com',                  #2  Standard Reply = 403  
                  'clientconfig.microsoftonline-p.net',         #3  Standard Reply = 404  
                  'companymanager.microsoftonline.com',         #4  Standard Reply = 403  
                  'device.login.microsoftonline.com',           #5  Standard Reply = 200  
                  'graph.microsoft.com',                        #6  Standard Reply = 404  
                  'hip.microsoftonline-p.net',                  #7  Standard Reply = 404   
                  'hipservice.microsoftonline.com',             #8  Standard Reply = 404  
                  'login.microsoft.com',                        #9  Standard Reply = 200  
                  'login.microsoftonline.com',                  #10 Standard Reply = 200  
                  'logincert.microsoftonline.com',              #11 Standard Reply = 200   
                  'loginex.microsoftonline.com',                #12 Standard Reply = 200  
                  'login-us.microsoftonline.com',               #13 Standard Reply = 200  
                  'login.microsoftonline-p.com',                #14 Standard Reply = 200  
                  'login.windows.net',                          #15 Standard Reply = 200  
                  'nexus.microsoftonline-p.com',                #16 Standard Reply = 403  
                  'passwordreset.microsoftonline.com',          #17 Standard Reply = 200  
                  'provisioningapi.microsoftonline.com',        #18 Standard Reply = 403  
                  'stamp2.login.microsoftonline.com',           #19 Standard Reply = 200  
                  'ccs.login.microsoftonline.com',              #20 Standard Reply = 401  
                  'ccs-sdf.login.microsoftonline.com',          #21 Standard Reply = 401  
                  'accounts.accesscontrol.windows.net',         #22 Standard Reply = 200  
                  'secure.aadcdn.microsoftonline-p.com',        #23 Standard Reply = 400  
                  'windows.net',                                #24 Standard Reply = 200  
                  'phonefactor.net',                            #25 Standard Reply = 200  
                  'account.activedirectory.windowsazure.com',   #26 Standard Reply = 404  
                  'secure.aadcdn.microsoftonline-p.com',        #27 Standard Reply = 400  
                  'login.windows.net',                          #28 Standard Reply = 200  
                  'provisioningapi.microsoftonline.com',        #29 Standard Reply = 403  
                  'mscrl.microsoft.com',                        #30 Standard Reply = 400  
                  'secure.aadcdn.microsoftonline-p.com',        #31 Standard Reply = 400  
                  'windowsupdate.microsoft.com',                #32 Standard Reply = 200  
                  'update.microsoft.com',                       #33 Standard Reply = 200  
                  'au.download.windowsupdate.com',              #34 Standard Reply = 200  
                  'download.windowsupdate.com',                 #35 Standard Reply = 200  
                  'download.microsoft.com',                     #36 Standard Reply = 200  
                  'tlu.dl.delivery.mp.microsoft.com');          #37 Standard Reply = 403  
              
                     
                  $count = 0;  
                  $queryResult =@{};  
                     
                  Write-Host "Checking URIs .." -NoNewline  
                     
                  Do {           
                          Try{  
                          $queryResult[$count] = (Invoke-WebRequest -Uri ("http:`/`/" + $URIs[$count]) -Method Head -UseBasicParsing -TimeoutSec 2).RawContent  
                             }Catch{ $catch = $_ }  
                     
                              if($queryResult[$count].Count -eq 0)  
                                      {$queryResult[$count] = ($catch[$catch.count -1].ToString()).Replace("`n", " ")}                                     
                          Write-Host "." -NoNewline           
                          $count++         
                      }Until ($count -eq ($URIs.Count));                            
                  Write-Host "."  
                      
                      Get-Date | Out-File $tempDir\LOGS\Network\O365-URL-Query.TXT -Append  
                      $queryResult | Out-File $tempDir\LOGS\Network\O365-URL-Query.TXT -Append  
                        
            Write-Host " Bing Check", `n, "==========" | Out-File $tempDir\LOGS\Network\O365-URL-Query.TXT -Append  
            
                  wh "`n`n`n`URL Check Finished...`n"   
        }  
      
      
    function smbConfig  
    {  
      
        $CMDs =  
        {   cmd.exe /c "net config server"    
            cmd.exe /c "net config workstation"  
            Get-SmbClientNetworkInterface  
            Get-SmbServerConfiguration  
            Get-SmbClientConfiguration  
            Get-ChildItem "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer"   
            Get-NetAdapterAdvancedProperty | ft }  
      
        ForEach-Object{Invoke-Command $CMDs | Out-File $TempDir\LOGS\NETWORK\$env:COMPUTERNAME-SMB-Config.TXT -Append}  
      
        $share = Get-SmbShare  
      
        ForEach-Object{Get-SmbShareAccess $share.Name | ft  | Out-File $tempDir\LOGS\NETWORK\$env:COMPUTERNAME-SMB-Config.TXT -Append}  
      
    } ## End Function smbConfig  
      
      
    function regLang  
        {       
            DISM.EXE /Online /Get-Intl  | Out-File $tempDir\LOGS\Reg-Lang.TXT  
            "`n","Get-WinUserLanguageList","=======================" | Out-File $tempDir\LOGS\Reg-Lang.TXT -Append  
            Get-WinUserLanguageList     | Out-File $tempDir\LOGS\Reg-Lang.TXT -Append  
            "`n","Get-WinLanguageBarOption","========================" | Out-File $tempDir\LOGS\Reg-Lang.TXT -Append  
            Get-WinLanguageBarOption    | Out-File $tempDir\LOGS\Reg-Lang.TXT -Append  
        }  
      
      
    function autoRotate  
        {  
            Get-ChildItem HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Auto* | Out-File $tempDir\LOGS\AutoRotate.TXT  
        }  
      
      
    function checkBoxes  
       {  
            Add-Type -AssemblyName System.Windows.Forms  
            Add-Type -AssemblyName System.Drawing  
      
            $Global:form = New-Object System.Windows.Forms.Form  
            $Global:form.Text = "LOGS-V$ver"  
            $Global:form.Size = New-Object System.Drawing.Size(300,400)  
            $Global:form.StartPosition = 'CenterScreen'  
      
            $OKButton = New-Object System.Windows.Forms.Button  
            $OKButton.Location = New-Object System.Drawing.Point(100,300)  
            $OKButton.Size = New-Object System.Drawing.Size(75,23)  
            $OKButton.Text = 'OK'  
            $OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK  
            $Global:form.AcceptButton = $OKButton  
            $Global:form.Controls.Add($OKButton)  
             
            $Global:form.ControlBox = $false  
              
                $Global:boxNum = 1  
                $Global:checkBox = @{} #hash for $checkBox  
                $tag = @{} #hash for $label  
                $Global:Box = @{}  
      
                function createCheckBox   
                    {  
                        Param ( [parameter (Mandatory = $true)][string]$name,  
                                [parameter (Mandatory = $true)][string]$label )  
                          
                        $drawingPoint = (50 + ($boxNum *25))  
      
                        $Global:checkBox[$boxNum] = New-Object System.Windows.Forms.CheckBox  
                        $Global:checkBox[$boxNum].Location = New-Object System.Drawing.Point(10,$drawingPoint)  
                        $Global:checkBox[$boxNum].Size = New-Object System.Drawing.Size(15,15)  
                        $Global:checkBox[$boxNum].Text = ''  
                        $Global:checkBox[$boxNum].Checked = $true  
                        $Global:form.Controls.Add($checkBox[$boxNum])  
                        #SetupDiag Label  
                        $tag[$boxNum] = New-Object System.Windows.Forms.Label  
                        $tag[$boxNum].Location = New-Object System.Drawing.Point(40,$drawingPoint)  
                        $tag[$boxNum].Size = New-Object System.Drawing.Size(280,20)  
                        $tag[$boxNum].Text = "$label"  
                        $Global:form.Controls.Add($tag[$boxNum])  
      
                        $Global:boxNum ++  
                      
                    } #End nested function createCheckBox   
                
                createCheckBox -name "EV" -label "EventSearch EventLog Helper"       #1  
                createCheckBox -name "SD" -label "SetupDiag.EXE Setup Diagnostics"   #2  
                createCheckBox -name "WU" -label "Get-WindowsUpdateLog Collection"   #3  
                createCheckBox -name "IP" -label "Network Information"               #4  
                createCheckBox -name "PW" -label "POWERCFG. Sleep & Battery Info"    #5  
                createCheckBox -name "GP" -label "GPResult Info"                     #6  
                createCheckBox -name "MS" -label "General Machine Info"              #7  
                createCheckBox -name "EO" -label "EventSearch Out-GridView"          #8            
                     
                #Checkbox State Changes               
                $Global:checkBox[1].Add_CheckStateChanged(  
                        {   
                            if($Global:checkBox[1].checked -eq $True){ $Global:EventsCollect = $true ; Write-Host "." -nonewline} Else{ $Global:EventsCollect = $false }  
                                  
                        })             
                $Global:checkBox[2].Add_CheckStateChanged(  
                        {   
                            if($Global:checkBox[2].checked -eq $True){ $Global:SetupDiagCollect = $true ; Write-Host "." -nonewline} Else{ $Global:SetupDiagCollect = $false }  
                                  
                        })  
                $Global:checkBox[3].Add_CheckStateChanged(  
                        {   
                            if($Global:checkBox[3].checked -eq $True){ $Global:UpdatesCollect = $true ; Write-Host "." -nonewline} Else{ $Global:UpdatesCollect = $false }  
                                  
                        })  
                $Global:checkBox[4].Add_CheckStateChanged(  
                        {   
                            if($Global:checkBox[4].checked -eq $True){ $Global:WLANCollect = $true ; Write-Host "." -nonewline} Else{ $Global:WLANCollect = $false }  
                                  
                        })  
      
                $Global:checkBox[5].Add_CheckStateChanged(  
                        {   
                            if($Global:checkBox[5].checked -eq $True){ $Global:PowerCollect = $true ; Write-Host "." -nonewline} Else{ $Global:PowerCollect = $false }  
                                  
                        })  
                $Global:checkBox[6].Add_CheckStateChanged(  
                        {   
                            if($Global:checkBox[6].checked -eq $True){ $Global:GPCollect = $true ; Write-Host "." -nonewline} Else{ $Global:GPCollect = $false }  
                                  
                        })  
                $Global:checkBox[7].Add_CheckStateChanged(  
                        {   
                            if($Global:checkBox[7].checked -eq $True){ $Global:miscCollect = $true ; Write-Host "." -nonewline} Else{ $Global:miscCollect = $false }  
                                  
                        })  
      
                 $Global:checkBox[8].Add_CheckStateChanged(  
                        {   
                            if($Global:checkBox[8].checked -eq $True){ $Global:eventOut = $true ; $Global:checkBox[1].checked = $true; Write-Host "x" -nonewline} Else{ $Global:eventOut = $false }  
                                  
                        })  
                                               
            $Global:checkBox[8].Checked = $false  
            $mainText = New-Object System.Windows.Forms.Label  
            $mainText.Location = New-Object System.Drawing.Point(62,30)  
            $mainText.Size = New-Object System.Drawing.Size(260,20)  
            $mainText.Text = 'Choose which logs to collect:'  
            $Global:form.Controls.Add($mainText)  
            $result = $Global:form.ShowDialog()  
            SLEEP 1  #testing Topmost lag  
            $Global:form.Topmost = $true  
      
            #OK Button ...   
            if ($result -eq [System.Windows.Forms.DialogResult]::OK)  
            {  
                $x = $textBox.Text  
                $x  
            }       
      
        } #End function checkBoxes  
      
      
    Function werHint  
    {  
        $WERs = Get-ChildItem $tempDir\LOGS\WER\*.wer -Recurse  
      
        $WERArray = @()  
      
        $Date = $WERs | Select-String -pattern "eventtime=" | % {$_ -Replace("C:.*EventTime=", "")}  
        $eventType = $WERs | Select-String -pattern "EventType=" | % {$_ -Replace("C:.*EventType=", "")}  
        $Sig0Nam = $WERs | Select-String -pattern "Sig\[0\].Name" | % {$_ -Replace("C:.*Sig\[0\].Name=", "")}  
        $Sig0Val = $WERs | Select-String -pattern "Sig\[0\].Value" | % {$_ -Replace("C:.*Sig\[0\].Value=", "")}  
        $Sig3 = $WERs | Select-String -pattern "Sig\[3\].Value" | % {$_ -Replace("C:.*Sig\[3\].Value=", "")}  
        $Sig3 = $WERs | Select-String -pattern "Sig\[3\].Value" | % {$_ -Replace("C:.*Sig\[3\].Value=", "")}  
        $Sig4 = $WERs | Select-String -pattern "Sig\[4\].Value" | % {$_ -Replace("C:.*Sig\[4\].Value=", "")}  
      
        #ConvertDateTime  
        $epoch = [datetime]"01/01/1601 00:00"  
        $date = $date | foreach{$epoch.AddSeconds($_/10000000)}   
        $convertedDate = foreach($Date in $Date) {Get-Date $Date -Format G}  
      
        $WERarray = 0..($convertedDate.Length -1) | Select-Object @{n="Id";e={$_}},   
            @{n="Date";e={$convertedDate[$_]}}, @{n="EventType";e={$eventType[$_]}},  
                @{n="S0-Name";e={$Sig0Nam[$_]}}, @{n="S0-Value";e={$Sig0Val[$_]}}, @{n="S3";e={$Sig3[$_]}},   
                    @{n="S4";e={$Sig4[$_]}}  
      
        $WERArray |Sort-Object -Descending Date | ft -autosize Date, EventType, S0-Name, S0-Value, S3, S4  |   
            Out-File $tempDir\LOGS\WER-SUMMARY.TXT -Width 500  
      
    } ## End Function werHint  
      
      
      
    ### FUNCTIONS_INIT ###   
      
            $Script:Cancel = @{}  
      
            StartScript #function  
            checkBoxes  
              
            ## SetupDiagCollect   #2  
            if($Global:SetupDiagCollect -eq $True)  
                {  
                SetupDiagFunc #function & job   
                wh "...`n"  
                }  
            ## EventSearch         #1  
            if($Global:EventsCollect -eq $True)  
                {  
                EventSearch #function & job  
                wh "...`n"  
                }  
      
            ## Get-WindowsUpdate   #3  
            if($Global:UpdatesCollect -eq $True)  
                {  
                GetUpdates #function & job  
                wh "...`n`n"  
                }  
      
            ## WLAN/Wifi Collect    #4  
            if($Global:WLANCollect -eq $True)      
                {  
                bingCollect #function  
                wh "...`n"  
                showWLAN #function & job   
                wh "...`n"  
                smbConfig #function  
                }  
      
            ## Power/Battery Collect:#5  
            if($Global:PowerCollect -eq $True)  
                {  
                powerCFGInfo #function - make job takes a min  
                wh "...`n"  
                }  
      
            ## GPRESULT Collection:  #6  
            if($Global:GPCollect -eq $True)  
                {  
                getGPRESULT #function  
                wh "...`n"  
                }  
      
            ## Misc Logs Collection: #7        
            if($Global:miscCollect -eq $True)  
                {  
                getMSINFO #function & job  
                    wh "...`n"  
                PrinterCheck #function  
                    wh "...`n"  
                getProcesses #function  
                    wh "...`n"  
                getApps #function - make job - takes a min  
                    wh "...`n"  
                SetupLogs #function  
                    wh "...`n"       
                sysProductCheck #function  
                    wh "...`n"                 
                reservedCheck #function  
                    wh "...`n"  
                fltmcCheck #function  
                    wh "...`n"  
                getDXDiag #function  
                    wh "...`n"  
                regLang #function  
                    wh "...`n"  
                autoRotate #function  
                getMISCLogs #function  
                    wh "...`n"  
                getDrivers #function  
                    wh "...`n"   
                getAV #function  
                    wh "...`n"            
                 }  
            
      
    #### RECEIVING JOBS SECTION ###...   
      
            #EventSearchJob  
            if($Global:EventsCollect -eq $True)  
            {          
                wh "`nWaiting for EventSearchJob to complete...`n"  
      
                Receive-Job -Name EventSearchJob -OutVariable eventSearch -Wait   
                $search = $eventSearch.Line  
            }  
      
      
            if($Global:SetupDiagCollect -eq $True)  
            {  
                #SetupDiagJob - Receive-Job  
                $stamp = (Get-Date -format "hh:mm tt")  
                wh "`nWaiting for SetupDiagJob to complete..."  
                wh "`nTime Stamp: $stamp"  
                wh "`nThis can take up to 10 minutes ..."  
      
                Do{  
                  SLEEP 15  
                    wh "."  
                    if((Get-Job -name SetupDiagJob).State -eq "Completed")  
                        { Receive-Job -Name SetupDiagJob  
                               wh "`nSetupDiag Completed!"                         
                            Break                      }  
                                    }Until($Cancel.SetupDiag -eq $True)  
                wh `n  
                                                   
                #Receive file and copy  
                Receive-Job -Name SetupDiagJob -Wait   
                Copy-Item $tempDir\Logs*.zip $tempDir\LOGS\SetupDiag-Log.zip  
                Copy-Item $tempDir\setupdiag*.log $tempDir\LOGS\  
                Remove-Item $tempDir\Logs*.zip  
            }  
      
           
            if($Global:UpdatesCollect -eq $True)  
            {  
                #GetUpdates Job via:  
                #UpdateHelper <--- GetUpdates Job has to finish first!  
                #Checking Status of GetUpdates Job...  
                wh "Checking Status of GetUpdates Job...`n"  
                If ((Get-Job -Name GetUpdates).State -eq "Failed")  
                    { wh "`nGetUpdates Job Failed!`n" }  
                        Else{  
                                Receive-Job -Name GetUpdates -wait  
                                Move $env:USERPROFILE\Desktop\WindowsUpdate.log $TempDir\LOGS\Windows-Update.log -Force  
                                wh "`n Writing Update Helper Info to UPDATE-ERRORS.TXT ... `n"  
                                UpdateHelper #run the update helper function  
                            }               
            } #End getting GetUpdates-job       
      
            #Finishing EventSearch  
            if($Global:EventsCollect -eq $True)  
                {  
                    writeSearch #function  
                }  
      
    #Wait on MSINFO...  
    if($Global:miscCollect -eq $True)  
    {  
        wh "`n Waiting for MSINFO32 to Complete ...`n"  
        do{ start-sleep 1 }  
        Until((get-process | select-string -Pattern "msinfo").Pattern -cne "msinfo")  
            werHint #function  
    }  
      
      
    if((Get-Host).Version.Major -cge 5) ##WIN7 Does not Support Transcript  
        {  
      
    Stop-Transcript   
      
            do{  
        start-sleep 1  
        }  
        Until((get-item $tempDir\LOGS\Event-Search.TXT).Length -cne 0)  
          
        }  
      
    wh "`nLog Collection Completed! `nLogs are available in %temp%\LOGS\`n"    
    wh "`nHit Any Key or Close ...`n"  
      
    Start-Sleep 1  
      
    Start Explorer.exe $explore  
      
    PAUSE  
      
    ## LOGS.PS1 1.6.3  ##     
    ## JOHNEM 8-2019 ##   
    ## EOF ##

    Click OK > post a share link into the thread using one drive, drop box, or google drive.
      My Computer


  10. Posts : 8
    Windows 11
    Thread Starter
       #10

    Guys, I'm sorry but those logs contain too much private information.
      My Computer


 

  Related Discussions
Our Sites
Site Links
About Us
Windows 10 Forums is an independent web site and has not been authorized, sponsored, or otherwise approved by Microsoft Corporation. "Windows 10" and related materials are trademarks of Microsoft Corp.

© Designer Media Ltd
All times are GMT -5. The time now is 08:19.
Find Us




Windows 10 Forums