Подтвердить что ты не робот

Не удается получить доступ к сетевому диску в PowerShell, запущенном как администратор

Я запускаю 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

Как получить доступ к сетевым дискам в качестве администратора?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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
        }
    }
}  

Ответ 5

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

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

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

~ Dan

Ответ 6

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

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

Ответ 7

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

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

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