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