0
我想读出在Web服务器上运行的进程的一些信息。我坚持将我的信息存入变量并将其导出到日志文件中将在foreach循环中创建的属性发送到PSCustomObject
如何将我的$Properties
加入$ProcessData
PSCustom对象?
主要目标是获取我的服务器上运行的每个进程的gdi句柄。
$sig = @'
[DllImport("User32.dll")] public static extern int GetGuiResources(IntPtr hProcess, int uiFlags);
'@
Add-Type -MemberDefinition $sig -name NativeMethods -namespace Win32
$processes = [System.Diagnostics.Process]::GetProcesses()
[int]$gdiHandleCount = 0
$ProcessData = New-Object PSCustomObject
ForEach ($p in $processes)
{
try{
$gdiHandles = [Win32.NativeMethods]::GetGuiResources($p.Handle, 0)
$gdiHandleCount += $gdiHandles
$properties = @{
'ProcessName'=$p.name;
'CPU'=$p.cpu;
'Handles'=$p.Handles;
'GDI-Objects'=$gdiHandles.ToString
}
}
catch {
#"Error accessing " + $p.Name
}
}
谢谢!
不能做到这一点,因为它是在一个foreach循环,总是被改写 – SimonS
@SimonS你可以通过将对象创建放在循环中并将循环输出分配给变量来实现它:'$ ProcessData = foreach($ processes中的$ p){New-Object PSCustomObject ''。但是,使用计算属性来做这件事更简单。 –