PC가 데스크탑인지 노트북인지 확인하는 PS 스크립트를 찾았습니다.
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"
}
결과가 "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-WmiObject
편집: 에서 로 전환하는 것이 좋습니다 Get-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
시스템은 어플라이언스 PC입니다.
데스크탑 1
시스템은 데스크탑입니다.
EnterpriseServer 4
시스템은 엔터프라이즈 서버입니다.
최대 8
최대 열거형 값
모바일 2
시스템은 모바일 장치입니다.
PerformanceServer 7
시스템은 성능 서버입니다.
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."}