@Jbob
Well, still struggling. First off the file I downloaded to be sourced had strangely formatted double quotes so that prevented the file from being interpreted correctly. Fixed that easily with a quick find/replace.
Secondly, the share that I was running these from appear to not have the appropriate permissions and I had to add in the -ExecutionPolicy Bypass which I completely overlooked the ability to set those options with the GUI (very nice!).
What I ended up with was putting the file to be sourced in the ps1 that has the resolution I’m looking for and uploading that as a snapin. It runs perfectly fine when I manually download and run on the workstation but it is still giving me an error when running as a FOG snapin.
Powershell script [Set-800x600.ps1]:
Function Set-ScreenResolution {
param (
[Parameter(Mandatory=$true,
Position = 0)]
[int]
$Width,
[Parameter(Mandatory=$true,
Position = 1)]
[int]
$Height
)
$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)
{
DEVMODE1 dm = GetDevMode1();
if (0 != User_32.EnumDisplaySettings(null, User_32.ENUM_CURRENT_SETTINGS, ref dm))
{
dm.dmPelsWidth = width;
dm.dmPelsHeight = height;
int iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_TEST);
if (iRet == User_32.DISP_CHANGE_FAILED)
{
return "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:
{
return "Success";
}
case User_32.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 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;
}
}
}
"@
Add-Type $pinvokeCode -ErrorAction SilentlyContinue
[Resolution.PrmaryScreenResolution]::ChangeResolution($width,$height)
}
#Call Function Set-ScreenResolution & set resolution
#Example Set-ScreenResolution 1024 768 or Set-ScreenResolution 1280 1024
Set-ScreenResolution 800 600
Error in fog.log
------------------------------------------------------------------------------
---------------------------------SnapinClient---------------------------------
------------------------------------------------------------------------------
5/17/2016 11:53 AM Client-Info Client Version: 0.10.6
5/17/2016 11:53 AM Client-Info Client OS: Windows
5/17/2016 11:53 AM Client-Info Server Version: 7659
5/17/2016 11:53 AM Middleware::Response Success
5/17/2016 11:53 AM SnapinClient Snapin Found:
5/17/2016 11:53 AM SnapinClient ID: 20
5/17/2016 11:53 AM SnapinClient RunWith: powershell.exe
5/17/2016 11:53 AM SnapinClient RunWithArgs: -ExecutionPolicy Bypass -NoProfile -File
5/17/2016 11:53 AM SnapinClient Name: Set_Resolution_800x600
5/17/2016 11:53 AM SnapinClient File: Set-800x600.ps1
5/17/2016 11:53 AM SnapinClient Created: 2016-05-17 11:52:32
5/17/2016 11:53 AM SnapinClient Args:
5/17/2016 11:53 AM SnapinClient Action:
5/17/2016 11:53 AM Middleware::Communication Download: http://myfogserver/fog/service/snapins.file.php?mac=00:50:XX:XX:XX:XX||00:00:00:00:00:00:00:E0&taskid=20
5/17/2016 11:53 AM SnapinClient C:\Program Files (x86)\FOG\tmp\Set-800x600.ps1
5/17/2016 11:53 AM Bus {
"self": true,
"channel": "Notification",
"data": "{\r\n \"title\": \"Installing Set_Resolution_800x600\",\r\n \"message\": \"Please do not shutdown until this is completed\",\r\n \"subjectID\": \"snapin-Set_Resolution_800x600\"\r\n}"
}
5/17/2016 11:53 AM Bus ERROR: Could not enter socket
5/17/2016 11:53 AM Bus ERROR: Cannot load Counter Name data because an invalid index '' was read from the registry.
5/17/2016 11:53 AM Bus Emmiting message on channel: Notification
5/17/2016 11:53 AM SnapinClient Starting snapin...
5/17/2016 11:53 AM SnapinClient Snapin finished
5/17/2016 11:53 AM SnapinClient Return Code: 0
5/17/2016 11:53 AM Bus {
"self": true,
"channel": "Notification",
"data": "{\r\n \"title\": \"Set_Resolution_800x600 Installed\",\r\n \"message\": \"Installation has finished and is now ready for use\",\r\n \"subjectID\": \"snapin-Set_Resolution_800x600\"\r\n}"
}
5/17/2016 11:53 AM Bus ERROR: Could not enter socket
5/17/2016 11:53 AM Bus ERROR: Cannot load Counter Name data because an invalid index '' was read from the registry.
5/17/2016 11:53 AM Bus Emmiting message on channel: Notification
5/17/2016 11:53 AM Middleware::Communication URL: http://myfogserver/fog/service/snapins.checkin.php?taskid=20&exitcode=0&mac=00:50:XX:XX:XX:XX||00:00:00:00:00:00:00:E0&newService&json
------------------------------------------------------------------------------