Powershell 将在foreach循环中创建的属性发送到PSCustomObject
我想读出一些在Web服务器上运行的进程的信息。我一直在把我的信息放到一个变量中,然后把它导出到一个日志文件中 如何将我的Powershell 将在foreach循环中创建的属性发送到PSCustomObject,powershell,Powershell,我想读出一些在Web服务器上运行的进程的信息。我一直在把我的信息放到一个变量中,然后把它导出到一个日志文件中 如何将我的$Properties放入$ProcessDataPSCustom对象 主要目标是获取服务器上运行的每个进程的gdi句柄 $sig = @' [DllImport("User32.dll")] public static extern int GetGuiResources(IntPtr hProcess, int uiFlags); '@
$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
}
}
谢谢 看起来您只是想将GDI对象添加到流程信息中。请使用以下选项:
$processes = [Diagnostics.Process]::GetProcesses() |
Select-Object Name, Cpu, Handles, @{n='GDI-Objects';e={
[Win32.NativeMethods]::GetGuiResources($_.Handle, 0).ToString()
}}
看起来您只是想将GDI对象添加到流程信息中。请使用以下选项:
$processes = [Diagnostics.Process]::GetProcesses() |
Select-Object Name, Cpu, Handles, @{n='GDI-Objects';e={
[Win32.NativeMethods]::GetGuiResources($_.Handle, 0).ToString()
}}
或
我通常选择A选项
或
我通常使用选项A,但不能这样做,因为它位于foreach循环中,并且始终是rewritten@SimonS您可以通过将对象创建放在循环中,并将循环输出分配给变量:
$ProcessData=foreach($processs中的p){New object PSCustomObject…}
,使其工作。但是,使用计算属性执行此操作要简单得多。无法执行此操作,因为它位于foreach循环中,并且始终是rewritten@SimonS您可以通过将对象创建放在循环中,并将循环输出分配给变量:$ProcessData=foreach($processs中的p){New object PSCustomObject…}使其工作
。但是,使用计算属性执行此操作要简单得多。
$Properties = @{
'ProcessName'=$p.name;
'CPU'=$p.cpu;
'Handles'=$p.Handles;
'GDI-Objects'=$gdiHandles.ToString
}
$ProcessData = New-Object PSCustomObject -Property $Properties