none
Remote-Abfrage: Ergebnisse exportieren RRS feed

  • Frage

  • Hallo,

    habe zwei Powershell-Skripte zusammen kopiert. Teil 1 sammelt alle Computernamen aus einer spezifischen OU. Teil 2 führt eine Abfrage aller COmputer aus (und zwar welche TPM Firmware vorhanden ist).

    Jetzt schaffe ich es mit meinen rudimentären Powershell Kenntnissen nicht, dass das Ergebnis in eine CSV-Datei exportiert wird. Entweder funktioniert exportcsv in diesem Skript nicht (es wird eine Datei mit 0 KB erstellt), oder ich setze den Befehl an die falsche Stelle ... ich weiß es nicht.

    Wie kann ich das Ergebnis in eine einzelne Datei exportieren? Danke für Hilfe!

    foreach ($COMPUTER in $(Get-ADComputer -Filter * -Searchbase 'OU=_10-Clients BL1,OU=BL1,OU=TEST,OU=Sites,DC=VL-TEST,DC=COM')) | export-csv -path d:\jge\tpm\neuertest.csv -Append -NoTypeInformation {
      write-host "Connecting to $($COMPUTER.Name)"
      Invoke-Command $COMPUTER.Name {$IfxManufacturerIdInt = 0x49465800 # 'IFX'
    		
    		function IsInfineonFirmwareVersionAffected ($FirmwareVersion)
    		{
    			$FirmwareMajor = $FirmwareVersion[0]
    			$FirmwareMinor = $FirmwareVersion[1]
    			switch ($FirmwareMajor)
    			{
    				4 { return $FirmwareMinor -le 33 -or ($FirmwareMinor -ge 40 -and $FirmwareMinor -le 42) }
    				5 { return $FirmwareMinor -le 61 }
    				6 { return $FirmwareMinor -le 42 }
    				7 { return $FirmwareMinor -le 61 }
    				133 { return $FirmwareMinor -le 32 }
    				default { return $False }
    			}
    		}
    		
    		function IsInfineonFirmwareVersionSusceptible ($FirmwareMajor)
    		{
    			switch ($FirmwareMajor)
    			{
    				4 { return $True }
    				5 { return $True }
    				6 { return $True }
    				7 { return $True }
    				133 { return $True }
    				default { return $False }
    			}
    		}
    		
    		$Tpm = Get-Tpm
    		$ManufacturerIdInt = $Tpm.ManufacturerId
    		$FirmwareVersion = $Tpm.ManufacturerVersion -split "\."
    		$FirmwareVersionAtLastProvision = (Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\TPM\WMI" -Name "FirmwareVersionAtLastProvision" -ErrorAction SilentlyContinue).FirmwareVersionAtLastProvision
    		
    		if (!$Tpm)
    		{
    			Write-Host "No TPM found on this system, so the issue does not apply here."
    		}
    		else
    		{
    			if ($ManufacturerIdInt -ne $IfxManufacturerIdInt)
    			{
    				Write-Host "This non-Infineon TPM is not affected by the issue."
    			}
    			else
    			{
    				if ($FirmwareVersion.Length -lt 2)
    				{
    					Write-Error "Could not get TPM firmware version from this TPM."
    				}
    				else
    				{
    					if (IsInfineonFirmwareVersionSusceptible($FirmwareVersion[0]))
    					{
    						if (IsInfineonFirmwareVersionAffected($FirmwareVersion))
    						{
    							Write-Host ("This Infineon firmware version {0}.{1} TPM is not safe. Please update your firmware." -f [int]$FirmwareVersion[0], [int]$FirmwareVersion[1])
    						}
    						else
    						{
    							Write-Host ("This Infineon firmware version {0}.{1} TPM is safe." -f [int]$FirmwareVersion[0], [int]$FirmwareVersion[1])
    							if (!$FirmwareVersionAtLastProvision)
    							{
    								Write-Host ("We cannot determine what the firmware version was when the TPM was last cleared. Please clear your TPM now that the firmware is safe.")
    							}
    							elseif ($FirmwareVersion -ne $FirmwareVersionAtLastProvision)
    							{
    								Write-Host ("The firmware version when the TPM was last cleared was different from the current firmware version. Please clear your TPM now that the firmware is safe.")
    							}
    						}
    					}
    					else
    					{
    						Write-Host ("This Infineon firmware version {0}.{1} TPM is safe." -f [int]$FirmwareVersion[0], [int]$FirmwareVersion[1]) 
    					}
    				}
    			}
    		}}
    }

    Dienstag, 14. August 2018 14:27

Antworten

  • Hmmm ... Dein Code ist etwas unübersichtlich ... deshalb natürlich auch schwer zu debuggen ...

    Wie wär's - wollen wir uns gemeinsam rantasten? Ich würde erstmal die nötigen Infromationen einsammeln und die Bewertung/Auswertung lokal verarbeiten. Also wäre das hier der erste Schritt:

    $Searchbase = 'OU=_10-Clients BL1,OU=BL1,OU=TEST,OU=Sites,DC=VL-TEST,DC=COM'
    $ComputerList = Get-ADComputer -Filter * -Searchbase $SearchBase | Select-Object -Property Name
    
    foreach ($ComputerName in $ComputerList.Name) {
        If (Test-Connection -ComputerName $ComputerName -Count 1 -Quiet) {
            Invoke-Command -ComputerName $ComputerName {
                $TPM = Get-Tpm -ErrorAction SilentlyContinue
                $RegKey = (Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\TPM\WMI" -Name "FirmwareVersionAtLastProvision" -ErrorAction SilentlyContinue).FirmwareVersionAtLastProvision
                [PSCustomobject]@{
                    RegKey          = $RegKey
                    ManufacturerId  = $Tpm.ManufacturerId
                    FirmwareVersion = $Tpm.ManufacturerVersion
                }
            }
        }
    }
    Schau mal bitte, ob der Schnipsel läuft, dann machen wir mit den Daten später weiter.  ;-)


    Best regards,

    (79,108,97,102|%{[char]$_})-join''


    Dienstag, 14. August 2018 15:59

Alle Antworten

  • Hmmm ... Dein Code ist etwas unübersichtlich ... deshalb natürlich auch schwer zu debuggen ...

    Wie wär's - wollen wir uns gemeinsam rantasten? Ich würde erstmal die nötigen Infromationen einsammeln und die Bewertung/Auswertung lokal verarbeiten. Also wäre das hier der erste Schritt:

    $Searchbase = 'OU=_10-Clients BL1,OU=BL1,OU=TEST,OU=Sites,DC=VL-TEST,DC=COM'
    $ComputerList = Get-ADComputer -Filter * -Searchbase $SearchBase | Select-Object -Property Name
    
    foreach ($ComputerName in $ComputerList.Name) {
        If (Test-Connection -ComputerName $ComputerName -Count 1 -Quiet) {
            Invoke-Command -ComputerName $ComputerName {
                $TPM = Get-Tpm -ErrorAction SilentlyContinue
                $RegKey = (Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\TPM\WMI" -Name "FirmwareVersionAtLastProvision" -ErrorAction SilentlyContinue).FirmwareVersionAtLastProvision
                [PSCustomobject]@{
                    RegKey          = $RegKey
                    ManufacturerId  = $Tpm.ManufacturerId
                    FirmwareVersion = $Tpm.ManufacturerVersion
                }
            }
        }
    }
    Schau mal bitte, ob der Schnipsel läuft, dann machen wir mit den Daten später weiter.  ;-)


    Best regards,

    (79,108,97,102|%{[char]$_})-join''


    Dienstag, 14. August 2018 15:59
  • Das ist viel schöner als meine Version, die ich ja nur zusammen geklickt habe. Mehr Infos brauche ich auch nicht. Cool!
    Mittwoch, 15. August 2018 08:55