PowerShell 技能连载 - 检测是否连接到计费的 WLAN

是否曾经需要知道您当前是否已连接到计费的网络?这是一种快速的检查方法:

1
2
3
4
5
6
function Test-WlanMetered
{
[void][Windows.Networking.Connectivity.NetworkInformation, Windows, ContentType = WindowsRuntime]
$cost = [Windows.Networking.Connectivity.NetworkInformation]::GetInternetConnectionProfile().GetConnectionCost()
$cost.ApproachingDataLimit -or $cost.OverDataLimit -or $cost.Roaming -or $cost.BackgroundDataUsageRestricted -or ($cost.NetworkCostType -ne "Unrestricted")
}

它使用一个 UWP API 返回有关网络状态的大量信息,包括有关网络是否计费的信息。

如果您使用的是较旧的 Windows 平台,则以下是替代的代码,该代码使用好用的旧版 “netsh“ 命令行工具并提取所需的信息。请注意,字符串操作(下面的代码广泛使用)容易出错,可能需要进行调整。

同时,以下代码很好地说明了如果手头没有适当的面向对象的 API 可调用,那么 PowerShell 中的通用字符串操作工具如何可以用作最后的保障:

1
2
3
4
5
6
7
8
9
10
11
function Test-WlanMetered
{
$wlan = (netsh wlan show interfaces | select-string "SSID" | select-string -NotMatch "BSSID")
if ($wlan) {
$ssid = (($wlan) -split ":")[1].Trim() -replace '"'
$cost = ((netsh wlan show profiles $ssid | select-string "Cost|Kosten") -split ":")[2].Trim() -replace '"'

return ($cost -ne "unrestricted" -and $cost -ne "Uneingeschränkt" -and $cost -ne 'Uneingeschr"nkt')
}
else { $false }
}

PowerShell 技能连载 - 使用 WMI 实例路径(第 2 部分)

在上一个技能中,我们演示了了新的 Get-CimInstance 命令缺少 Get-WmiObject 能够返回的重要的 “__Path“ 属性。现在让我们将此属性添加回 Get-CimInstance 中。

Get-CimInstance 返回的每个实例的类型均为 [Microsoft.Management.Infrastructure.CimInstance] 类型,因此可以用 Update-TypeData 向该类型添加新属性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$code = {
# get key properties
$keys = $this.psbase.CimClass.CimClassProperties.Where{$_.Qualifiers.Name -eq 'Key'}.Name
$pairs = foreach($key in $keys)
{
'{0}="{1}"' -f $key, $this.$key
}
# add server name
$path = '\\{0}\{1}:{2}.{3}' -f $this.CimSystemProperties.ServerName.ToUpper(),
# add namespace
$this.CimSystemProperties.Namespace.Replace("/","\"),
# add class
$this.CimSystemProperties.ClassName,
# add key properties
($pairs -join ',')

return $path
}

Update-TypeData -TypeName Microsoft.Management.Infrastructure.CimInstance -MemberType ScriptProperty -MemberName __Path -Value $code -Force

运行此代码后,所有 CIM 实例都将再次具有 __Path 属性。它略有不同,因为“新的” __Path 属性引用了所有键值。对于我们测试的所有用例,这都没有什么不同:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
PS> $old = Get-WmiObject -Class Win32_BIOS

PS> $new = Get-CimInstance -ClassName Win32_BIOS


PS> $old.__PATH
\\DESKTOP-8DVNI43\root\cimv2:Win32_BIOS.Name="1.0.13",SoftwareElementID="1.0.13",SoftwareElementState=3,TargetOperatingSystem=0,Version="DELL - 20170001"

PS> $new.__Path
\\DESKTOP-8DVNI43\root\cimv2:Win32_BIOS.Name="1.0.13",SoftwareElementID="1.0.13",SoftwareElementState="3",TargetOperatingSystem="0",Version="DELL - 20170001"


PS> [wmi]($old.__Path)

SMBIOSBIOSVersion : 1.0.13
Manufacturer : Dell Inc.
Name : 1.0.13
SerialNumber : 4ZKM0Z2
Version : DELL - 20170001

PS> [wmi]($new.__Path)

SMBIOSBIOSVersion : 1.0.13
Manufacturer : Dell Inc.
Name : 1.0.13
SerialNumber : 4ZKM0Z2
Version : DELL - 20170001

PowerShell 技能连载 - 使用 WMI 实例路径(第 1 部分)

通常,最好远离旧的和过时的 Get-WmiObject 命令,而使用像 Get-CimInstance 这样的现代且更快的 CIM 命令。在大多数情况下,它们的效果几乎相同。

但是,在某些领域,新的 CIM 命令缺少信息。最重要的领域之一是 Get-WmiObject 返回的任何对象都可以使用的属性 “__Path“。使用 Get-CimInstance 时,会丢失这个属性。

此路径是 WMI 实例的唯一路径。请看一下——此命令列出了 Win32_Share 的所有实例,并将 WMI 路径返回给这些实例:

1
2
3
4
5
6
7
PS> Get-WmiObject -Class Win32_Share | Select-Object -ExpandProperty __Path
\\DESKTOP-8DVNI43\root\cimv2:Win32_Share.Name="ADMIN$"
\\DESKTOP-8DVNI43\root\cimv2:Win32_Share.Name="C$"
\\DESKTOP-8DVNI43\root\cimv2:Win32_Share.Name="HP Universal Printing PCL 6"
\\DESKTOP-8DVNI43\root\cimv2:Win32_Share.Name="IPC$"
\\DESKTOP-8DVNI43\root\cimv2:Win32_Share.Name="OKI PCL6 Class Driver 2"
\\DESKTOP-8DVNI43\root\cimv2:Win32_Share.Name="print$"

一旦知道实例的路径,就可以随时通过 [wmi] 类型轻松访问它:

1
2
3
4
5
PS> [wmi]'\\DESKTOP-8DVNI43\root\cimv2:Win32_Share.Name="HP Universal Printing PCL 6"'

Name Path Description
---- ---- -----------
HP Universal Printing PCL 6 S/W Laser HP,LocalsplOnly S/W Laser HP

这非常有用,您可以使用现有的 WMI 路径或构造自己的 WMI 路径。例如,要访问其他服务器上的 C$ 共享,只需查看路径即可立即确定需要更改的部分:

\\SERVER12345\root\cimv2:Win32_Share.Name="C$"

__Path 属性也使类似这样的“WMI 浏览器”成为可能:

1
2
3
4
5
6
7
8
9
10
# get all WMI instances
Get-WmiObject -Class CIM_LogicalDevice |
# display propertes
Select-Object -Property __Class, Name, Description, __Path |
# let user select some
Out-GridView -Title 'Select one or more (hold CTRL)' -PassThru |
# retrieve the full selected instance by path
ForEach-Object {
[wmi]$_.__Path | Select-Object * | Out-Default
}

PowerShell 技能连载 - 安装 PowerShell 7

PowerShell 7 是便携式应用程序,可以与 Windows PowerShell 平行运行。您只需要下载并安装它。

这部分很容易,因为 PowerShell 团队提供了自动安装脚本。只需一点技巧,您就可以下载此代码并将其绑定到新的 PowerShell 功能,从而可以非常容易地从现有 Windows PowerShell 安装 PowerShell 7:

1
2
3
4
5
6
7
8
# Download installation script
$code = Invoke-RestMethod -Uri https://aka.ms/install-powershell.ps1

# Dynamically create PowerShell function
New-Item -Path function: -Name Install-PowerShell -Value $code

# Run PowerShel function and install the latest PowerShell
Install-PowerShell -UseMSI -Preview

PowerShell 技能连载 - 允许 PowerPoint 中的点击操作

在 PowerPoint 演示文稿中使用点击操作对于启动 Visual Studio Code 或 PowerShell ISE 以及无缝打开和演示 PowerShell 代码非常有用。

但是,出于安全原因,默认情况下禁止通过插入的“操作”项启动程序,并且没有启用它的简便方法。而且,即使您确实启用了此功能,PowerPoint 也会在短时间后将其恢复为保护模式。

这是一个快速的 PowerShell脚本,您可以在演示之前立即运行它,以确保所有可点击的“操作”点击后能生效。

1
2
$path = 'HKCU:\Software\Microsoft\Office\16.0\PowerPoint\Security'
Set-ItemProperty -Path $path -Name RunPrograms -Value 1 -Type DWord

PowerShell 技能连载 - 管理自动磁盘检测

当 Windows 检测到存储驱动器有异常,它就会启用自动完整性检查。对于系统分区,在下次启动时,Windows 会显示用户提示,并要求获得执行检查的权限。

要找出启用了这种检查的所有驱动器,请运行以下命令:

1
2
3
4
5
PS> Get-CimInstance -ClassName Win32_AutochkSetting | Select-Object -Property SettingID, UserInputDelay

SettingID UserInputDelay
--------- --------------
Microsoft Windows 10 Pro|C:\Windows|\Device\Harddisk0\Partition3 8

UserInputDelay 属性指定 Windows 在启动时等待用户提示的秒数。如果届时用户仍未响应,则将自动执行磁盘完整性检查。

WMI 可以更改此设置。如果要将延迟增加到 20 秒,请使用管理员权限运行以下命令:

1
Set-CimInstance -Query "Select * From Win32_AutochkSetting" -Property @{UserInputDelay=20}

请注意,此命令为所有受支持的磁盘驱动器设置 UserInputDelay。要仅对选定的驱动器进行设置,请优化提交的查询,然后添加一个过滤器,例如:

1
Set-CimInstance -Query 'Select * From Win32_AutochkSetting Where SettingID LIKE "%\\Device\\Harddisk0\\Partition3"' -Property @{UserInputDelay=30}

有关WMI查询的更多信息,请访问 http://powershell.one/wmi/wql

PowerShell 技能连载 - 获取可用的显示分辨率

WMI 可以返回显示适配器可用的显示分辨率列表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
PS> Get-CimInstance -ClassName CIM_VideoControllerResolution |
Select-Object -Property SettingID

SettingID
---------
640 x 480 x 4294967296 colors @ 60 Hertz
640 x 480 x 4294967296 colors @ 67 Hertz
640 x 480 x 4294967296 colors @ 72 Hertz
640 x 480 x 4294967296 colors @ 75 Hertz
720 x 400 x 4294967296 colors @ 70 Hertz
720 x 480 x 4294967296 colors @ 60 Hertz
720 x 576 x 4294967296 colors @ 50 Hertz (Interlaced)
800 x 600 x 4294967296 colors @ 60 Hertz
800 x 600 x 4294967296 colors @ 72 Hertz
800 x 600 x 4294967296 colors @ 75 Hertz
832 x 624 x 4294967296 colors @ 75 Hertz
1024 x 768 x 4294967296 colors @ 60 Hertz
1024 x 768 x 4294967296 colors @ 70 Hertz
1024 x 768 x 4294967296 colors @ 75 Hertz
1152 x 864 x 4294967296 colors @ 75 Hertz
1152 x 870 x 4294967296 colors @ 75 Hertz
1280 x 720 x 4294967296 colors @ 50 Hertz (Interlaced)
1280 x 720 x 4294967296 colors @ 60 Hertz
1280 x 800 x 4294967296 colors @ 60 Hertz
1280 x 1024 x 4294967296 colors @ 60 Hertz
1280 x 1024 x 4294967296 colors @ 75 Hertz
1440 x 900 x 4294967296 colors @ 60 Hertz
1600 x 900 x 4294967296 colors @ 60 Hertz
1680 x 1050 x 4294967296 colors @ 60 Hertz
1920 x 1080 x 4294967296 colors @ 24 Hertz (Interlaced)
1920 x 1080 x 4294967296 colors @ 25 Hertz (Interlaced)
1920 x 1080 x 4294967296 colors @ 30 Hertz (Interlaced)
1920 x 1080 x 4294967296 colors @ 50 Hertz (Interlaced)
1920 x 1080 x 4294967296 colors @ 60 Hertz
1920 x 1440 x 4294967296 colors @ 60 Hertz
2048 x 1152 x 4294967296 colors @ 60 Hertz
3840 x 2160 x 4294967296 colors @ 24 Hertz (Interlaced)
3840 x 2160 x 4294967296 colors @ 25 Hertz (Interlaced)
3840 x 2160 x 4294967296 colors @ 30 Hertz (Interlaced)
4096 x 2160 x 4294967296 colors @ 24 Hertz (Interlaced)
4096 x 2160 x 4294967296 colors @ 25 Hertz (Interlaced)
4096 x 2160 x 4294967296 colors @ 30 Hertz (Interlaced)

WMI 是否可以返回视频模式取决于您的视频适配器和驱动程序。如果没有可用的视频模式,则不返回任何内容。

要检查您的视频适配器,请使用 Win32_VideoController WMI类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
PS> Get-CimInstance -ClassName CIM_VideoController -Property *


Caption : Intel(R) Iris(R) Plus Graphics
Description : Intel(R) Iris(R) Plus Graphics
InstallDate :
Name : Intel(R) Iris(R) Plus Graphics
Status : OK
Availability : 3
ConfigManagerErrorCode : 0
ConfigManagerUserConfig : False
CreationClassName : Win32_VideoController
DeviceID : VideoController3
ErrorCleared :
ErrorDescription :
LastErrorCode :
PNPDeviceID : PCI\VEN_8086&DEV_8A52&SUBSYS_08B01028&REV_07\3&11583659&0&10
PowerManagementCapabilities :
PowerManagementSupported :
StatusInfo :
SystemCreationClassName : Win32_ComputerSystem
SystemName : DESKTOP-8DVNI43
MaxNumberControlled :
ProtocolSupported :
TimeOfLastReset :
AcceleratorCapabilities :
CapabilityDescriptions :
CurrentBitsPerPixel : 32
CurrentHorizontalResolution : 3840
CurrentNumberOfColors : 4294967296
CurrentNumberOfColumns : 0
CurrentNumberOfRows : 0
CurrentRefreshRate : 59
CurrentScanMode : 4
CurrentVerticalResolution : 2400
MaxMemorySupported :
MaxRefreshRate : 0
MinRefreshRate :
NumberOfVideoPages :
VideoMemoryType : 2
VideoProcessor : Intel(R) Iris(R) Graphics Family
NumberOfColorPlanes :
VideoArchitecture : 5
VideoMode :
AdapterCompatibility : Intel Corporation
AdapterDACType : Internal
AdapterRAM : 1073741824
ColorTableEntries :
DeviceSpecificPens :
DitherType : 0
DriverDate : 06.11.2019 01:00:00
DriverVersion : 26.20.100.7463
ICMIntent :
ICMMethod :
InfFilename : oem105.inf
InfSection : iICLD_w10_DS_N
InstalledDisplayDrivers : C:\Windows\System32\DriverStore\FileRepository\iigd_dch.inf_amd64_fdbe15db86939fb5\igdumdim64.dll,C:\Windows\System32\DriverStore\FileRepository\iigd_dch.inf
_amd64_fdbe15db86939fb5\igd10iumd64.dll,C:\Windows\System32\DriverStore\FileRepository\iigd_dch.inf_amd64_fdbe15db86939fb5\igd10iumd64.dll,C:\Windows\System3
2\DriverStore\FileRepository\iigd_dch.inf_amd64_fdbe15db86939fb5\igd12umd64.dll
Monochrome : False
ReservedSystemPaletteEntries :
SpecificationVersion :
SystemPaletteEntries :
VideoModeDescription : 3840 x 2400 x 4294967296 colors
PSComputerName :
CimClass : root/cimv2:Win32_VideoController
CimInstanceProperties : {Caption, Description, InstallDate, Name...}
CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProperties

有关这两个类的文档,请访问 http://powershell.one/wmi/root/cimv2/cim_videocontrollerresolutionhttp://powershell.one/wmi/root/cimv2/win32_videocontroller

PowerShell 技能连载 - 谨慎使用某些命令

以下是在 PowerShell 脚本中经常发现的三个命令,您应该注意这些命令,因为它们可能会产生严重的副作用:

exit

exit“ 实际上不是命令,而是语言的一部分。它会立即退出PowerShell,您可以选择提交一个数字,该数字将成为调用者可以获取到的 “error level”。

仅当您确实要退出 PowerShell 时才使用 “exit“。不要在旨在由其他人调用的函数或脚本中使用它。您可以试试:在函数下方运行时,它输出“ A”,然后退出。但是,您的 PowerShell 环境也将关闭。

1
2
3
4
5
6
function test
{
"A"
exit
"B"
}

如果只想“退出”部分代码而不退出整个 PowerShell 环境,请改用 “return“:

1
2
3
4
5
6
function test
{
"A"
return
"B"
}

Set-StrictMode -Version Latest

此命令使 PowerShell 的行为更加严格,即当您读取变量或调用实际上不存在的方法时抛出异常。在默认模式下,PowerShell 将仅返回 $null

对于专业的 PowerShell 用户,在编写脚本代码时启用严格模式是个好主意,因为 PowerShell 会强制您编写更简洁的代码。但是,切勿将此命令添加到生产代码中!

一方面,这没有任何意义:您的生产代码已完成,因此启用严格检查不会改变任何事情。更糟糕的是:您在生产机器上强加了自己的首选项,这可能会导致意外的(和不必要的)异常。假设您的代码调用了其他代码或使用了其他模块中的命令,并且它们的作者使用了 PowerShell 的懒惰模式。现在,当您的代码启用严格模式时,将相同的严格规则应用于从您的代码中调用的所有代码。

即使在测试过程中效果很好,您也不知道其他作者何时更新他们的代码,而导致出现问题。

如果在代码中找到 “Set-StrictMode“ 调用,只需删除它们即可。如果您喜欢严格模式,请改为在您的个人 PowerShell 配置文件中启用它,或者在需要时手动将其启用。

Invoke-Expression

该命令采用任何字符串,并像执行 PowerShell 命令一样执行它。尽管这是非常强大的功能,有时甚至是绝对必要的,但它带来了类似所谓“SQL注入”安全问题的所有风险。请看以下代码:

1
2
3
4
5
6
7
8
# get user input
$Path = Read-Host -Prompt 'Enter path to find .log files'

# compose command
$code = "Get-ChildItem -Path $Path -Recurse -Filter *.log -ErrorAction SilentlyContinue"

# invoke command
Invoke-Expression -Command $code

运行此代码时,系统会要求您提供路径,并在输入例如 “C:\Windows“ 时看到日志文件列表。但是,执行的代码直接取决于用户输入的内容。当您再次运行代码时,请尝试以下操作:$(Get-Service | Out-GridView; c:\Windows)

这次,PowerShell 首先列出所有服务,并将它们输出到网格视图窗口。您使用 “$()“ “注入”了代码。

尽可能避免使用 Invoke-Expression,当然,上面的示例是有意构造的。您可以将用户输入直接提交给适当的命令参数,而不是编写字符串命令:

1
2
3
4
5
# get user input
$Path = Read-Host -Prompt 'Enter path to find .log files'

# invoke command
Get-ChildItem -Path $Path -Recurse -Filter *.log -ErrorAction SilentlyContinue

如果必须使用 Invoke-Expression,请格外小心,验证任何用户输入,并确保用户无法注入代码。

PowerShell 技能连载 - 处理 Out-GridView 的 Bug

当添加 -PassThru 参数时,Out-GridView 可以用作通用的选择对话框。下面的单行停止了您在网格视图窗口中选择的所有服务(嗯,不是真的停止。在删除 -WhatIf 参数之前,都可以安全地运行):

1
Get-Service | Out-GridView -Title 'Select Service' -PassThru | Stop-Service -WhatIf

但是,Out-GridView 中存在一个长期存在的错误:将信息填充到网格视图窗口中时,启用了用于选择项目的按钮,但不返回任何内容。这是一个测试用例:我用 Windows 文件夹中大于 10MB 的所有文件填充网格视图窗口:

1
2
3
Get-ChildItem -Path C:\Windows -Recurse -File -ErrorAction SilentlyContinue |
Where-Object Length -gt 10MB |
Out-GridView -Title 'Select a file' -PassThru

枚举文件可能要花费一些时间,由于优雅的实时特性,过一会儿会在网格视图窗口看到列出的文件,并且可以选择一些文件,然后单击右下角的“确定”按钮将其返回到控制台。

注意:如果在所有文件都发送到网格视图窗口之前单击“确定”按钮,则网格视图窗口将关闭但不返回任何内容。为了使确定按钮正常工作,您必须知道网格视图窗口的输出何时完成。

除此以外,您无法知道什么时候结束。您可以稍等片刻,以期获得最好的结果,但是没有任何提示告诉您网格视图窗口已完全填充完毕。

一种解决方法是先将数据存储在变量中,然后将其快速发送到网格视图窗口:

1
2
3
4
$files = Get-ChildItem -Path C:\Windows -Recurse -File -ErrorAction SilentlyContinue |
Where-Object Length -gt 10MB

$files | Out-GridView -Title 'Select a file' -PassThru

但是,这么做失去了实时性,并且可能需要等待几秒钟才能收集数据并打开网格视图窗口。

一种更聪明的方法是利用 PowerShell 的管道体系结构并使用管道感知功能。完成所有管道处理后,将调用其 “end“ 代码块,因此您可以在此处放置代码以提示所有数据已完成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function Send-PipelineEndNotification
{
begin {
Write-Host "Collecting Data..." -NoNewline -ForegroundColor DarkYellow
}
process { $_ }
end {
Write-Host "Completed." -ForegroundColor Green
[Console]::Beep()
}
}


Get-ChildItem -Path C:\Windows -Recurse -File -ErrorAction SilentlyContinue |
Where-Object Length -gt 10MB |
Send-PipelineEndNotification |
Out-GridView -Title 'Select a file' -PassThru

只需在 Out-GridView 之前调用 Send-PipelineEndNotification。现在,在控制台中,您会看到一条警告,告知您仍在收集信息,并在网格视图窗口完成并准备返回所选项目时显示绿色的通知文本和提示音。

PowerShell 技能连载 - 使用 PowerShell 探索 WMI

Win32_LogicalDevice WMI 类代表计算机中可用的所有逻辑设备,通过查询此“超类”,您可以获取所有专用的单个类。这是找出 WMI 可以为您提供哪些信息以及 WMI 类的名称的简单方法:

1
2
3
Get-CimInstance -ClassName CIM_LogicalDevice |
Select-Object -Property Name, CreationClassName, DeviceID, SystemName |
Out-GridView -Title 'Select one or more (hold CTRL)' -PassThru

在网格视图窗口中,选择一个或多个您感兴趣的实例(按住CTRL键选择多个实例),然后将选定的实例转储到控制台。请等待网格视图窗口填充完毕,然后再尝试选择某些内容。

在我的笔记本上,我选择了一个“音频设备”:

Name                   CreationClassName DeviceID
----                   ----------------- --------
Intel(R) Display-Audio Win32_SoundDevice INTELAUDIO\FUNC_01&VEN_8086&DEV_280...

要查找有关它的更多信息,请使用 “CreationClassName“ 中的 WMI 类(即 Win32_SoundDevice)查询特定信息,运行以下命令:

1
2
3
4
5
6
7
PS> Get-CimInstance -ClassName Win32_SoundDevice

Manufacturer Name Status StatusInfo
------------ ---- ------ ----------
Intel(R) Corporation Intel(R) Display-Audio OK 3
DisplayLink DisplayLink USB Audio Adapter OK 3
Realtek Realtek Audio OK 3

显然,我的机器中有三个声音设备。要查看所有详细信息,请将数据发送到 Select-Object

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
PS> Get-CimInstance -ClassName Win32_SoundDevice | Select-Object *


ConfigManagerUserConfig : False
Name : Intel(R) Display-Audio
Status : OK
StatusInfo : 3
Caption : Intel(R) Display-Audio
Description : Intel(R) Display-Audio
InstallDate :
Availability :
ConfigManagerErrorCode : 0
CreationClassName : Win32_SoundDevice
DeviceID : INTELAUDIO\FUNC_01&VEN_8086&DEV_280F&SUBSYS_80860
101&REV_1000\5&6790FB4&0&0201
ErrorCleared :
ErrorDescription :
LastErrorCode :
PNPDeviceID : INTELAUDIO\FUNC_01&VEN_8086&DEV_280F&SUBSYS_80860
101&REV_1000\5&6790FB4&0&0201
PowerManagementCapabilities :
PowerManagementSupported : False
SystemCreationClassName : Win32_ComputerSystem
SystemName : DESKTOP-8DVNI43
DMABufferSize :
Manufacturer : Intel(R) Corporation
MPU401Address :
ProductName : Intel(R) Display-Audio
PSComputerName :
CimClass : root/cimv2:Win32_SoundDevice
CimInstanceProperties : {Caption, Description, InstallDate, Name...}
CimSystemProperties : Microsoft.Management.Infrastructure.CimSystemProp
erties

ConfigManagerUserConfig : False
Name : DisplayLink USB Audio Adapter
Status : OK
StatusInfo : 3
Caption : DisplayLink USB Audio Adapter
...

并且,如果您想进一步了解此类(或其它类),请访问PowerShell WMI参考:http://powershell.one/wmi/root/cimv2/win32_sounddevice。只需将WMI类名替换为您要使用的类名即可。