从另一个PS会话调用进程的私有环境变量



我有一个进程(testxx)在我的数据库上运行。每次用户连接到数据库时,进程将为数据库启动单独的会话。所有进程都包含一个具有不同值的私有环境变量(Client-Nr)。我想用特定的私有环境变量调用特定的流程。我使用了以下命令:

假设有5个"testxx"进程。我想调用一个值为"client - two"的流程。在私有环境变量"Client-Nr"

因此,我使用以下代码:
get-process -name "testxx" | where-object {$env:Client-Nr -eq "client-Two"}

它没有调用我需要的进程。我使用以下命令检查PowerShell是否识别私有环境变量:

(get-process -Name "testxx").StartInfo.EnvironmentVariables

PowerShell没有识别这个私有环境变量。但是,如果我打开"Process hacker",选择特定的"testxx"。过程中,我看到私有环境变量"client-Nr"和那个特定的"客户"价值。如何通过PowerShell调用这种私有环境变量?

我认为这将是长时间的评论,但实际上它的意思是一个。: -)

我还是不确定我是否得到了你想要的。但如果这是我想的那样,你可能走错路了。我认为PowerShell (Windows)没有只属于单个运行进程的私有环境变量的概念。我认为你可以从System.Diagnostics.Process类型的对象中得到的.StartInfo.EnvironmentVariables环境变量是进程在启动时继承的环境变量。所以它们不会随着进程的运行而改变。

您需要一个属性,该属性可以从流程内部进行操作,并且对流程外部可见。对于手动启动的控制台,这可能是MainWindowTitle

你可以测试一下。我创建了一个文件GUID-Title_90Sec.ps1,其内容为:

$Host.UI.RawUI.WindowTitle = $(New-Guid)
Start-Sleep -Seconds 90
现在我运行了几次:
Start-Process Powershell -ArgumentList '-NoProfile', '-File .GUID-Title_90Sec.ps1' 

Get-Process -Name PowerShell | 
Select-Object -Property Name,MainWindowTitle

…你可以像这样列出所有这些进程:

Name       MainWindowTitle
----       ---------------
powershell ParentProcess
powershell ff37b8b6-f791-4d2b-8dfd-8c0dc0a8bc96
powershell fe06d061-784f-441b-8cd4-0a2d3ec040c5
powershell 9f954fb5-cda8-4f2a-98fe-391c59c51ab2
powershell 095a8019-08d5-4461-ab3c-d6f0f2f485cb
powershell

我只是怀疑这是否适用于由数据库引擎启动的进程,因为它们可能没有MainWindowTitle。对不起。: -)

编辑:

您可以跟踪您启动的进程,而不是事后试图识别进程。当您将进程信息在启动它的那一刻保存在一个变量中时,您可以稍后使用它。与…

$PowerShellInstance = Start-Process Powershell -PassThru

启动一个新的PowerShell会话。与…

$PowerShellInstance

…你有关于这个过程的所有信息。例如:

$PowerShellInstance.Id 

…显示进程id。这有帮助吗?: -)

最新更新