我有一个Python脚本,如果它在RDP下运行,则打印1;如果不是,则打印0。
from ctypes import *
SM_REMOTESESSION = 0x1000
print(windll.user32.GetSystemMetrics(SM_REMOTESESSION))
我希望使用PowerShell获取相同的信息。如何在PowerShell中执行等效的GetSystemMetrics
答案 0 :(得分:1)
使用.NET Framework中的TerminalServerSession bool-property可以轻松实现:
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SystemInformation]::TerminalServerSession
输出:
False
或者您可以手动方式(如内部TerminalServerSession
执行)并使用C#和P / Invoke添加负载并在PowerShell中使用GetSystemMetrics()
。
$def = @"
//I removed every other enum-value to shorten the sample
public enum SystemMetric
{
SM_REMOTESESSION = 0x1000, // 0x1000
}
[DllImport("user32.dll")]
public static extern int GetSystemMetrics(SystemMetric smIndex);
"@
Add-Type -Namespace NativeMethods -Name User32Dll -MemberDefinition $def
[NativeMethods.User32Dll]::GetSystemMetrics([NativeMethods.User32Dll+SystemMetric]::SM_REMOTESESSION)
输出:
0