클라이언트의 IT 관리자로부터 "부팅 시 수동으로 해상도를 설정하는 Powershell 스크립트를 작성"해 달라는 요청을 받았습니다. 아마 그들이 나에게 이렇게 하라고 하면 가능할 것 같아요. 나는 Powershell에 대한 경험이 전혀 없습니다. 내 스크립트/명령 및 오류는 다음과 같습니다.
Set-DisplayResolution -Width 1024 -Height 768
Set-DisplayResolution
cmdlet, 함수, 스크립트 파일 또는 실행 가능한 프로그램의 이름으로 인식되지 않습니다.
Set-ScreenResolution -Width 1024 -Height 768
Set-ScreenResolution
cmdlet, 함수, 스크립트 파일 또는 실행 가능한 프로그램의 이름으로 인식되지 않습니다.
SetDisplayResolution -Width 1024 -Height 768
SetDisplayResolution
cmdlet, 함수, 스크립트 파일 또는 실행 가능한 프로그램의 이름으로 인식되지 않습니다.
내가 무엇을 놓치고 있나요? 감사합니다.
답변1
답변2
다음을 설치해야 합니다.화면 설정이 기능을 얻으려면 Powershell-Gallery의 모듈을 사용하세요.
모듈 설치
Install-Module -Name DisplaySettings
용법
Set-DisplayResolution -Width 800 -Height 600
답변3
당알빈의 대답:
다음 내용(src)으로 setResolution.ps1 파일을 만듭니다.
Function Set-ScreenResolution {
<#
.Synopsis
Sets the Screen Resolution of the primary monitor
.Description
Uses Pinvoke and ChangeDisplaySettings Win32API to make the change
.Example
Set-ScreenResolution -Width 1024 -Height 768
#>
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)
}
Set-ScreenResolution -Width 1024 -Height 768
그런 다음 파일은 다음과 같이 powershell에서 실행될 수 있습니다
`C:\path-to-file\setResolution.ps1`
답변4
Albin의 게시물에 있는 powershell 스크립트는 정상적으로 작동했지만 한 컴퓨터에서는 1920x1080만 설정할 수 있었고 수동으로 설정할 수 있었던 1920x1200은 설정할 수 없었습니다. 결국 저는 프로필을 저장하고 로드할 수 있는 Nirsoft MultiMonitor를 사용해야 했습니다. 구성 파일을 편집하고 해상도 매개변수만 입력하면 꽤 잘 작동합니다. 구성 파일은 다음과 같습니다.
Name=\\.\DISPLAY1
Width=1920
Height=1200
가능한 한 타사 도구를 피하는 것을 선호하지만 이 경우에는 무료이고 가벼우며 매우 잘 작동합니다(그리고 어떤 바이러스에 대해서도 불평하지 않았습니다)...