403Webshell
Server IP : 123.56.80.60  /  Your IP : 216.73.216.78
Web Server : Apache/2.4.54 (Win32) OpenSSL/1.1.1s PHP/7.4.33 mod_fcgid/2.3.10-dev
System : Windows NT iZhx3sob14hnz7Z 10.0 build 14393 (Windows Server 2016) i586
User : SYSTEM ( 0)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /Windows/diagnostics/system/WindowsUpdate/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /Windows/diagnostics/system/WindowsUpdate/cl_windowsupdate.ps1
# Copyright © 2012, Microsoft Corporation. All rights reserved.

Import-LocalizedData -BindingVariable localizationString -FileName CL_LocalizationData

. ./utils_SetupEnv.ps1
. ./utils_reporting.ps1
. ./cl_mutexverifiers.ps1
. ./cl_windowsversion.ps1
. ./Cl_Service.ps1	






#*=================================================================================
#Function Check-SelfHelp
#Purpose  check if the this Script is running from MSDT
#Return   
#*=================================================================================
function Check-SelfHelp
{
      param(      [int]$ProcessID = $PID,
                  [int]$Threshold = 30)
      
      [bool]$SelfHelp = $false
    
      $SHDiagProc = Get-Process -Id $ProcessID
      [datetime]$SHDiagStart = $SHDiagProc.Get_StartTime()
      [datetime]$min = $SHDiagStart.AddSeconds(-$Threshold)
      [datetime]$max = $SHDiagStart.AddSeconds($Threshold)

      $arrprocs = Get-Process |?{$_.Name -eq "msdt"} | Where-Object{ $_.Get_StartTime() -gt $min -and $_.Get_StartTime() -lt $max}
      
      $MSDTprocs = @()
      $arrprocs | ForEach-Object{$myID = $_.id; $MSDTprocs += Get-WmiObject Win32_Process | Where-Object {$_.ProcessID -eq $myID -and $_.CommandLine -ne $null} } 

      if($MSDTprocs)
      {
            $MSDTprocs | ForEach-Object { if ($_.CommandLine -ilike "*/path*" -or $_.CommandLine -ilike "*/cab*"){$SelfHelp = $true}}
      }
      
    return $SelfHelp
}
#*=================================================================================
#last week starting from midnight
#*=================================================================================
function Get-DateLastWeek(){
	$lastweek = (get-date) - (new-timespan -day 8)
	$lastweek = $lastweek.addminutes(-($lastweek.minute))
	$lastweek = $lastweek.addhours(-($lastweek.hour))
	$lastweek = $lastweek.addseconds(-($lastweek.second))
	return $lastweek
}


# Commenting Since Function not applicable to Windows 10
#*=================================================================================
# returns the messages with warning and fatal as keywords in "windowsupdate.log"
#*=================================================================================
<#function Get-WarningAndFatalWindowsUpdateLog($pathWindowsUpdatelog){
	# return messages with "WARNING:" or "FATAL:"
	# parameter for $pathWindowsUpdatelog should be ($env:windir+"\windowsupdate.log")
	if(!(test-path ($pathWindowsUpdatelog))){
		return $null
	}
	$warningAndFatal = get-content $pathWindowsUpdatelog
	
	if($warningAndFatal -eq $null) { return $null }
	
	$warningAndFatalArray = @()

	foreach($w in $warningAndFatal)
	{
		if( ($w.indexof("WARNING:") -gt -1) -or ($w.indexof("FATAL:") -gt -1)  )
		{
			$warningAndFatalArray += $w
		}
	}

	return $warningAndFatalArray
}#>

# returns component and error code

#*=================================================================================
#Get-ComponentAndErrorCode
#*=================================================================================
function Get-ComponentAndErrorCode([string]$msg){
	#[char]$tab=[char]9

	#$var1=$msg.split($tab)
	#$codes=[regex]::matches($var1[5], "0x[a-f0-9a-f0-9A-F0-9A-F0-9]{6,8}") | % {$_.value}
	
	$codes=[regex]::matches($msg, "0x[a-f0-9a-f0-9A-F0-9A-F0-9]{6,8}")
	if($codes.count -gt 1){
		$c1=""
		# there can be more than one error code can be returned for the same component at once
		foreach($c in $codes){
			$c1+="_"+$c
		}
		return $c1
	}else{
		return $codes.Value
	}
	
}

# Commenting Since Function not called in any part of code - 21/04/15
# gets the dated log from given date to present date
#*=================================================================================
#Get-DatedLog
#*=================================================================================
<#function Get-DatedLog([datetime]$fromDate,$log){
	$datedLog = @()	
	if( ((isarray $log) -eq $false) ){
		if( $fromDate -lt ($log.substring(0,10)) ){
			return $log
		}else{
			return $null
		}
	}
	if($log -eq $null) { return $null }
	for($i=0;$i -lt $log.Count ; $i=$i+1){	
		if($log[$i].trim() -eq ""){
			continue
		}
		if( $fromDate -lt ($log[$i].substring(0,10)) ){
			$datedLog += $log[$i]
		}
	}
	return $datedlog	
}#>

# gets the dated events from given date to present date
#*=================================================================================
#Get-DatedEvents
#*=================================================================================
function Get-DatedEvents($eventlog){
	
    $datedEvents = @()
	if($eventlog -eq $null) { return $null }
	foreach($evt in $eventlog)
	{
        $eventMsg = $evt.Message
        $datedEvents += $eventMsg
	}   
	return $datedEvents	
}
#Commenting Since Function not called in any part of code - 21/04/15
# returns the lines with error codes on it with warning and fatal keyword
#*=================================================================================
#Get-LatestWindowsUpdateErrorFromLog
#*=================================================================================
<#function Get-LatestWindowsUpdateErrorFromLog($log){
	if($log -eq $null) { return $null }
	$codes="0x[a-f0-9a-f0-9A-F0-9A-F0-9]{6,8}"
	$errorLog = $log | where { ($_ -match $codes) -and ($_ -notmatch "0x00000000") }
	if($null -eq $errorlog){ return $null }
	if($errorlog.length -eq 0){ return $null }
	if( (isarray $errorlog) ){
		if($errorlog.count -gt 1){
			return $errorlog[$errorlog.Count -1]
		}else{
			return $errorlog[0]
		}
	}
	return $errorLog
}#>

#Commenting Since Function not called in any part of code - 21/04/15

# gets that last error in 8 days, code repitition because of scope creep and wanted to make it easy for testing
<#function get-lastErrorin8Days(){
	$log = Get-WarningAndFatalWindowsUpdateLog ($env:windir+"\windowsupdate.log")
	
	if($log -eq $null) { return $null }

	$lastweek = Get-DateLastWeek
	
	#filtering for lastweek events
	$datedLog = Get-DatedLog $lastweek $log
	
	
	#checking for 0x123456 or 0x12345678 codes 
	
	if($datedLog -eq $null) { return $null }
	$str = Get-LatestWindowsUpdateErrorFromLog $datedLog

	return $str
}#>

#*=================================================================================
#Function to get the Windows Event logs
#GetSystemEvents
#*=================================================================================
function GetSystemEvents($eventSrc,$time)
{
    $events = Get-WinEvent -ProviderName $eventsSrc | ?{($_.LevelDisplayName -ne "Information") -and (($_.Id -eq 20) -or ($_.Id -eq 25)) -and ($_.TimeCreated -gt $time)}
    return $events	
}


#*=================================================================================
#hasWinUpdateErrorInLastWeek
#*=================================================================================
function hasWinUpdateErrorInLastWeek([switch]$AllLastWeekError){
	
	#Commented for Supporting Win 10 
	#$log = Get-WarningAndFatalWindowsUpdateLog ($env:windir+"\windowsupdate.log")

	
	$Events = @()
	$eventsSrc = "Microsoft-Windows-WindowsUpdateClient"

	$StartTime = (Get-Date) - (New-TimeSpan -Day 8)
	

	$wuEvents = GetSystemEvents $eventsSrc $StartTime

	if($wuEvents -eq $null) { return $null }

	
	#$datedLog = Get-DatedLog $lastweek $log
	$Events += Get-DatedEvents $wuEvents
	
	#checking for 0x123456 or 0x12345678 codes 
	#if($datedLog -eq $null) { return $null }
	

	#$str = Get-LatestWindowsUpdateErrorFromLog $datedLog

	#if($str -eq $null){ return $null }
	#$latest =  Get-ComponentAndErrorCode $str

    $latest =  Get-ComponentAndErrorCode $Events[0]

	$prob1 = @{}
	$prob1.add("latest",$latest)
	
	if($AllLastWeekError)
	{
		foreach($str in $Events)
		{
		    $ecode = Get-ComponentAndErrorCode $str	
			
			if($ecode -ne $null -and !$prob1.ContainsValue($ecode))
			{
				$prob1.add($ecode,$ecode)
			}
		}
	}
	
	return $prob1
}
#*=================================================================================
#GetAllErrorCodes
#*=================================================================================
function GetAllErrorCodes()
{
	return (hasWinUpdateErrorInLastWeek -AllLastWeekError)
}


# register dll to fix Error code 0x800B0100 when using Windows Update or Microsoft Update to install updates
# http://support.microsoft.com/kb/956702
function registerDLL_SignatureCheck(){
	regsvr32 Softpub.dll /s
	regsvr32 Wintrust.dll /s
	regsvr32 Initpki.dll /s
	regsvr32 Mssip32.dll /s

}



# error code detected
function ErrorDetected($errorCodetoCHeck){
	$errorCodes = GetAllErrorCodes 
	$detected = $false
	
	foreach($err in $errorCodes){
		[string]$err1 = [string]$err
		if($err1.indexof($errorCodetoCHeck) -gt -1){
			$detected = $true
			break
		}
	}

	return $detected
}


#function that checks whether a service is started or not
function isServiceStarted($serviceName){

	if($serviceName -eq $null){ return $false }
	$service=get-service $serviceName
	if($service.status -ieq "running"){
		return $true
	}
	return $false
}

#function that checks whether given of services are started or not using isServiceStarted function
function didGivenServicesStarted($services){
	
	
	foreach($s in $services){

		if(((isServiceStarted $s) -eq $false)){
			return $false
		}
	}
	
	return $true
}


#*=================================================================================
#CheckErrorCode
#*=================================================================================
function CheckErrorCode
{
	param($errorcode,$allError)	
	if($allError.GetType().Name -eq "Hashtable")
	{
		return $allError.Contains($errorcode)
	}
}


#======================================
# debug Information writing in file
#=====================================
function append-debugFile($msg1,$file1){
	$msg1 >> $file1
}

Youez - 2016 - github.com/yon3zu
LinuXploit