【问题标题】:Remove top line of output PowerShell删除输出 PowerShell 的第一行
【发布时间】:2022-08-10 01:08:51
【问题描述】:

我正在尝试获取会话 ID,但下面的输出给了我 ID 列名称。如果我使用 match 它会给我正确的值,因为输出似乎没有列名。

如何删除第一行以便我可以获取 IDs 值?

$sessionID = ( (quser | Where-Object { $_ -notmatch \'username\' } ) -split \' +\')[3]

logoff $sessionID

  • Where-Object 语句是否应该删除第一行?还是试图过滤掉特定用户?
  • 你可以使用这个函数来简化它:Get-QUser。将QUser.exe 结果转换为您可以使用的对象,因此您可以执行以下操作:$sessionID = Get-QUser,然后引用 ID$sessionID.ID

标签: php arrays windows powershell


【解决方案1】:

假设您的用户名不包含空格(如果有,那将是非常不寻常的):

获取ID第一的quser 列出的用户会话:

(-split (quser)[1])[2]

要得到全部用户会话 ID:

quser | Select-Object -Skip 1 | ForEach-Object { (-split $_)[2] }

如果您希望提取的 ID 为数字.


至于你尝试了什么

您的方法的唯一直接问题是使用索引[3] 而不是[2] - 因为数组索引是基于0,所以需要[2] 来检索第三元素,即Id 字段。

但是,与其使用-match 操作来跳过标题行,不如简单地跳过第一的行,如上图:

  • (quser)[1] 返回第二仅行,即第一行数据线。

  • 同样,Select-Object -Skip 1 跳过第一个输入对象,即标题行(PowerShell 逐行流式传输外部程序的(stdout)输出)。

一元顶部使用的-split operator 的形式是一种方便的方法,可以通过非空的空白运行(忽略前导和尾随空白)进行拆分。

【讨论】:

  • 谢谢我用((quser | Where-Object { $_ -notmatch 'username' } | Select-Object -Skip 1)-split ' +')[2]
猜你喜欢
  • 2020-10-31
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多