Himansu
Himansu

Reputation: 23

Script is not picking all servers from the text file

$Servers = Get-Content "D:\Server\Servers.txt"
#Gathering Vars
$OSVersion = (Get-CimInstance Win32_OperatingSystem).version
$WarningPreference = 'SilentlyContinue'
$key = 'HKLM:\Software\Company\SCCMMetaData'
$StampCheck = (Get-ItemProperty -Path $key).PatchRelease

$data = foreach ($server in $Servers) {
    #Gathering OS Version & Normalization of data
    If ($OSVersion -like "10.*") { $OSName = "WINS2016-"; $KB = "KB4540670", "KB4538461", "KB4550929", "KB4556813", "KB4549949", "KB4550994", "KB4494175", "KB4540723" }
    Elseif ($OSVersion -like "6.0.*") { $OSName = "WINS08R1-"; $KB = "KB4534303", "KB4534312" }
    Elseif ($OSVersion -like "6.1.*") { $OSName = "WINS08R2-"; $KB = "KB4534314", "KB4539602", "KB4534310" }
    Elseif ($OSVersion -like "6.2.*") { $OSName = "WINS12R1-"; $KB = "KB4541510", "KB4550917", "KB4556840", "KB4540726" }
    Elseif ($OSVersion -like "6.3.*") { $OSName = "WINS12R2-"; $KB = "KB4541509", "KB4550961", "KB4556846", "KB4540725" }

    #Check to see if KB is installed & build the stamp
    Try {
        $KBSearch = Get-HotFix -id $KB -ErrorAction Stop
        $Stamp = $OSName 
        If ($StampCheck -eq "2020Q2") {  
            Return "$Server Already Compliant"
        }
        Else {
            Set-ItemProperty -path 'HKLM:\Software\Company\SCCMMetaData' -Name 'PatchRelease' -Value $Stamp
            Restart-Service -DisplayName 'Agent' -ErrorAction Ignore
            Start-Sleep 30
            Return "$Server Stamped"
        }
    }
    Catch { Return "Missing Patch $KB on server $Server" }
}

Restart-Service -DisplayName ' Agent'
$data | Export-Csv "D:\Scripts\KB.csv" -NoTypeInformation

This is my code and it is not iterating for all the servers in the .txt file. It is only taking 1st server in the list . It is not checking for each server in the txt file . Where i am doing the mistake ? Could any one help me ?

Upvotes: 2

Views: 130

Answers (1)

Mathias R. Jessen
Mathias R. Jessen

Reputation: 174545

return will cause PowerShell to... well, return control to the caller :)

Simply omit the return keyword and leave the expressions following them as-is - they'll automatically "bubble up" to the caller anyway:

    #Check to see if KB is installed & build the stamp
    Try {
        $KBSearch = Get-HotFix -id $KB -ErrorAction Stop
        $Stamp = $OSName 
        If ($StampCheck -eq "2020Q2") {  
            "$Server Already Compliant"
        }
        Else {
            Set-ItemProperty -path 'HKLM:\Software\Company\SCCMMetaData' -Name 'PatchRelease' -Value $Stamp
            Restart-Service -DisplayName 'Agent' -ErrorAction Ignore
            Start-Sleep 30
            "$Server Stamped"
        }
    }
    Catch { "Missing Patch $KB on server $Server" } 

You can read more about the return keyword in the about_Return helpfile

Upvotes: 2

Related Questions