The following script can be executed on first deployment, on a specific users logon, on every user’s logon, etc.
Param ( [Parameter (Mandatory=$true)] [ValidateRange(0,3)] [int]$Rotation, [Parameter (Mandatory=$true)] [int]$Width, [Parameter (Mandatory=$true)] [int]$Height ) &amp;lt;# .Synopsis Sets the Screen Resolution and orientation of the primary monitor Adapted from, https://stackoverflow.com/questions/12644786/powershell-script-to-change-screen-orientation https://blogs.technet.microsoft.com/heyscriptingguy/2010/07/07/hey-scripting-guy-how-can-i-change-my-desktop-monitor-resolution-via-windows-powershell/ .Description Uses Pinvoke and ChangeDisplaySettings Win32API to make the change Windows API enumeration of display rotation is counter-clockwise .Example Powershell.exe -executionpolicy bypass -file ".\Set-OrientationAndResolution.ps1" 0 1920 1080 Parameter: "Rotation" is desired rotation 0 = rotate 0 = landscape 1 = rotate 270 = portrait flipped 2 = rotate 180 = landscape flipped 3 = rotate 90 = portrait Parameter: "Width" is the pixel measurement parrallel to the task bar after rotation Parameter: "Height" is the pixel measurement perpendicular to the task bar after rotation #&amp;gt; Function Set-ScreenResolutionAndOrientation ($r, $w, $h){ $pinvokeCode = @" using System; using System.Runtime.InteropServices; namespace Resolution { [StructLayout(LayoutKind.Sequential)] public struct DEVMODE { [MarshalAs(UnmanagedType.ByValTStr,SizeConst=32)] public string dmDeviceName; public short dmSpecVersion; public short dmDriverVersion; public short dmSize; public short dmDriverExtra; public int dmFields; public int dmPositionX; public int dmPositionY; public int dmDisplayOrientation; public int dmDisplayFixedOutput; public short dmColor; public short dmDuplex; public short dmYResolution; public short dmTTOption; public short dmCollate; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string dmFormName; public short dmLogPixels; public short dmBitsPerPel; public int dmPelsWidth; public int dmPelsHeight; public int dmDisplayFlags; public int dmDisplayFrequency; public int dmICMMethod; public int dmICMIntent; public int dmMediaType; public int dmDitherType; public int dmReserved1; public int dmReserved2; public int dmPanningWidth; public int dmPanningHeight; }; class NativeMethods { [DllImport("user32.dll")] public static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE devMode); [DllImport("user32.dll")] public static extern int ChangeDisplaySettings(ref DEVMODE devMode, int flags); public const int ENUM_CURRENT_SETTINGS = -1; public const int CDS_UPDATEREGISTRY = 0x01; public const int CDS_TEST = 0x02; public const int DISP_CHANGE_SUCCESSFUL = 0; public const int DISP_CHANGE_RESTART = 1; public const int DISP_CHANGE_FAILED = -1; public const int DMDO_DEFAULT = 0; public const int DMDO_90 = 1; public const int DMDO_180 = 2; public const int DMDO_270 = 3; } public class PrmaryScreenResolution { static public string ChangeResolution(int rotation, int width, int height) { DEVMODE dm = GetDevMode(); if (0 != NativeMethods.EnumDisplaySettings(null, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm)) { // swap width and height if (rotation == 1 || rotation == 3) { if (dm.dmPelsWidth > dm.dmPelsHeight) { int temp = dm.dmPelsHeight; dm.dmPelsHeight = dm.dmPelsWidth; dm.dmPelsWidth = temp; } } if (rotation == 0 || rotation == 2) { if (dm.dmPelsWidth < dm.dmPelsHeight) { int temp = dm.dmPelsHeight; dm.dmPelsHeight = dm.dmPelsWidth; dm.dmPelsWidth = temp; } } dm.dmPelsHeight = height; dm.dmPelsWidth = width; // determine new orientation based on the current orientation switch(rotation) { case 1: dm.dmDisplayOrientation = NativeMethods.DMDO_270; break; case 2: dm.dmDisplayOrientation = NativeMethods.DMDO_180; break; case 3: dm.dmDisplayOrientation = NativeMethods.DMDO_90; break; case 0: dm.dmDisplayOrientation = NativeMethods.DMDO_DEFAULT; break; default: // unknown orientation value // add exception handling here break; } int iRet = NativeMethods.ChangeDisplaySettings(ref dm, NativeMethods.CDS_TEST); if (iRet == NativeMethods.DISP_CHANGE_FAILED) { return "Unable To Process Your Request. Sorry For This Inconvenience."; } else { iRet = NativeMethods.ChangeDisplaySettings(ref dm, NativeMethods.CDS_UPDATEREGISTRY); switch (iRet) { case NativeMethods.DISP_CHANGE_SUCCESSFUL: { return "Success"; } case NativeMethods.DISP_CHANGE_RESTART: { return "You Need To Reboot For The Change To Happen.\n If You Feel Any Problem After Rebooting Your Machine\nThen Try To Change Resolution In Safe Mode."; } default: { return "Failed To Change The Resolution"; } } } } else { return "Failed To Change The Resolution."; } } private static DEVMODE GetDevMode() { DEVMODE dm = new DEVMODE(); dm.dmDeviceName = new String(new char[32]); dm.dmFormName = new String(new char[32]); dm.dmSize = (short)Marshal.SizeOf(dm); return dm; } } } "@ Add-Type $pinvokeCode -ErrorAction SilentlyContinue [Resolution.PrmaryScreenResolution]::ChangeResolution($r, $w, $h) } Set-ScreenResolutionAndOrientation $Rotation $Width $Height