Не удается получить доступ к сетевому диску в PowerShell с правами администратора - PullRequest
55 голосов
/ 20 января 2011

Я использую PowerShell на виртуальной машине с Windows 7 x64.У меня есть общая папка на хосте, сопоставленная как сетевой диск (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 ]

77 голосов
/ 24 января 2011

В конце концов, исправлением было просто переназначить букву диска при работе от имени администратора :

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

Это не нужно делать из одного экземпляра PowerShell(или вообще из PowerShell) - это то, что нужно сделать один раз за весь сеанс входа в систему.

9 голосов
/ 24 октября 2012

В моем случае я смог просто использовать путь UNC вместо сопоставления дисков, и он работал нормально.

Итак, в вашем примере, вместо использования сопоставленного диска Z: \, я простоиспользовал "\\ vmware-host \ Shared Folder" в качестве пути.

5 голосов
/ 27 октября 2014

Еще один обходной путь, который мне понадобился возраст , - это запуск net use из запланированного задания в качестве учетной записи NT AUTHORITY \ SYSTEM . Очевидно, диски, подключенные под этой учетной записью, отображаются для всех пользователей и всех уровней повышения .

Я проверил это, и оно работает даже на NFS-ресурсах (что может быть немного привередливым). Просто создайте набор запланированных задач для запуска при запуске системы и укажите обычную команду:

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

Возможно, это может сработать, чтобы запустить его всего один раз с /persistent:yes, но я этого не пробовал. Конечно, «просто сопоставьте это снова» тоже работает, но этот диск все равно не будет виден запланированным задачам, выполняющимся в разных контекстах. Недостатком является то, что все реальные пользователи видят это тоже, так что не так хорошо для многопользовательских установок.

3 голосов
/ 31 марта 2015

Я использую следующее хакерское решение, в котором воссоздаю «отсутствующие» PSDrives в profile.ps1, когда Powershell работает в повышенном режиме.

* Gist 1004 *

# 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
        }
    }
}  
0 голосов
/ 31 января 2019

Ни один из других ответов не работал для меня;но @ 1001 * ответ @ TimothyLeeRussell указал мне правильное направление.

В моем случае файл .bat находился на сетевом диске.Когда я запускал его как администратор, он просто высвечивал окно командной строки и мгновенно исчезал;он работал нормально, когда я запускал содержимое файла из командной строки с повышенными правами.

Наконец я понял, что попытался запустить файл .bat с подключенного сетевого диска.Я изменил исполнение файла, чтобы использовать путь UNC, и он работал.

0 голосов
/ 29 мая 2013

Похоже, известная проблема для Microsoft со времен Vista.
Microsoft Известная базовая статья с небезопасным исправлением реестра.

В настоящее время мы оцениваем этот подход, поскольку некоторые из наших парней считают, что после этого машина может не запуститься; -)

0 голосов
/ 21 января 2011

Как насчет отображения нового psdrive для доступа к этим данным?PSDrive работают так же хорошо, если не лучше, чем системные подключенные диски, когда вы пишете сценарии или получаете доступ к сетевым хранилищам данных в powershell.

Инструкции по использованию командлета New-PSDrive приведены здесь: Technet: New-PSDrive

Если вы не хотите выполнятьновый psdrive каждый раз, когда вы можете добавить его в профили администратора и вашей учетной записи, и он будет автоматически доступен при каждом открытии powershell.

~ Dan

...