获取进程属性以显示其开始

时间:2018-02-09 19:01:15

标签: powershell

这里有3个问题

  1. 使用True of False语句显示命令finsihed我知道$? 这样做但我可以在1行中进行,即" Get-Process |获得会员 $"
  2. 哪个get-process属性会显示一个进程已启动,就是这样 与New-Timespan一样使用?
  3. 如何使用get help查看Get-Process和New-Timespan的这些变量?

1 个答案:

答案 0 :(得分:0)

作为一名IT / Dev教育工作者,我一直看到学生们在课堂上一直存在这种困惑。首先,由于先入为主的想法,或者他们可能已经咬掉了他们认为的更多,或者他们真的只是没有得到它。

我不确定你会倾向于哪个阵营,但是,根据你所说的一切以及其他人一直试图引导你的方式,这里有一些启发(至少我希望如此)。

  
      
  1. 使用True of False语句显示命令finsihed我知道$?   这样做但我可以在一行中获得它,即“Get-Process | Get-Member $?”
  2.   

不,因为这些是分开的事情。 Get-Process带回了所有正在运行的进程的集合。您不能在集合上使用Get-Member。您可以在单个对象上使用它。

Get-Process | Get-Member $? 

不会返回任何内容,因为您还没有告诉它要检查的集合的哪个进程对象。

Get-Process 


Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    462      27    19756      35460       1.47   9592   1 ApplicationFrameHost
    149       9     1584       6800       0.02   5344   0 armsvc
    298      20    15020      21048   1,312.03   8496   0 audiodg
    484      26    15712      35924       0.38  17584   1 Calculator
    ...

VS

(Get-Process)[0] # Collections and arrays are zero-based

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    462      27    19756      35460       1.47   9592   1 ApplicationFrameHost

或者

Get-Process | Select-Object -First 1


Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    462      27    19756      35460       1.47   9592   1 ApplicationFrameHost

$?只是返回真或假,如果'最后一个命令发出'成功或不成功,而不是之前的任何内容。

# Start a specific process
Start-Process -FilePath notepad.exe 

# Get the specific process object and assign to a variable
($NotepadProcess = Get-Process -Name Notepad)
  
      
  1. 哪个get-process属性会显示一个流程开始......
  2.   

查看这些结果

# Get all the specific process object data
$NotepadProcess | Get-Member


# Get only the properties of the specific object
Get-Content -Path variable:\NotepadProcess | Format-List -Force


Get-Content -Path variable:\NotepadProcess | Select-Object -Property *
  

2 ...这与New-Timespan一样吗?

不直接。如果存储在变量中,则只能将.StartTime属性用作New-TimeSpan cmdlet的一部分,因为在进程运行时不会填充.ExitTime,并且当进程未运行时,显然.ExitTime不可用。

实施例

# Start a specific process
Start-Process -FilePath notepad.exe 

# Get the specific process object and assign to a variable
($NotepadProcess = Get-Process -Name Notepad)

# Get the specific process start time properties
$NotepadProcess.StartTime
$NotepadProcess.WaitForExit() # At this point the process / object is gone
$NotepadProcess.HasExited
$NotepadProcess.ExitCode
$NotepadProcess.ExitTime
  
      
  1. 如何使用get help查看Get-Process的这些变量......
  2.   

您只能从cmdlet / functions的静态帮助文件中获取帮助,

# Get parameters, examples, full and Online help for a cmdlet or function
(Get-Command -Name Get-Process).Parameters
Get-help -Name Get-Process -Examples
Get-help -Name Get-Process -Full
Get-help -Name Get-Process -Online

...不是动态创建的变量。

您通过PSDrive创建的名称查找变量信息, 变量:\如前所示

  

3 ...和New-Timespan?

(Get-Command -Name New-TimeSpan).Parameters
Get-help -Name New-TimeSpan -Examples
Get-help -Name New-TimeSpan -Full
Get-help -Name New-TimeSpan -Online

不,如果存储在变量中,只有.StartTime可用于New-TimeSpan,因为其他与时间相关的属性在运行时为空,在进程终止时消失。您必须使用另一个日期变量来保存开始时间,使用另一个变量来创建和保持结束时间。

例如:

# Start a specific process
Start-Process -FilePath notepad.exe 

# Get the specific process object and assign to a variable
($NotepadProcess = Get-Process -Name Notepad)

# Get the specific process start time properties
($StartTime = $NotepadProcess.StartTime)
$NotepadProcess.WaitForExit()
($EndTime = (Get-Date).DateTime)
($ElaspedTime = New-TimeSpan -Start $StartTime -End $EndTime)

结果

Start-Process -FilePath notepad.exe 

($NotepadProcess = Get-Process -Name Notepad)

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
231      14     3344      17092       0.09   9840   1 notepad



($StartTime = $NotepadProcess.StartTime)

Friday, 9 February, 2018 22:17:25


$NotepadProcess.WaitForExit()

($EndTime = (Get-Date).DateTime)
Friday, 9 February, 2018 22:17:42

($ElaspedTime = New-TimeSpan -Start $StartTime -End $EndTime)

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 16
Milliseconds      : 193
Ticks             : 161932573
TotalDays         : 0.000187421959490741
TotalHours        : 0.00449812702777778
TotalMinutes      : 0.269887621666667
TotalSeconds      : 16.1932573
TotalMilliseconds : 16193.2573

至于......

  

我仍然会像处理这样的命令一样处理Linux中的变量

你正在为这个思考过程注入不必要的压力,紧张和困惑。你需要思考并调整PowerShell的方式才能真正理解它,然后利用你以前的经验尝试在可能的情况下进行混合和匹配..

再次,这......

  

$ promem = Get-Process |获得会员” ......   ......但是这个$ promem也被视为对象你呢?

......错了。至少你的方式/一直在考虑它,因为再次,这是一个集合。使用上面的$ NotepadProcess显示的不是单个对象。

至于......

  

但我的问题是如何在命令完成时使该命令输出true或false语句

Get-Process永远不会失败,因为它的唯一目的是列出正在运行的内容。当然其他事情可能会失败,但这就是验证/错误处理的目的:

If..Then
Try..Catch
Case Select
etc...

只需使用您喜欢的搜索引擎查找PowerShell错误处理。

所有这一切。你真的需要指导你的教练,以确保你明确课程的内容和目标。那么,直接在PowerShell中或通过MS PowerShell Docs站点阅读帮助文件和about_XXX内容。

https://docs.microsoft.com/en-us/powershell