无法访问以管理员身份运行的PowerShell中的网络驱动器

时间:2011-01-20 02:44:35

标签: powershell uac unc

我在Windows 7 x64虚拟机中运行PowerShell。我在主机上有一个共享文件夹映射为网络驱动器(Z :)。当我正常运行PS时,我可以正常访问该驱动器,但如果我以“管理员”的身份运行它,它会告诉我:

Set-Location : Cannot find drive. A drive with the name 'Z' does not exist.
At line:1 char:13
+ Set-Location <<<<  Z:
    + CategoryInfo          : ObjectNotFound: (Z:String) [Set-Location], DriveNotFoundException
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.SetLocationCommand

如何以管理员身份访问网络驱动器?

7 个答案:

答案 0 :(得分:74)

最后修复只是在以管理员身份运行时重新映射驱动器号

net use Z: "\\vmware-host\Shared Folders"

不必从同一个PowerShell实例(或者根本不是PowerShell)完成 - 这只是整个登录会话需要完成的事情。

答案 1 :(得分:8)

在我的情况下,我能够简单地使用UNC路径而不是驱动器映射,它工作正常。

因此,根据您的示例,我只使用“\\ vmware-host \ Shared Folder”作为路径而不是使用映射驱动器Z:\。

答案 2 :(得分:5)

让我年龄找到的另一个解决方法是从计划任务运行net use作为NT AUTHORITY \ SYSTEM 帐户。显然是drives mapped under this account show up for all users and all elevation levels

我已经对此进行了测试,它甚至可以在NFS共享上运行(这可能有点挑剔)。只需创建一个在系统启动时运行的计划任务集,并指定常用命令:

net use Z: \\server\share /persistent:no

使用/persistent:yes运行一次可能会有效,但我没有尝试过。当然,“只是再次映射”也可以,但是在不同的上下文中运行的计划任务仍然无法看到该驱动器。缺点是所有真实用户都会看到它,因此多用户设置不太好。

答案 3 :(得分:3)

我使用以下hacky解决方案重新创建&#34;缺少&#34;当Powershell以提升模式运行时,在profile.ps1中进行PSD驱动。

Gist

# Reconnect PSDrives for network connections when running with elevated privileges
$elevated = (([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
if( $elevated ) {
    net use | ?{ $_ -match ":\s+\\\\"  -and !$_.StartsWith("Unavailable") } | %{
        $tokens = $_.split(":")
        $psdrivename = $tokens[0][$tokens[0].length-1]
        $path = $tokens[1].trim().split(" ")[0].trim()

        if( !(get-psdrive | ?{ $_.Name -eq $psdrivename } )) {
            write-host ( "Restoring PSDrive for {0}: {1}" -f $psdrivename, $path )
            new-psdrive $psdrivename FileSystem $path | out-null
        }
    }
}  

答案 4 :(得分:0)

如何将新的 psdrive 映射到访问该数据?当您在PowerShell中编写脚本或访问网络数据存储时,PSDrives的工作效果也不如系统映射驱动器。

有关使用 New-PSDrive cmdlet的说明,请访问:Technet:New-PSDrive

如果您不想每次都将新的psdrive添加到管理员和用户帐户的配置文件中,那么每次打开PowerShell时它都会自动生成。

〜丹

答案 5 :(得分:0)

从Vista开始,这似乎是微软的一个已知问题 Microsoft Knowled base article具有不安全注册表修复程序。

我们目前正在评估这种方法,因为我们的一些人感觉机器可能在此之后无法启动; - )

答案 6 :(得分:0)

没有其他答案对我有用;但是@TimothyLeeRussell的answer为我指明了正确的方向。

就我而言,我在网络驱动器上有一个.bat文件。当我以管理员身份运行它时,它只会闪烁一个命令提示符窗口,并立即消失;当我从提升的命令提示符下运行文件内容时,它工作正常。

最后,我意识到我尝试从映射的网络驱动器运行.bat文件。我将文件的执行更改为使用UNC路径,并且可以正常工作。