Назад | Перейти на главную страницу

Почему мой сценарий входа в систему не отображает никаких дисков?

Я написал сценарий входа в систему в PowerShell. Сценарий встроен в GPO и запускается, когда пользователь входит в домен.

Моя проблема в том, что диски, которые я развертываю в сценарии, не развертываются. Я уверен, что сценарий входа в систему работает, потому что в конце сценария я отправляю себе электронное письмо и всегда получаю его. Так что запуск сценария не должен быть проблемой. Я также записываю весь $Error Переменная при каждом запуске скрипта, и нет никаких указаний на причину возникновения этой ошибки.

Я почти уверен, что ошибка не в самом скрипте - я думаю, это должна быть ошибка разрешения.

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

Изменить: указав -noprofile не решил проблему

Изменить: поскольку был комментарий о том, что недостаточно информации о том, как сопоставлены диски, я вставил всю часть сопоставления ниже:

# UserOU as a parameter, value set in GPO
Param([string]$UserOU)

# preparing some stuff...
Import-Module .\SecureStringFunctions.psm1
[Byte[]]$key = (1..16)
$pw = Get-Content .\LocalAdminCred.txt | ConvertTo-SecureString -key $key

# Tried this to elevate the Script IF it's needed. Didn't solve my problem. works only on PS 4.0 but didn't solve the issue on my 5.0 machine
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) 
{ Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs; exit }

# Import CSV with drive information based on username and userOU to get every maps that the current user needs
# also replacing a string inside the CSV for current session to map the homedrive of each user
$Drives = (Get-Content .\NetworkDrives.csv) -replace "userhome",$env:username | ConvertFrom-CSV -Delimiter ';' | ? {
    (($_.Group.split(',') -contains $UserOU) -or ($_.Group.split(',') -contains $env:username)) -and (!(Test-Path $_.Letter))
} 

# When I export the $Drives Variable at this point, all drives were read correctly, so the failure must occur in the mapping

# map all drives for current user. Drives to DMZ with password in plain text because ".mapnetworkdrive" only accepts plain text.
$Drives | % {
    if (![system.string]::IsNullOrEmpty($_.Username)) {
        if (($UserOU -like 'admin*') -and (($_.Server -ne $env:computername) -or ([system.string]::IsNullOrEmpty($_.Server)))) { 
            Continue
        }
        [string]$pwplain = ConvertFrom-SecureString $pw -AsPlainText -Force
        $Map = New-Object -comobject Wscript.Network
        $Map.MapNetworkDrive($_.letter,$_.path,$false,$_.username,$pwplain)
        $pwplain = ""
    } else { 
        $Map = New-Object -comobject Wscript.Network
        $Map.MapNetworkDrive($_.letter,$_.path,$false)    
    }
}

Теперь у меня есть решение.

Что вызывает такое поведение вашего сценария входа в систему, не желающего подключать диски?

Если у вас Windows 10, вы хотите использовать Edge, Калькулятор и приложение PDF. Microsoft говорит, что для этого вам нужен UAC, иначе это не сработает. Итак, вы включаете UAC с помощью GPO (Reg. Key EnableLua). https://technet.microsoft.com/en-us/library/dd835564%28v=ws.10%29.aspx

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

На самом деле это задумано, и это вызвано тем, как работает UAC. Когда вы являетесь членом группы администраторов и входите в систему, UAC блокирует вашу учетную запись до непривилегированного пользователя. Этот рабочий контекст полностью отделен от контекста, который вы получаете, когда вы щелкаете правой кнопкой мыши Командную строку и запускаете от имени администратора. Как вы, наверное, заметили, сетевые диски, подключенные в одном контексте, не видны в другом. Проблема в том, что сценарии входа на основе GPO выполняются в контексте администратора, а не в контексте обычного пользователя.

Цитата из http://pcloadletter.co.uk/2010/05/15/missing-network-drives/

Итак, вы отключаете UAC, и ваш GPO-Logon-Script будет работать. На мгновение вы счастливы, но потом понимаете, что больше не можете использовать край.

Итак, как мы можем включить UAC и заставить наш сценарий входа работать?

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

HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System
New Entry: Type: DWORD Name: "EnableLinkedConnections" Value: 1

И БАМ! вы можете использовать сценарии входа в систему, UAC, Edge и т. д.

Вы можете попробовать и другие вещи - я еще ничего не пробовал:

  • Вызовите свой файл PS в пакетном сценарии, который хранится в GPO.
  • Настройте сценарий PS как запланированную задачу внутри GPO.

Надеюсь, это будет полезно для других администраторов, у которых есть проблемы со сценарием входа в систему.

Ура!

Я думаю, что ваша проблема может заключаться в том, что вы вызываете файлы, которые вы импортируете. Хранятся ли эти файлы в sysvol для рассматриваемого объекта групповой политики? . \ Означает, что он ищет в том же каталоге, что и сценарий для рассматриваемого файла.
Теперь, если файлы «Get-content» находятся в нужном месте, возможно, вы вызываете переменную среды имени пользователя, которая еще не инициализирована. Попробуйте проверить правильность загрузки и переменных с помощью журнала, как предлагает Брэндин.