【问题标题】:Extract word or digit from command or PowerShell output从命令或 PowerShell 输出中提取单词或数字
【发布时间】:2018-12-17 16:32:41
【问题描述】:

正在创建大量脚本以从 PC 收集数据。我需要一些帮助来使用“最简单”的方法提取相关数据。我只需要一个方法/概念/想法,我们将适用于其余部分。这里有3个例子

  1. Ping Avg MS 响应:ping 的输出将显示如下结果:“最小值 = 3 毫秒,最大值 = 8 毫秒,平均值 = 4ms”。我需要提取不带“ms”的平均数并将输出重定向到文件(>PingAvg.txt)。最终结果是输出文件中只有一个“4”。

  2. WMI AV 输出:运行“Get-WmiObject”PowerShell,如下所示。我只需要提取名称 (displayName) 或状态,并将输出重定向到文件 (>AvStats.txt)。最终结果是输出文件仅包含 AV 产品的名称“Windows Defender”或仅包含状态“393472

PS C:\> Get-WmiObject -Namespace ROOT\SecurityCenter2 -Query "SELECT * FROM AntiVirusProduct" | Select-Object * -ExcludeProperty PSComputerName, Scope, Path, Options, ClassPath, Properties, SystemProperties, QualifiersSite, Container | Format-List -Property [a-z]

displayName              : Windows Defender
instanceGuid             : {D68DDC3A-831F-4fae-9E44-DA132C1ACF46}
pathToSignedProductExe   : %ProgramFiles%\Windows Defender\MSASCui.exe
pathToSignedReportingExe : %ProgramFiles%\Windows Defender\MsMpeng.exe
productState             : 393472
timestamp                : Mon, 23 Oct 2017 14:12:56 GMT
  1. 获取修补的最后日期:powershell 命令和输出将如下所示。我想只获取数据并将输出重定向到文件(> LastPatch.txt)。输出文件应仅包含日期“9/25/2018

PS C:> (get-hotfix | sort installedon)[-1] | Select-Object InstalledOn

已安装

2018 年 9 月 25 日上午 12:00:00

【问题讨论】:

  • 这是非常基本的东西,到目前为止您尝试过什么? => Get-Help Select-Object 参见 -ExpandProperty,或将命令括在括号中并在属性后面附加一个点。
  • 正如@LotPings 已经说过的那样:尝试使用像这样的点来获取您想要的属性:($conn.ResponseTime | Measure-Object -Average).Average 其中$conn 包含您的Test-Connection 的结果或尝试(Get-HotFix).InstalledOn 以获得修补程序日期

标签: powershell command-line


【解决方案1】:

在第 1 步试试这个:

(((ping localhost | Select-String "Average") -split "Average = ")[1] -split "ms")[0] | out-file PingAvg.txt

第 2 步:

(Get-WmiObject -Namespace ROOT\SecurityCenter2 -Query "SELECT * FROM AntiVirusProduct" | Select-Object displayName | ft -HideTableHeaders | out-string).trim() | out-file AvStats.txt

产品状态的OR

(Get-WmiObject -Namespace ROOT\SecurityCenter2 -Query "SELECT * FROM AntiVirusProduct" | Select-Object productState | ft -HideTableHeaders | out-string).trim() | out-file AvStats.txt

第 3 步:

((get-hotfix | sort installedon)[-1] | Select-Object InstalledOn | ft -HideTableHeaders | out-string).trim() | out-file LastPatch.txt

请分享您的反馈。如果有帮助,请务必将其标记为答案。

【讨论】:

  • 感谢 LT!这正是我一直在寻找的,并为我们提供了一些很棒的概念和思考的食物。关于 Get-Hotfix 命令的快速问题。如果我们希望修补程序日期只包含不包含时间的日期怎么办。你能指定时间格式和/或拆分吗?
  • 只是好奇:你为什么使用 ping 和解析文本数据而不是使用返回对象的内置 Test-Connection 命令?
  • Bluuf,我可以,正如 Razorfen 建议的那样。我在想使用单个命令获取数据可能会更容易,而不是创建变量($conn)然后评估变量。尽管如此,正如你所看到的,我不是这方面的专家。我什至设法让我的问题被否决...
  • 嗨@Joe。这是你可以做的只是得到日期。使用空格分割:(((get-hotfix | sort installedon)[-1] | Select-Object InstalledOn | ft -HideTableHeaders | out-string).trim() -split ' ')[0] 请点赞,别忘了标记为答案。
  • 谢谢 LT。完美运行!如果可以的话,最后一个问题。如果返回两行,“productState”查询不会修剪前导空白。所以我在屏幕最右边的第 1 行“331776”(正确修剪),然后在屏幕最左边的第 2 行“393472”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 2015-01-04
  • 1970-01-01
相关资源
最近更新 更多