New-PSDrive command ran inside a PowerShell Group Policy User Logon script
Posted on 2016-07-15
For our Windows 10 machines, we have a script that checks the userSharedFolder attribute in AD for the logged on user, and maps this UNC path to L: drive. It runs inside the logon session, but I can't get it to work when used as a PowerShell user logon script.
Here it is...
$share=Get-ADUser -Identity $env:USERNAME -Properties * |select userSharedFolder
Remove-PSDrive -Name L
New-PSDrive -Name "L" -PSProvider FileSystem -Root $share.userSharedFolder -Scope Global -Persist
The script works when I run it line by line in PowerShell ISE, I get the output...
Name Used (GB) Free (GB) Provider Root
---- --------- --------- -------- ----
L 327.89 172.11 FileSystem \\server\share
And the drive maps in Windows Explorer.
But when I add it to as a Group Policy PowerShell user logon script, the drive does not map in Windows.
I've then enabled PowerShell Transcripts in Group Policy, and checked the text file for a transcript of what happened during the logon process, and I get the same output as above, so the mapping does happen inside the powershell session, but nothing gets mapped in Windows Explorer.
This is not an ExecutionPolicy issue, because all scripts that are run from the PowerShell Scripts tab of the User Logon Scripts section of Group Policy are automatically run as 'ExecutionPolicy Bypass'.
I have other powershell scripts launched this way, doing other things, and these run fine from the 'PowerShell Scripts' tab.
This is not a Group Policy issue either - because the transcript proves that the script does run, and completes.
The problem I something to do with the context/environment in which the script runs, but I don't know enough about PowerShell to know more than that.
My understanding of the -Persist switch above was that it would create the mapping in Windows Explorer too.
I've tried adding a "-Scope Gobal" switch to the command but to no avail.
I know there are other (less elegant) options, such as launching the script from a batch file, or using 'net use' instead of New-PSDrive, but this should work, and I want this script to be as self-contained as possible.
Any ideas what's wrong here?