如果 PC 是笔记本电脑,则运行脚本

如果 PC 是笔记本电脑,则运行脚本

我发现这个 PS 脚本可以检查 PC 是台式机还是笔记本电脑

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"
}

如果结果是“笔记本电脑”,我需要运行另一个命令

Add-AppxPackage -Path ".\28671Petrroll.PowerPlanSwitcher_0.4.4.0_x86__ge82akyxbc7z4.Appx"

否则就跳过它。我该如何将它们结合起来?

编辑:

似乎我需要互联网连接才能完全安装该应用程序;如果没有互联网,只要我在有互联网连接的情况下运行该应用程序,该应用程序就无法启动。有人知道在没有互联网连接的情况下我需要做什么吗?或者这是不可能的?

答案1

以下是经过清理且更易读的代码版本:

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-WmiObjectGet-CimInstance。在这种情况下,命令将如下所示:

$HardwareType = (Get-CimInstance -Class Win32_ComputerSystem -Property PCSystemType).PCSystemType

原因如下:

WMI cmdlet 和 CIM cmdlet 之间的最大区别在于 CIM cmdlet 使用 WSMAN (WinRM) 连接到远程计算机。与创建 PowerShell 远程会话的方式相同,您可以使用这些 cmdlet 创建和管理 CIM 会话。

WMI cmdlet 的最大缺点是它们使用 DCOM 来访问远程机器。DCOM 不适用于防火墙,可能会被网络设备阻止,并且当出现问题时会给出一些难以理解的错误。

来源:https://devblogs.microsoft.com/scripting/should-i-use-cim-or-wmi-with-windows-powershell/

答案2

嗯,现在可能确实如此。事情会发生变化,然后有一天它就不再是事实了。根据我 20 多年来编写代码来配置不同类型的 PC 硬件的经验,尽可能彻底地做事是有好处的。我只是想让你以后少些烦恼。

查看此 URL 上的所有不同机箱类型。笔记本电脑可能会报告以下所有类型:便携式 (8)、笔记本电脑 (9)、笔记本 (10)、超薄笔记本电脑 (14)

https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-systemenclosure

答案3

您的程序无法证明它是台式机,它只是确定系统是否是笔记本电脑。您假设系统必须是其中之一,这是错误的。这是物联网时代,除了笔记本电脑外,还有嵌入式设备、服务器、工作站和台式机。永远不要假设。

以下是可能的值:

AppliancePC 6
系统是一款家用电脑

桌面 1
系统是一个桌面

EnterpriseServer 4
系统是企业服务器


最大枚举值 最大8

Mobile 2
System 是一款移动设备

PerformanceServer 7
System 是一款性能服务器

SOHOServer 5
系统是一款小型办公室和家庭办公室 (SOHO) 服务器

未指定 0
系统类型未指定

工作站 3
系统是一个工作站

尝试这个:

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."}

相关内容