Windows 11 ready Filter

Post Reply
haagm
Posts: 35
Joined: 25. Feb 2014, 17:57
Location: Heidelberg
Contact:

Windows 11 ready Filter

Post by haagm » 27. Feb 2022, 12:12

Hallo Community,

Es ist zwar für uns noch etwas länger hin um global auf Windows 11 umzusteigen aber Anfragen gibts dennoch bereits.

Gibt es seitens Matrix42 Bestrebungen einen Filter zu bauen um mit Windows 11 kompatible Geräte zu identifizieren?
Ich dachte bevor ich mich selbst dran versuche, vielleicht ist das ja bereits geplant weil es das mal mit Windows 10 und 8 gab.
(wobei ich mich nicht dran erinnere sie benutzt zu haben...)
Oder auch anders gefragt, hat das jemand selbstversucht die notwendigen Werte für CPU, TPM, UEFI und co einzusammeln und kann sagen wie erfolgreich dieses Unterfangen war?

Vielleicht habt ihr auch ein tool benutzt (drittanbieter wie whynotwin11 oder das Windows eigene Integrationsprüfungsprogramm)?

Viele Grüße aus Heidelberg

munzur
Posts: 260
Joined: 23. Jun 2020, 19:26
Contact:

Re: Windows 11 ready Filter

Post by munzur » 28. Feb 2022, 15:18

Moin,

auch ich hatte damals beim Support nachgefragt. Das Ganze ist wohl in der Entwicklung, allerdings nicht so "einfach" wie vorher, da gewisse Faktoren vom Inventory nicht erfasst werden, wie z.B. TPM Version.

Was vermutlich funktioniert, wäre ein Paket welches die Informationen ausliest und in die Registry schreibt, welches man wiederrum abfangen kann.

KW-MF
Posts: 26
Joined: 27. Mar 2021, 11:48
Contact:

Re: Windows 11 ready Filter

Post by KW-MF » 20. Aug 2022, 12:40

Hallo

ein solcher Filter interessiert mich auch

Klar könnte man das als Paket abfragen und dann einsammeln, auserten, etc.

Ich finde aber das MX42 hier am zuge ist und das Inventory und Co anpasst um dann einen Filter default bereitzustellen.
Oder gibts hier schon News ?

Gruß

KW-MF
Posts: 26
Joined: 27. Mar 2021, 11:48
Contact:

Re: Windows 11 ready Filter

Post by KW-MF » 20. Aug 2022, 13:35

ich habe hier ein Script gefunden, welches ich von LOGINvntory heruntergeladen habe.

Bisschen umbauen, sollte es für Empirum nutzbar sein oder wie seht Ihr das ?

Code: Select all

######################################################################################
# Win11 Compatibility
# -------------------
# This script fetches relevant values for checking Win11 compatibility from the 
# LOGINventory database to set the custom properties for each Windows client device, 
# which can later be queried whether a client is compatible or not.
# 
# Adjust your personal DB settings if you are not using the default configuration.
# To do this, edit lines 34 to 35.
# 
# You can set the name of the category and the name of the custom properties yourself.
# 
# The 3 files with compatible processors can be updated from the Git Hub project 
# "WhyNotWin11" - just download and replace if there are newer versions.
# https://github.com/rcmaehl/WhyNotWin11/tree/main/includes
#  
# If you renamed the default device node, please check the name below so that the 
# cd command finds a valid device node
# 
# 
#                !!!!!!! IMPORTANT !!!!!!!!
#
# Use this script only whith the LOGINventory Powershell Console (PSC.exe) - just start
# and execute the script by entering the full path
# PS LI:\> C:\Temp\W11Check\W11Check.ps1 
#
#
#
# Schmidt's LOGIN, 2021
# Script version:  9.0.0
######################################################################################

########################## Configuration #############################################
$SQLServer = ".\LOGINventory"
$SQLDBName = "LOGINventory9"
$uid ="sa"
$pwd = "LOGINventory6"

$scriptPath = $MyInvocation.MyCommand.Path
$scriptPath = Split-Path $scriptPath -Parent

$category = "Windows11Check"
$cpuCheckName = "CPUCheck";
$ramCheckName = "RAMCheck";
$tpmCheckName = "TPMCheck";
$diskCheckName = "DiskCheck";
$bootMethodCheckName = "BootMethodCheck";
$architectureCheckName = "ArchitectureCheck";
$videoAdapterCheckName = "VideoAdapterCheck";
$secureBootCheckName = "SecureBootCheck";
$w11CompatibleName = "Windows11Compatible";

cd 'LI:\IT Inventory\Assets*'
######################################################################################

$intel = $scriptPath + '\SupportedProcessorsIntel.txt'
$amd = $scriptPath + '\SupportedProcessorsAMD.txt'
$qualcomm = $scriptPath + '\SupportedProcessorsQualcomm.txt'
$fileList = @($intel, $amd, $qualcomm);

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$DataSet = New-Object System.Data.DataSet

$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = False; User ID = $uid; Password = $pwd;"

$SqlCmd.Connection = $SqlConnection
$SqlAdapter.SelectCommand = $SqlCmd

$list = New-Object System.Collections.Generic.List[System.String];


$fileList | foreach {
    (Get-Content $_ | Select -Skip 1 | Select @{name='entry';expression={'(''' + $_ + ''')'}}) | foreach {
        if ($_.entry -ne '(''EOF'')'){
            $list.Add($_.entry);
        }
    }
}
$cpulist = ($list -join ", ");

$SqlQuery = "
SELECT [A].[Name]
, [BiosInfo].[Mode]
, [BiosInfo].[SecureBoot]
, [CPU].[Name]
, [CpuInfo].[Cores]
, [CpuInfo].[Threads]
, [CpuInfo].[Speed]
, [OSI].[Architecture]
, [OSI].[DirectXVersion]
, [DI].[MemorySizeGB]
, [BootPartition].[FreeSpace] / 1024 AS [FreeSpace]
, [BootPartition].[DiskType]
, [TPM].[SpecVersionString]
, [TPM].[MaxSpecVersion]
, [VAI].[Mode] AS [VideoMode]
, [VAI].[DriverModel] AS [VideoDriverModel]
, CASE WHEN [CPUList].[Name] IS NOT NULL AND [CpuInfo].[Cores] >= 2 AND [CpuInfo].[Speed] >= 1000 THEN 1 ELSE 0 END AS [CPUCheck] 
, CASE WHEN [DI].[MemorySizeGB] >= 4 THEN 1 ELSE 0 END AS [RAMCheck]
, CASE WHEN [TPM].[MaxSpecVersion] >= 2.0 THEN 1 ELSE 0 END AS [TPMCheck]
, CASE WHEN [BootPartition].[FreeSpace] / 1024 >= 64 AND [BootPartition].[DiskType] = 'GPT' THEN 1 ELSE 0 END AS [DiskCheck]
, CASE WHEN [BiosInfo].[Mode] = 'UEFI' THEN 1 ELSE 0 END AS [BootMethodCheck]
, CASE WHEN [BiosInfo].[SecureBoot] = 1 THEN 1 ELSE 0 END AS [SecureBootCheck]
, CASE WHEN [OSI].[Architecture] = 'AMD64' THEN 1 ELSE 0 END AS [ArchitectureCheck]
, CASE WHEN [VAI].[AssetId] IS NOT NULL THEN 1 ELSE 0 END AS [VideoAdapterCheck]
, CASE WHEN [OSI].[DirectXVersion] >= 12 AND [VAI].[DriverModel] >= 2 THEN 1 ELSE 0 END AS [DirectXCheck]
FROM [Device] AS [Device]
JOIN [Asset] AS [A] ON [Device].[Id] = [A].[Id]
LEFT JOIN [BiosInfo] AS [BiosInfo] ON [BiosInfo].[AssetId] = [A].[Id]
LEFT JOIN [CpuInfo] AS [CpuInfo] ON [CpuInfo].[AssetId] = [A].[Id]
LEFT JOIN [DeviceInfo] AS [DI] ON [DI].[AssetId] = [A].[Id]
LEFT JOIN (SELECT [AssetId], [DiskType], [FreeSpace] FROM [Partition] WHERE [BootVolume] = 1) AS [BootPartition] ON [BootPartition].[AssetId] = [A].[Id]
LEFT JOIN (SELECT [AssetId], [Activated] AS [Activated], MAX([SpecVersion]) AS [SpecVersionString], MAX(TRY_CAST(SPL.part AS decimal)) AS [MaxSpecVersion] FROM [TrustedPlatformModuleInfo] AS [TPM] CROSS APPLY LiSplitString([TPM].[SpecVersion], ',') as SPL GROUP BY [AssetId], [Activated]) AS [TPM] ON [TPM].[AssetId] = [A].[Id]
JOIN [CPU] AS [CPU] ON [CPU].[Id] = [CpuInfo].[ItemId]
LEFT JOIN (SELECT [CPUList].[Name] FROM (VALUES $cpulist) AS CPUList([Name])) AS [CPUList] ON [CPU].[Name] LIKE '%'+[CPUList].[Name]+'%'
LEFT JOIN (SELECT [AssetId], MAX([Mode]) AS [Mode], MAX(TRY_CAST(SUBSTRING([DriverModel], CHARINDEX(' ', [DriverModel])+1, 1) AS int)) AS [DriverModel] FROM [VideoAdapterInfo] WHERE CAST(SUBSTRING(SUBSTRING([Mode], CHARINDEX('*', [Mode])+1, LEN([Mode])), 0, CHARINDEX('*', SUBSTRING([Mode], CHARINDEX('*', [Mode])+1, LEN([Mode])))) AS int) > 720 GROUP BY [AssetId]) AS [VAI] ON [VAI].[AssetId] = [A].[Id]
JOIN (SELECT [AssetId], [ItemId], [Architecture], CAST(REPLACE(SUBSTRING([DirectXVersion], CHARINDEX(' ', [DirectXVersion])+1, 2), '.', '') AS int) AS [DirectXVersion] FROM [OperatingSystemInfo]) AS [OSI] ON [OSI].[AssetId] = [A].[Id]
JOIN [OperatingSystem] AS [OS] ON [OS].[Id] = [OSI].[ItemId]
JOIN [LastInventory] AS [LastInventory] ON [LastInventory].[AssetId] = [A].[Id]
WHERE [A].[Archived] IS NULL AND [OS].[Platform] = 'Windows' AND [OS].[Name] NOT LIKE '%Server%' AND [LastInventory].[Method] <> 'EAS'
"

$SqlCmd.CommandText = $SqlQuery
$SqlAdapter.Fill($DataSet)

#$DataSet.Tables[0] | out-file "C:\Temp\W11Check\output.csv"



$DataSet.Tables[0] | foreach {
    $assetName = $_['Name']
    $cpuCheckValue = [boolean]$_['CPUCheck']
    $ramCheckValue = [boolean]$_['RAMCheck']
    $tpmCheckValue = [boolean]$_['TPMCheck']
    $diskCheckValue = [boolean]$_['DiskCheck']
    $bootMethodCheckValue = [boolean]$_['BootMethodCheck']
    $architectureCheckValue = [boolean]$_['ArchitectureCheck']
    $videoCheckValue = [boolean]$_['VideoAdapterCheck'] -and [boolean]$_['DirectXCheck']
    $secureBootCheckValue = [boolean]$_['SecureBootCheck']


    if (($cpuCheckValue -eq $true) -and ($ramCheckValue -eq $true) -and ($tpmCheckValue -eq $true) -and ($diskCheckValue -eq $true) -and ($bootMethodCheckValue -eq $true) -and ($architectureCheckValue -eq $true) -and ($videoCheckValue -eq $true) -and ($secureBootCheckValue -eq $true)) {
        $w11CompatibleValue = $true;
    } else {
        $w11CompatibleValue = $false;
    };


    Write-Host "Patching Asset: '$assetName'"
    Set-LiCustomProperty -Name $cpuCheckName -Value $cpuCheckValue -Category $category -AssetName $assetName
    Set-LiCustomProperty -Name $ramCheckName -Value $ramCheckValue -Category $category -AssetName $assetName
    Set-LiCustomProperty -Name $tpmCheckName -Value $tpmCheckValue -Category $category -AssetName $assetName
    Set-LiCustomProperty -Name $diskCheckName -Value $diskCheckValue -Category $category -AssetName $assetName
    Set-LiCustomProperty -Name $bootMethodCheckName -Value $bootMethodCheckValue -Category $category -AssetName $assetName
    Set-LiCustomProperty -Name $architectureCheckName -Value $architectureCheckValue -Category $category -AssetName $assetName
    Set-LiCustomProperty -Name $videoAdapterCheckName -Value $videoCheckValue -Category $category -AssetName $assetName
    Set-LiCustomProperty -Name $secureBootCheckName -Value $secureBootCheckValue -Category $category -AssetName $assetName
    Set-LiCustomProperty -Name $w11CompatibleName -Value $w11CompatibleValue -Category $category -AssetName $assetName

}

KW-MF
Posts: 26
Joined: 27. Mar 2021, 11:48
Contact:

Re: Windows 11 ready Filter

Post by KW-MF » 30. Oct 2022, 09:05

Hallo

nach Rückmeldung vom Support wurde ich auf das Hardware REadiness.ps1 Skript von Microsoft verwiesen.
Das Anpassen des Inventory ist nicht auf der Roadmap. Auszug aus der Mail anbei:

Code: Select all

wie schon geschrieben ist das Problem, dass das Inventory keine Rubrik für TPM Modul Information in der Konsole hergibt.
Eine eigene Rubrik müsste es ja auch irgendwie geben, wenn man den von Ihnen genannten Registry Key ausliest und dann darstellt. 
Dies aufzunehmen ist auch bisher nicht in unserer Roadmap.
Ich werde das Ganze jetzt über das Microsoft-Skript lösen und dann als Paket lösen. Die Abfrage dann über einen Empirum-Filter bauen.
Auch wenn es keine 100%ige Sicherheit ist, dass ein Client dann wirklich Win11 tauglich sein wird, aber dennoch kann ich es so etwas besser eingrenzen.

haagm
Posts: 35
Joined: 25. Feb 2014, 17:57
Location: Heidelberg
Contact:

Re: Windows 11 ready Filter

Post by haagm » 04. Jan 2023, 12:52

Hallo KW-MF,

dank deinem Beitrag haben wir ebenfalls das Microsoft Powershell Script in ein Empirum Paket verbaut und mittels regkeys und Filter die Werte eingesammelt. Was wir bisher noch nicht herausgefunden haben, ist ob die Ausgabe ob Valid oder eben nicht, auch mit dem übereinstimmt was Microsoft selbst für würdig erachtet. Wir können nur annehmen, dass die Wahrscheinlichkeit sehr hoch ist. Die in Win10 eingebaute PC Integrationsprüfung ist bei uns (wahrscheinlich weil es eine Komponente von windows 11 ist) blockiert.

Seid ihr da schon weiter gekommen?

Viele Grüße

DotzlerJ
Posts: 57
Joined: 08. Jan 2019, 09:20
Contact:

Re: Windows 11 ready Filter

Post by DotzlerJ » 08. Sep 2023, 09:52

Hallo in die Runde,

habt ihr schon etwas neues zu berichten oder Erfahrungen gesammelt?

Post Reply

Return to “Inventory”

Who is online

Users browsing this forum: No registered users and 5 guests