【问题标题】:Net view - get Just ' Share Name'网络视图 - 仅获取“共享名称”
【发布时间】:2016-08-01 21:44:32
【问题描述】:

我需要获取某个存储中的所有共享名称。 我使用Net view $StorageName,它以表格格式显示结果:

Share name             Type  Used as  Comment

----------------------------------------------------------------------------
Backups                Disk
CallRecordings         Disk
Download               Disk           System default share
home                   Disk           Home
homes                  Disk           System default share
Installs               Disk
Justin                 Disk           Copy of files from Justin laptop
michael                Disk
Multimedia             Disk           System default share
Network Recycle Bin 1  Disk           [RAID5 Disk Volume: Drive 1 2 3 4]
Public                 Disk           System default share
Qsync                  Disk           Qsync
Recordings             Disk           System default share
Sales                  Disk           Sales Documents
SalesMechanix          Disk
Server2012             Disk           Windows Server 2012 Install Media
Usb                    Disk           System default share
VMWareTemplates        Disk
Web                    Disk           System default share
The command completed successfully.

很好,但我只需要共享名称。 我需要帮助。 谢谢!

【问题讨论】:

  • 您是否考虑过改用Get-PSDrive?它将返回具有每一列属性的对象列表。

标签: powershell


【解决方案1】:

这是您可以使用网络视图输出的一种方法:

(net view $StorageName | Where-Object { $_ -match '\sDisk\s' }) -replace '\s\s+', ',' | ForEach-Object{ ($_ -split ',')[0] }

基本上就是说找到 Disk 被空格包围的行,以防万一其他名称中可能包含 Disk 。然后用逗号替换多个空格。然后,对于这些行中的每一行,再次用逗号分隔并取第一个值,即共享名称。

如果您使用的是 Windows 8/2012 或更新的系统(并尝试枚举其他 Windows 系统上的共享),您可以使用 CIM 会话以及 Get-SmbShare 而不是 net view,后者会将结果作为对象和允许您以原生 PowerShell 方式选择所需的字段。

例如:

$cimSession = New-CimSession $StorageName
Get-SmbShare -CimSession $cimSession | Select Name

Name
----
Admin
ADMIN$
C$
IPC$
J$
print$
Public
Software

【讨论】:

  • 我会将net view 命令简化为:(net view $StorageName) -match '\sDisk\s' -replace '\s+Disk.*'
  • @AnsgarWiechers。感谢您指出了这一点。我经常忘记你可以直接从输出中匹配。我倾向于使用冗长的 Where-Object 方法。当然,既然他只想要股份名,那么所有拆分都没有多大价值;只需删除不需要的。
【解决方案2】:

另一种解析网络视图输出的选项,它依赖于定位而不是正则表达式匹配。我个人觉得它更容易阅读并且同样可靠。

function get-shares {

  param($server)

  $rawShares = net view \\$server
  $shares = $rawShares[7..($s.Count - 3)]

  $shares | . {process{$_.substring(0,($_.indexof(" ")))}}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多