首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >工序startTIME的Poweshell别名

工序startTIME的Poweshell别名
EN

Stack Overflow用户
提问于 2022-08-18 18:01:54
回答 2查看 42关注 0票数 1

我正在尝试创建一个简单的powershell脚本,它将允许它显示进程的PID和启动时间。

目前,这是我的代码->

代码语言:javascript
复制
$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的内容时,这就是存储的内容

代码语言:javascript
复制
> 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。

代码语言:javascript
复制
1408 notepad Started 2022-08-18 1:08:39 PM

或用于具有多个进程的应用程序

代码语言:javascript
复制
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?在这方面仍然是新的,所以如果你有任何关于如何进行这方面的建议,将不胜感激,但就我所知道的,一个前瞻性的声明将帮助我这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-18 18:26:12

代码中有两个常见的问题:

  • Format-* cmdlet发出输出对象,其唯一目的是向PowerShell的显示输出格式系统提供格式化指令。简而言之:只使用cmdlet来格式化显示的数据,而对于随后的编程处理E 215--有关更多信息,请参见这个答案
  • 您开始尝试使用Format-Table的原因是为了获得.StartTime属性值。要使-ExpandProperty 选择对象 只输出一个属性值,正确的方法是使用参数,即 -ExpandProperty starttime而不是[-Property] starrttime
代码语言:javascript
复制
- See [this answer](https://stackoverflow.com/q/48807857/45375) for details and alternatives.

PowerShell惯用的解决方案如下所示:

代码语言:javascript
复制
$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),允许您直接访问该对象上感兴趣的属性。运算符用于合成所需格式的输出字符串。

样本输出:

代码语言:javascript
复制
56204 bash Started 8/18/2022 2:15:25 PM
56245 bash Started 8/18/2022 2:15:28 PM
票数 2
EN

Stack Overflow用户

发布于 2022-08-18 18:20:28

为我自己的问题找到了答案。如果其他人想知道为什么会发生这种情况,这在这篇文章中已经解释过了。

如何存储格式表的输出以供以后使用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73407561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档