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

7

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

不幸的是,Get-PSDrive并没有像预期的那样工作:

PS:24 H:\temp
>get-psdrive  h

Name       Provider      Root      CurrentLocation
----       --------      ----      ---------------
H          FileSystem    H:\          temp

但在 MS-Dos 中,“net use” 显示 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?

6个回答

10

使用.NET框架:

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

好提示!那么,如何获取Rootdirectory=?不幸的是,RootDirectory又指向了H:... - JJarava
@jjarava -- 我晚了才意识到,虽然 DriveInfo 类可以告诉你驱动器类型,但它不会返回网络路径。也许其他答案中的一个可以提供这个信息。 - Jeff Stong

2

这是一个比接受答案更为紧凑的变体:

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

1

尝试使用WMI:

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

1

使用 WMI 的另一种方法:

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

获取所有网络驱动器:

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


1

最可靠的方法是使用WMI

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

DriveType是一个枚举类型,包含以下值:

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

这里有一篇关于该主题的博客文章链接


这种方法看起来更加简洁,但唯一需要注意的是我正在运行WINXP,所以win32_volume类不可用!无论如何,感谢您的提示。 - JJarava

1

请按照以下方式进一步操作:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接