Update June 10th, 2021
As noted by user bbk in the comments, in recent versions of Windows 10 the script no longer have a static content but rather a dynamic one where part of the content includes date and time. Example:
- "# PowerShell test file to determine AppLocker lockdown mode 6/9/2021 15:15:08"
This also means that the hash no longer is static and cannot be excluded by mistake (which is good since you shouldn't have done that in the first place).
Update February 6th, 2020
It seems there have been some changes in how these files are used by Windows sometime since I wrote the original post and now. On a Windows 10 1909 I have observed the following:
- The content of the ps1,psm1 file is no longer "1" but rather
"# PowerShell test file to determine AppLocker lockdown mode "
- The filehash is not reported in the eventlog for these event for me anymore (might just be my labsetup that is incorrect though).
- Found another good article discussing the topic further:
Original article below
If you are using AppLocker (which you should) and have enabled the function "MSI and Scripts" in AppLocker to whitelist only signed PowerShell scripts you will get some errors in the event log even though your scripts are signed. Checking the event viewer log for AppLocker events you will see that the logged on user tried to run 2 different scripts starting with __PSScriptPolicyTest and the extensions .ps1 and psm1. The full name is something like __PSScriptPolicyTest_bavjba32.xjg.ps1 where the name is __PSScriptPolicyTest_<8-random-numbers-and-letters>.<3-random-numbers-and-letters>.ps1/psm1
In my case I had a PowerShell logon script that was signed and allowed in AppLocker. The script itself ran as expected but the 2 PSScriptPolicyTest scripts was blocked in the log at the same time.
Troubleshooting this a little bit more I noticed that they are not signed and since they are located in "AppdataLocalTemp" we did not want to allow them by path (since the user have writing rights in that folder). The files got removed immediately after being created but I managed to capture them and the only content that was in them the was the number one:
The good thing is that it is always the same content and since AppLocker does not take the filename into account when creating a file hash I looked in the event log and saw that it was always the same file hash being blocked:
%OSDRIVE%\USERS\<USERNAME>\APPDATA\LOCAL\TEMP\__PSSCRIPTPOLICYTEST_FRWMRMNM.ZOV.PS1 was prevented from running.
Once this hash was added to the whitelist:
Nothing was blocked in the event log any more and the logon script still ran without any issues.
So what are those files really for? I have not found any official documentation about this behaviour so until I get some official confirmation that this is how it works it is just my assumptions.
Well it seems that these 2 script are being used to determine which Language Mode PowerShell is allowed to run in when using AppLocker! So by allowing them in the GPO the constraint mode was completely disabled for the user.
Since this is not wanted behaviour I removed the file hash for the PSScriptPolicyTest scripts so they got blocked by AppLocker again. After the GPO had been updated I checked Language mode for the user again:
Now it was back to the expected setting again.
- __PSScriptPolicyTest*.ps1/psm1 files are used to determine which Language Mode PowerShell will run in.
- Do NOT allow them (whitelist) in AppLocker since this will circumvent the Constraint mode security feature.
- If you are troubleshooting AppLocker the Errors in the event log for the 2 PSScriptPolicyTest scripts with the file hash 6B86B273FF34FCE19D6B804EFF5A3F5747ADA4EAA22F1D49C01E52DDB7875B4B can be safely ignored.
Hope this helps!