クライアントの IT 管理者から、「起動時に解像度を手動で設定する PowerShell スクリプトを作成してください」と依頼されました。依頼されたのなら、おそらく可能です。PowerShell の経験はまったくありません。スクリプト/コマンドとそのエラーは次のとおりです。
Set-DisplayResolution -Width 1024 -Height 768
Set-DisplayResolution
コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。
Set-ScreenResolution -Width 1024 -Height 768
Set-ScreenResolution
コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。
SetDisplayResolution -Width 1024 -Height 768
SetDisplayResolution
コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。
何が足りないのでしょうか? ありがとうございます。
答え1
どこから例を入手したのかわかりませんが、ネイティブの PowerShell には解像度を設定するコマンドはありません。
私はAutoHotKeyを使用しています。そこで独自のスクリプトを作成するか、例ネットから。
または、PowerShell から呼び出すことができる独自の関数を作成することもできます。こちらをご覧ください
もちろん、要件に応じてサードパーティのツールもいくつかあります。一例スクリプトでも動作します。その他7人具体的に何をしようとしているのですか?
答え2
インストールする必要がありますディスプレイの設定この機能を取得するには、Powershell-Gallery からモジュールを取得します。
モジュールのインストール
Install-Module -Name DisplaySettings
使用法
Set-DisplayResolution -Width 800 -Height 600
答え3
パーアルビンの答え:
次の内容の setResolution.ps1 ファイルを作成します (src):
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 スクリプトは正常に動作していましたが、1 台のマシンでは 1920x1080 しか設定できず、手動で設定できた 1920x1200 には設定できませんでした。結局、プロファイルを保存して読み込むことができる Nirsoft MultiMonitor を使用する必要がありました。構成ファイルを編集して解像度パラメータを入力するだけで、非常にうまく動作しました。構成ファイルは次のようになります。
Name=\\.\DISPLAY1
Width=1920
Height=1200
可能な限りサードパーティのツールは避けたいのですが、今回は無料で軽量で、非常にうまく機能します(ウイルスに関する苦情もありませんでした)...