使用PowerShell获取系统指标

时间:2015-02-23 15:58:39

标签: python powershell

我有一个Python脚本,如果它在RDP下运行,则打印1;如果不是,则打印0。

from ctypes import *
SM_REMOTESESSION = 0x1000
print(windll.user32.GetSystemMetrics(SM_REMOTESESSION))

我希望使用PowerShell获取相同的信息。如何在PowerShell中执行等效的GetSystemMetrics

1 个答案:

答案 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