Por que meu script de logon não está mapeando nenhuma unidade?

1

Eu escrevi um script de logon no PowerShell. O Script está incorporado no GPO e é executado quando um usuário está efetuando login no domínio.

Meu problema é que as unidades que implemente no Script não são implantadas. Tenho certeza que o script de logon é executado porque no final do script eu envio um email para mim e sempre recebo. Portanto, executar o script não deve ser o problema. Eu também estou registrando todo o $Error Variable cada vez que o script é executado e não há nenhuma indicação de porque esse erro ocorre.

Estou quase certo de que o erro não está no script em si - ele deve ser um erro de permissão, eu acho.

Acho que isso pode ser resolvido quando eu especificar o -NoProfile Parameter ao executar o script, mas não sei onde colocar isso no GPO. Eu não quero um arquivo de lote chamando o script por razões de beleza: -).

Editar: especificando -noprofile não resolveu o problema

Edit: Como havia um comentário dizendo que não há informações suficientes sobre como as unidades são mapeadas, colei toda a parte do mapeamento abaixo:

# 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)    
    }
}
    
por SimonS 04.04.2016 / 15:31

2 respostas

3

Eu tenho uma solução agora.

O que cria esse comportamento do script de logon que não deseja mapear unidades?

Se você tem o Windows 10, deseja usar o Edge, a Calculadora e o PDF App. A Microsoft diz que você precisa do UAC para isso, senão não funcionará. Então você habilita o UAC por GPO (Reg. Key EnableLua ). link

MAS: se você estiver implantando um script de logon dentro do GPO e seu usuário for um administrador local no computador no qual ele está fazendo logon - que no meu caso está em todos os computadores porque sou um administrador de domínio - o UAC Envie sua conta para um usuário não privilegiado e, como sabemos, se ele não estiver sendo executado no mesmo contexto, você não conseguirá implantar suas unidades na sua conta de administrador.

This is in fact by design, and it’s caused by the way UAC works. When you’re a member of the Administrators group and you log in, your account is busted down to a non-privileged user by UAC. This running context is completely separate from the context you get when you right-click Command Prompt and launch as an administrator. As you’ll probably have noticed, network drives connected in one context are not visible in the other. The problem is that GPO-based login scripts are being executed in the Administrator context – not the ordinary user context.

Citação de link

Então, você está desabilitando o UAC e o seu GPO-Logon-Script funcionará. Você está feliz por um momento, mas depois percebe que não pode mais usar a borda.

Então, como podemos ativar o UAC e fazer nosso script de logon funcionar?

Eu fiz isso com o Microsoft não suportado Registro Hack. Eu acho que é uma vulnerabilidade para a segurança do seu sistema, tenha isso em mente se você estiver fazendo isso da mesma maneira:

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

E BAM! você pode usar scripts de logon, UAC, borda, qualquer que seja.

Outras coisas que você poderia tentar - eu não tentei nada disso ainda:

  • Chame seu arquivo PS em um script em lote armazenado em GPO
  • Configure seu script PS como uma tarefa agendada dentro do GPO

Então, esperamos que isso seja útil para outros administradores que tenham problemas com o script de logon.

Felicidades!

    
por 05.04.2016 / 16:36
0

Acho que seu problema pode existir quando você chama os arquivos que está importando. Esses arquivos são armazenados no sysvol do seu GPO em questão? O. \ Indica que está procurando no mesmo diretório que o script do arquivo em questão.
Agora, se os arquivos "Get-content" estiverem no lugar certo, pode ser que você esteja chamando a variável de ambiente username que ainda não tenha sido inicializada. Tente testar o carregamento adequado e as variáveis com um registro, como o Brandyn sugere.

    
por 05.04.2016 / 00:40