在 PowerShell 中,如何确定当前驱动器是否为网络驱动器

本文关键字:驱动器 是否 网络 何确定 PowerShell | 更新日期: 2023-09-27 17:47:22

我需要从Powershell中知道当前驱动器是否是映射驱动器。

不幸的是,Get-PSDrive 没有"按预期"工作:

PS:24 H:'temp
>get-psdrive  h
Name       Provider      Root      CurrentLocation
----       --------      ----      ---------------
H          FileSystem    H:'          temp

但在MS-Dos中,"网络使用"表明H:实际上是一个映射的网络驱动器:

New connections will be remembered.
Status       Local     Remote                    Network
-------------------------------------------------------------------------------
OK           H:        ''spma1fp1'JARAVJ$        Microsoft Windows Network
The command completed successfully.

我想做的是获取驱动器的根目录并在提示中显示它(请参阅: 自定义PowerShell提示符 - 相当于CMD的$M$P$_$+$G?

在 PowerShell 中,如何确定当前驱动器是否为网络驱动器

使用 .NET 框架:

PS H:'> $x = new-object system.io.driveinfo("h:'")
PS H:'> $x.drivetype
Network

接受答案的稍微紧凑的变体:

[System.IO.DriveInfo]("C")

尝试 WMI:

Get-WMI -query "Select ProviderName From Win32_LogicalDisk Where DeviceID='H:'"

使用 WMI 的另一种方法:

get-wmiobject Win32_LogicalDisk | ? {$_.deviceid -eq "s:"} | % {$_.providername}

通过以下方式获取所有网络驱动器:

get-wmiobject Win32_LogicalDisk | ? {$_.drivetype -eq 4} | % {$_.providername}

更进一步,如下所示:

([System.IO.DriveInfo]("C")).Drivetype

请注意,这仅适用于本地系统。 对远程计算机使用 WMI。

最可靠的方法是使用 WMI

get-wmiobject win32_volume | ? { $_.DriveType -eq 4 } | % { get-psdrive $_.DriveLetter[0] } 

驱动器类型是一个枚举,具有以下值

0 - 未知1 - 无根目录2 - 可移动磁盘3 - 本地磁盘4 - 网络驱动器5 - 光盘6 - 内存磁盘

这是我关于这个主题的博客文章的链接