Ich habe dieses PS-Skript gefunden, das prüft, ob der PC ein Desktop oder ein Laptop ist
function Get-HardwareType {
$hardwaretype = Get-WmiObject -Class Win32_ComputerSystem -Property PCSystemType
If ($hardwaretype -ne 2)
{
return $true
}
Else
{
return $false
}}
If (Get-HardwareType)
{
"$Env:ComputerName is a Desktop"
}
Else
{
"$Env:ComputerName is a Laptop"
}
Wenn das Ergebnis "Laptop" ist, muss ich diesen anderen Befehl ausführen
Add-AppxPackage -Path ".\28671Petrroll.PowerPlanSwitcher_0.4.4.0_x86__ge82akyxbc7z4.Appx"
oder es zu überspringen. Wie kann ich sie kombinieren?
BEARBEITEN:
Scheint, als ob ich eine Internetverbindung benötige, um die App vollständig zu installieren; ohne Internet startet die App nicht, solange ich die App mit einer Internetverbindung ausführe. Weiß jemand, was ich ohne Internetverbindung tun muss? Oder ist das unmöglich?
Antwort1
Hier ist eine bereinigte, besser lesbare Version Ihres Codes:
function Test-IsLaptop {
$HardwareType = (Get-WmiObject -Class Win32_ComputerSystem -Property PCSystemType).PCSystemType
# https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-computersystem
# Mobile = 2
$HardwareType -eq 2
}
if (Test-IsLaptop) {
Write-Host "$Env:ComputerName is a Laptop"
Add-AppxPackage -Path "$PSScriptRoot\28671Petrroll.PowerPlanSwitcher_0.4.4.0_x86__ge82akyxbc7z4.Appx"
} else {
Write-Host "$Env:ComputerName is a Desktop"
}
Get-WmiObject
Edit: Es empfiehlt sich, von auf umzustellen Get-CimInstance
. Der Befehl sähe in diesem Fall so aus:
$HardwareType = (Get-CimInstance -Class Win32_ComputerSystem -Property PCSystemType).PCSystemType
Und hier ist der Grund dafür:
Der große Unterschied zwischen den WMI-Cmdlets und den CIM-Cmdlets besteht darin, dass die CIM-Cmdlets WSMAN (WinRM) verwenden, um eine Verbindung zu Remotecomputern herzustellen. Auf die gleiche Weise, wie Sie PowerShell-Remotesitzungen erstellen können, können Sie mit diesen Cmdlets auch CIM-Sitzungen erstellen und verwalten.
Der große Nachteil der WMI-Cmdlets besteht darin, dass sie DCOM für den Zugriff auf Remotecomputer verwenden. DCOM ist nicht Firewall-freundlich, kann von Netzwerkgeräten blockiert werden und führt zu einigen merkwürdigen Fehlern, wenn etwas schief geht.
Quelle:https://devblogs.microsoft.com/scripting/sollte-ich-cim-oder-wmi-mit-windows-powershell-verwenden/
Antwort2
Nun, im Moment mag das wahr sein. Die Dinge ändern sich und eines Tages ist es nicht mehr wahr. Aus meiner Erfahrung, die ich seit über 20 Jahren mit dem Schreiben von Code zum Konfigurieren verschiedener Arten von PC-Hardware gemacht habe, weiß ich, dass es sich auszahlt, so gründlich wie möglich zu sein. Ich versuche nur, Ihnen später Ärger zu ersparen.
Schauen Sie sich die verschiedenen Gehäusetypen unter dieser URL an. Alle diese könnten potenziell von einem Laptop gemeldet werden: Portable (8), Laptop (9), Notebook (10), Subnotebook (14)
https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-systemenclosure
Antwort3
Ihr Programm beweist nicht, dass es sich um einen Desktop handelt, es ermittelt lediglich, ob das System ein Laptop ist oder nicht. Sie gehen davon aus, dass ein System das eine oder das andere sein muss, was falsch ist. Wir leben im Zeitalter des Internets der Dinge mit eingebetteten Geräten, Servern, Workstations und Desktops zusätzlich zu Laptops. Gehen Sie niemals von Annahmen aus.
Hier sind die möglichen Werte:
AppliancePC 6
System ist ein Appliance-PC
Desktop 1
System ist ein Desktop
EnterpriseServer 4
System ist ein Enterprise Server
Maximal 8
Maximaler Enumerationswert
Mobile 2
System ist ein mobiles Gerät
PerformanceServer 7
System ist ein Performance-Server
SOHOServer 5
System ist ein Small Office und Home Office (SOHO) Server
Nicht angegeben 0
Der Systemtyp ist nicht angegeben
Workstation 3
System ist eine Workstation
Versuche dies:
Function IsLaptop
{
$isLaptop = $false
if(Get-WmiObject -Class win32_systemenclosure |
Where-Object { $_.chassistypes -eq 8 -or $_.chassistypes -eq 9 -or $_.chassistypes -eq 10 -or $_.chassistypes -eq 14 -or $_.chassistypes -eq 30})
{ $isLaptop = $true }
Return $isLaptop
}
If (IsLaptop) {"This is a laptop"} Else {"This is not a laptop."}