我正在尝试创建一个简单的powershell脚本,它将允许它显示进程的PID和启动时间。
目前,这是我的代码->
$proc=$args[0]
if (get-process -name $proc -ErrorAction SilentlyContinue) {
$time= get-process $proc | Select-Object starttime |format-table -HideTableHeaders starttime
write-host $proc $time}
else {write-host "non existant"}当我查看变量$time的内容时,这就是存储的内容
> Microsoft.PowerShell.Commands.Internal.Format.FormatStartData
> Microsoft.PowerShell.Commands.Internal.Format.GroupStartData Micr
> osoft.PowerShell.Commands.Internal.Format.FormatEntryData
> Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData
> Microsoft.Powe rShell.Commands.Internal.Format.FormatEntryData
> Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData
> Microsoft.PowerShell.Com mands.Internal.Format.FormatEntryData
> Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData
> Microsoft.PowerShell.Commands.Inte rnal.Format.FormatEntryData
> Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData
> Microsoft.PowerShell.Commands.Internal.Forma t.FormatEntryData
> Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData
> Microsoft.PowerShell.Commands.Internal.Format.FormatEn tryData
> Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData
> Microsoft.PowerShell.Commands.Internal.Format.GroupEndData Micro
> soft.PowerShell.Commands.Internal.Format.FormatEndData基本上,我想以一个脚本结束,它显示了特定应用程序的每个PID和Startime。$time var需要存储"2022-08-18 1:08:39 PM“的日期。
我还将创建另一个名为$id的变量,它将存储每个进程的PID。
1408 notepad Started 2022-08-18 1:08:39 PM或用于具有多个进程的应用程序
1409 chrome Started 2022-08-18 1:08:39 PM
14264 chrome Started 2022-08-18 1:08:40 PM
4567 chrome Started 202...对于那些具有多个进程的进程,我想我将使用foreach语句并遍历变量中的每个可用PID?在这方面仍然是新的,所以如果你有任何关于如何进行这方面的建议,将不胜感激,但就我所知道的,一个前瞻性的声明将帮助我这一点。
发布于 2022-08-18 18:26:12
代码中有两个常见的问题:
Format-* cmdlet发出输出对象,其唯一目的是向PowerShell的显示输出格式系统提供格式化指令。简而言之:只使用cmdlet来格式化显示的数据,而对于随后的编程处理E 215--有关更多信息,请参见这个答案。Format-Table的原因是为了获得.StartTime属性值。要使-ExpandProperty 选择对象 只输出一个属性值,正确的方法是使用参数,即
-ExpandProperty starttime而不是[-Property] starrttime。- See [this answer](https://stackoverflow.com/q/48807857/45375) for details and alternatives.PowerShell惯用的解决方案如下所示:
$proc = $args[0]
# Process all matching processes, if any.
Get-Process $proc -ErrorAction SilentlyContinue |
ForEach-Object {
'{0} {1} Started {2}' -f $_.Id, $_.Name, $_.StartTime
}
# $? contains $false if an error occurred in the previous statement.
if (-not $?) { Write-Warning "Non-existent: $proc" }也就是说,使用ForEach-Object逐一处理匹配的进程,在传递给它的脚本块 ({ ... })中,您可以通过变量变量引用手头的processed对象(System.Diagnostics.Process),允许您直接访问该对象上感兴趣的属性。运算符用于合成所需格式的输出字符串。
样本输出:
56204 bash Started 8/18/2022 2:15:25 PM
56245 bash Started 8/18/2022 2:15:28 PM发布于 2022-08-18 18:20:28
为我自己的问题找到了答案。如果其他人想知道为什么会发生这种情况,这在这篇文章中已经解释过了。
https://stackoverflow.com/questions/73407561
复制相似问题