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 ''。但是,使用計算屬性來做這件事更簡單。 –