【问题标题】:Get-ChildItem Cannot Find Path Because It Does Not ExistGet-ChildItem 找不到路径,因为它不存在
【发布时间】:2017-02-28 15:30:42
【问题描述】:

我正在编写一个脚本来获取我网络中所有共享的 ACL。我在三个单独的 UNC 路径上运行它。这三个中的两个运行良好,返回所有子项和权限等。但是,第三个 UNC 路径返回以下错误:

Get-ChildItem : Cannot find path '\\storagesrvr' because it does not exist.

我已使用资源管理器验证该位置是否可用。我发现有趣的是,如果我在该路径的任何子共享上使用 GCI,它就可以工作。什么可能阻止 GCI 检测共享的根?

编辑(根据 cmets 的要求):我没有遇到问题的其他两个共享命名为 \\networkpath\share。但因为我只查看根目录,所以 GCI 无法正常工作。

【问题讨论】:

  • 远程设备命名空间的根不是目录 - 根据the spec\\computer 甚至不是完全有效的 UNC 路径。从远程机器上的Win32_Share wmi 类中检索共享名称,并逐个运行Get-ChildItem
  • 我认为这也是相关的(PowerShell Gotcha 'UNC 路径和提供者'):powershell.org/2014/02/20/…
  • 查看PowerShell Get List Of Folders Shared 以获取有关如何获取网络共享列表的答案

标签: powershell


【解决方案1】:

正如我在 cmets 中提到的,\\computername 只是部分 UNC 路径(检查 [MS-DTYP] Windows Data Type specification 中的 UNC 语法)。

Explorer“知道”这一点,因此它会在后台执行一些黑魔法,让您可以浏览远程计算机上的共享。

您可以通过查询远程计算机上的Win32_Share WMI 实例来模拟这一点:

foreach($Share in Get-WmiObject Win32_Share |?{$_.Name -not 'IPC$'}){
    Get-ChildItem "\\$($Share.__SERVER)\$($Share.Name)"
}

【讨论】:

    【解决方案2】:

    您可以通过调用列出共享:

    net view \\<computername>
    

    来源: PowerShell Get List Of Folders Shared

    【讨论】:

    • 这不是一个 powershell 答案,这个get-WmiObject -class Win32_Share -computer dc1.krypted.com 可能是你的意思?
    • 是的,但是它可以与 powershell 一起使用,并且与 get-wmiobject 不同,它不需要启用额外的权限或协议。
    • 很公平,先生,你有我的赞成票。可能希望将其添加到您所做的原始答案中,因为它确实提出了一个有效的观点。网络视图在大多数情况下可以在计算机上具有共享的 Windows 域上工作,因为它们需要启用打印机和共享,这是网络视图枚举它们所依赖的。
    【解决方案3】:

    错误信息在字面上是正确的。 \\storageserver 不是路径。它是两个反斜杠,后跟一个计算机名称。

    给它附加一个共享名,它就变成了一个路径;例如\\storageserver\sharename.

    【讨论】:

    • 好的,但不应该在末尾添加反斜杠和通配符来查找所有共享吗?
    • 没有。 (不幸的是,一厢情愿的想法并没有导致功能的出现。)
    猜你喜欢
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 2020-10-19
    • 2017-06-01
    • 1970-01-01
    • 2015-01-19
    • 2017-01-21
    • 2013-11-15
    相关资源
    最近更新 更多