Есть ли способ подключить локальный диск в powershell, когда для сценария установлено значение «Запуск от имени администратора»?

Это часть моего сценария powershell, где мне нужно сопоставить локальную папку с диском S:. Я не могу сопоставить New-PSDrive, когда мой скрипт «Запуск от имени администратора». Если я это сделаю, он не будет виден в «Моем компьютере». Я запустил Get-PSDrive, и он показывает, что он виден только не на «МОЕМ ПК».

Я пробовал Net-Use в PS. Я пробовал New-SMBmapping

New-SMBmapping -localpath 'S:' -remotepath '\\$comName\pos' -persistent $true

Мой скрипт должен запускаться от имени администратора для остальной части моего скрипта. В настоящее время это мой сценарий.

#Get Computer name
$comName = $computerNameCSV.ComputerName

#This will map folder to S drive
New-SmbShare -Name "SOP" -Path "C:\FolderShare" -FullAccess Everyone
New-PSDrive -Name "S" -Root "\\$comName\c$\FolderShare" -Persist -PSProvider "FileSystem"

person havoc319    schedule 31.10.2019    source источник
comment
Я считаю, что за кулисами Windows по-разному обрабатывает диски Admin и Non-Admin. Когда вы сопоставляете диск как Admin, вы увидите его только в Admin Mode. Проверьте, открыв PowerShell от имени администратора и посмотрев, существует ли диск. Есть способы обойти это, но может быть полезно узнать больше о вашем сценарии.   -  person Clayton Lewis    schedule 31.10.2019
comment
Один из способов, который может сработать, — это задать задачу для сопоставления диска и установить RunLevel соответствующим образом для New-ScheduledTaskPrincipal.   -  person Clayton Lewis    schedule 31.10.2019
comment
Да, я сделал такой вывод. Я должен был включить диски, которые становятся видимыми на «МОЕМ ПК», когда я запускаю команду без режима администратора. Однако остальную часть моего сценария необходимо запускать в режиме администратора. Изменить: например, мне нужен режим администратора для выполнения New-SmbShare.   -  person havoc319    schedule 31.10.2019
comment
Будет ли создавать задачу в планировщике заданий для запуска от имени администратора, а затем сообщать ей о выполнении, что это не сработает для вас?   -  person Clayton Lewis    schedule 31.10.2019
comment
Вы также можете запустить PowerShell для начала в Non Admin, а затем вызвать 2-й скрипт с этим в начале If (-Not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { $Arguments = "& '" + $MyInvocation.MyCommand.Definition + "'" Start-Process Powershell -Verb RunAs -ArgumentList $Arguments Break } Это может стать странным в зависимости от ваших настроек UAC и LUA и т. д. Он перезапустит скрипт как Admin, если он не запущен. как Admin   -  person Clayton Lewis    schedule 31.10.2019


Ответы (2)


Короткий ответ:

Вы не можете.

Длинный ответ:

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

Когда вы запускаете PowerShell с помощью функции «Запуск от имени администратора», вы создаете новый контекст пользователя. Выполнение команд для сопоставления общего ресурса создает сопоставления внутри этого контекста, который отличается от текущего контекста пользователя, вошедшего в систему. т.е. концептуально думать о запуске от имени администратора так же, как если бы вы физически вошли в систему как другой пользователь.

Одним из обходных путей может быть разделение сценария на две части: первая выполняется в контексте текущего пользователя и сопоставляет диск, а вторая может быть запущена с правами администратора для выполнения необходимых действий. например Внутри вашего скрипта вы запускаете второй скрипт от имени администратора:

Start-Process powershell -Verb runAs AdminScript.ps1
person HAL9256    schedule 31.10.2019
comment
Я так же боялся. Это потребовало бы от меня написания 3 разных скриптов только для 1 команды. Знаете ли вы, как я могу переключаться между двумя «режимами»? Я попытался написать один полный сценарий и второй сценарий только для запуска этой команды. Один полный скрипт запускался от имени администратора и просто вызывал второй скрипт, надеясь, что он откроется без администратора, но это не удалось. Если бы мне пришлось запускать их вручную, это убило бы мой проект. - person havoc319; 31.10.2019
comment
Зачем вам на самом деле нужно видеть диск в графическом интерфейсе? - person Scepticalist; 31.10.2019

Видимость подключенных дисков между административным и неадминистративным контекстами ограничена конструктивно. Вы можете отключить это поведение с помощью групповой политики или реестра, как описано здесь:

Отн. ="nofollow noreferrer">Подключенные диски недоступны из командной строки с повышенными привилегиями, если UAC настроен на "Запрашивать учетные данные" в Windows

person boxdog    schedule 01.11.2019