在 PowerShell 的 foreach-object -parallel 循环中,是否有一种方法可以获取线程 ID(TID)?

3

你为什么想要这样做? - Dai
你使用的PowerShell版本是什么?当我尝试运行你的代码片段时,出现了一个错误:“无法使用指定的命名参数解析参数集”。 - Dai
@Dai Powershell 7是pwsh。 - js2010
1个回答

1

与进程 ID ($PID) 不同,PowerShell 中目前没有任何反映线程 ID 的 自动化 PowerShell 变量(截至 PowerShell 7.2)。

如果获取托管线程 ID(而不是本地线程 ID)足够了,则可以使用 .NET API(System.Threading.Thread.CurrentThread):

1..2 | % -Parallel { [System.Threading.Thread]::CurrentThread.ManagedThreadId }

要获取本机线程ID,您需要通过P/Invoke使用特定于平台的解决方案;例如,在Windows上,使用GetCurrentThreadId() WinAPI函数:
# For Windows
Add-Type -Name WinApi -Namespace demo -MemberDefinition @'
  [DllImport("Kernel32.dll")]
  public static extern uint GetCurrentThreadId();
'@

1..2 | % -Parallel { [demo.WinApi]::GetCurrentThreadId() }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接