1 year ago

#381375

test-img

Subhi Shawa

Powershell: Unable to find type of class defined

I'm trying to change screen resolution using Powershell for remote computers. Searching online, have found PS-ChangeDisplayresolution where someone was able to perform this using C# inside Powershell.Running the script on my local machine, it works perfectly but running it remotely then it doesn't work. I was looking into ways to run it remotely and stumbled upon Start-Process and Invoke-Command. But, when trying it locally, I am getting the error Unable to find type.

Would appreciate any help on this.

$command = {

  $width = 1152
  $height = 864
  $freq = 64

#Function to update the screen resolution
 Function Set-ScreenResolution { 

 $pinvokeCode = @'

 using System; 
 using System.Runtime.InteropServices; 

 namespace Resolution 
 { 

[StructLayout(LayoutKind.Sequential)] 
public struct DEVMODE1 
{ 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] 
    public string dmDeviceName; 
    public short dmSpecVersion; 
    public short dmDriverVersion; 
    public short dmSize; 
    public short dmDriverExtra; 
    public int dmFields; 
    public short dmOrientation; 
    public short dmPaperSize; 
    public short dmPaperLength; 
    public short dmPaperWidth; 
    public short dmScale; 
    public short dmCopies; 
    public short dmDefaultSource; 
    public short dmPrintQuality; 
    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 User_32 
{ 
    [DllImport("user32.dll")] 
    public static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE1 devMode); 
    [DllImport("user32.dll")] 
    public static extern int ChangeDisplaySettings(ref DEVMODE1 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 class PrmaryScreenResolution 
{ 
    static public string ChangeResolution(int width, int height, int freq) 
    { 
        DEVMODE1 dm = GetDevMode1(); 

        if (0 != User_32.EnumDisplaySettings(null, User_32.ENUM_CURRENT_SETTINGS, ref dm)) 
        { 

            dm.dmPelsWidth = width; 
            dm.dmPelsHeight = height; 
            dm.dmDisplayFrequency = freq;

            int iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_TEST); 

            if (iRet == User_32.DISP_CHANGE_FAILED) 
            { 
                $retval = "Unable to process your request. Sorry for this inconvenience."; 
            } 
            else 
            { 
                iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_UPDATEREGISTRY); 
                switch (iRet) 
                { 
                    case User_32.DISP_CHANGE_SUCCESSFUL: 
                        { 
                            $retval = "Success"; 
                        } 
                    case User_32.DISP_CHANGE_RESTART: 
                        { 
                            $retval = "You need to reboot for the change to happen.\n If you feel any problems after rebooting your machine\nThen try to change resolution in Safe Mode."; 
                        } 
                    default: 
                        { 
                            $retval = "Failed to change the resolution"; 
                        } 
                } 

            } 


        } 
        else 
        { 
            $retval = "Failed to change the resolution."; 
        } 
    } 

    private static DEVMODE1 GetDevMode1() 
    { 
        DEVMODE1 dm = new DEVMODE1(); 
        dm.dmDeviceName = new String(new char[32]); 
        dm.dmFormName = new String(new char[32]); 
        dm.dmSize = (short)Marshal.SizeOf(dm); 
        return dm; 
    } 
   } 
} 

'@ 


 [Resolution.PrmaryScreenResolution]::ChangeResolution($width,$height,$freq) 
 } 

 #Call the function to change the resolution with the inserted parameters
 $Test = Set-ScreenResolution -Width $width -Height $height -Freq $freq
 }

 Start-Process Powershell.exe  -ArgumentList "-NoExit -command (invoke-command - scriptblock {$command})"

 }

c#

powershell

function

module

namespaces

0 Answers

Your Answer

Accepted video resources