【问题标题】:Connecting to a network folder with username/password in Powershell在 Powershell 中使用用户名/密码连接到网络文件夹
【发布时间】:2008-11-19 19:27:26
【问题描述】:

我经常访问 Powershell 中的共享网络文件夹以获取文件等。但如果共享需要用户名/密码,Powershell 不会提示我输入这些,这与 Windows 资源管理器不同。如果我首先在 Windows 资源管理器中连接到该文件夹​​,Powershell 将允许我连接。

如何在 Powershell 中验证自己的身份?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    乍一看真的很想使用New-PSDrive 为其提供凭据。

    > New-PSDrive -Name P -PSProvider FileSystem -Root \\server\share -Credential domain\user
    

    失败!

    New-PSDrive:无法检索 cmdlet 的动态参数。无法为“文件系统”提供程序检索 NewDrive 的动态参数。提供程序不支持使用凭据。请在不指定凭据的情况下再次执行该操作。

    文档声明您可以提供PSCredential 对象,但如果您仔细观察,cmdlet 还不支持此功能。也许在下一个版本中我猜。

    因此,您可以使用net useWScript.Network 对象,调用MapNetworkDrive 函数:

    $net = new-object -ComObject WScript.Network
    $net.MapNetworkDrive("u:", "\\server\share", $false, "domain\user", "password")
    

    编辑New-PSDrive in PowerShell 3.0

    显然,对于较新版本的 PowerShell,New-PSDrive cmdlet 可以使用凭据映射网络共享!

    New-PSDrive -Name P -PSProvider FileSystem -Root \\Server01\Public -Credential user\domain -Persist
    

    【讨论】:

    • 有一个未解决的错误:connect.microsoft.com/feedback/…
    • 实际上,我认为 cmdlet 很好地支持它 - 它是底层 PSDrive 提供程序,它没有做任何事情。所有 *-Item cmdlet 都有一组通用的行为;不过,他们只是将它们传递给 PSDrive 提供商。 -filter 是另一个例子。
    • 请注意as of Powershell 3.0,您可以在将驱动器连接到 UNC 路径时传递凭据,如果您使用 -Persist 选项,驱动器将被创建为普通的 Windows 映射驱动器。跨度>
    • @BaconBits。谢谢你让我知道这件事!我已更新问题以反映 PowerShell 的 3.0 版本。
    • 在 powershell 5.1(和 6)中,从非域计算机连接到域计算机时,即使提供工作凭据,这似乎仍然不起作用。与 OP 一样,一旦您使用 Windows 资源管理器在 Root 参数中打开该位置并提供凭据,之后您就可以使用 New-PSDrive。
    【解决方案2】:

    这不是特定于 PowerShell 的答案,但您可以先使用“NET USE”对共享进行身份验证:

    net use \\server\share /user:<domain\username> <password>
    

    然后在 PowerShell 中执行您需要执行的任何操作...

    【讨论】:

    • 这是我同意 Anon 的“使用有效”案例之一。通常,我会竭尽全力提供 PowerShell 答案,但这次不会。 :)
    • 这是从其他语言访问 Windows 共享的好方法。
    • 我还没有在 powershell 中找到其他方法来做到这一点:net use \\server\ipc$ /user: password -> cd \\server\share跨度>
    • 您可以将此方法与```结合使用 $networkCreds = $creds.GetNetworkCredential() $username = "$($networkCreds.Domain)\$($networkCreds.UserName)" $password = $networkCreds.Password ```
    【解决方案3】:

    PowerShell 3 supports this out of the box 现在。

    如果您卡在 PowerShell 2 上,则基本上必须使用旧的 net use 命令(如前所述)。

    【讨论】:

    • 死链接! 1 2 3
    猜你喜欢
    • 2011-06-07
    • 1970-01-01
    • 2011-04-11
    • 2011-03-24
    • 2014-12-31
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多