windows - 从命令输出中提取 powershell 中的所需字段
问题描述
我正在编写一个powershell脚本,作为其中的一部分,我需要找出目标机器的Linux风格,并根据我得到的风格,我需要随后执行命令。
要知道 linux 类型,我执行了命令:
cat /etc/os-release
一个示例输出如下所示:
NAME="Red Hat Enterprise Linux Server" VERSION="7.6 (Maipo)" ID="rhel" ID_LIKE="fedora" VARIANT="Server" VARIANT_ID="server" VERSION_ID="7.6" PRETTY_NAME="Red Hat Enterprise Linux服务器 7.6 (Maipo)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:redhat:enterprise_linux:7.6:GA:server" HOME_URL="https://www.redhat.com/" BUG_REPORT_URL="https ://bugzilla.redhat.com/" REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Li nux 7" REDHAT_BUGZILLA_PRODUCT_VERSION=7.6 REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux" REDHAT_SUPPORT_PRODUCT_VERSION="7.6"
我需要获取输出的NAME="Red Hat Enterprise Linux Server"或更具体地说是Red Hat Enterprise Linux Server部分。同样, NAME=部分中的输出可能是 Debian 或 CentOS 或 SUSE 。
如果 $output 是上述输出的全部,我尝试了以下操作:
$output.NAME
$abc = -split $Output; Write-Host $abc[0] + $abc[1]
findstr
Select-String
还有更多的东西
但它们都不起作用。有人可以帮忙吗?
解决方案
正则表达式的一种方法是这样做,另一种方法是使用ConvertFrom-String
可以提供模板的选项。例如。
$Template = 'NAME="{Name:Red Hat Enterprise Linux Server}" VERSION="7.6 (Maipo)" ID="rhel" ID_LIKE="fedora" VARIANT="Server" VARIANT_ID="server" VERSION_ID="7.6" PRETTY_NAME="Red Hat Enterprise Linux Server 7.6 (Maipo)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:redhat:enterprise_linux:7.6:GA:server" HOME_URL="https://www.redhat.com/" BUG_REPORT_URL="https://bugzilla.redhat.com/" REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7" REDHAT_BUGZILLA_PRODUCT_VERSION=7.6 REDHAT_SUPPORT_PRODUCT="Red Hat Eterprise Linux" REDHAT_SUPPORT_PRODUCT_VERSION="7.6"'
$TestData = 'NAME="Red Hat Enterprise Linux Server" VERSION="7.6 (Maipo)" ID="rhel" ID_LIKE="fedora" VARIANT="Server" VARIANT_ID="server" VERSION_ID="7.6" PRETTY_NAME="Red Hat Enterprise Linux Server 7.6 (Maipo)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:redhat:enterprise_linux:7.6:GA:server" HOME_URL="https://www.redhat.com/" BUG_REPORT_URL="https://bugzilla.redhat.com/" REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7" REDHAT_BUGZILLA_PRODUCT_VERSION=7.6 REDHAT_SUPPORT_PRODUCT="Red Hat Eterprise Linux" REDHAT_SUPPORT_PRODUCT_VERSION="7.6"'
$TestData2 = 'NAME="Ubuntu" VERSION="20.04 (Maipo)" ID="debian" ID_LIKE="fedora" VARIANT="Server" VARIANT_ID="server" VERSION_ID="7.6" PRETTY_NAME="Red Hat Enterprise Linux Server 7.6 (Maipo)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:redhat:enterprise_linux:7.6:GA:server" HOME_URL="https://www.redhat.com/" BUG_REPORT_URL="https://bugzilla.redhat.com/" REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7" REDHAT_BUGZILLA_PRODUCT_VERSION=7.6 REDHAT_SUPPORT_PRODUCT="Red Hat Eterprise Linux" REDHAT_SUPPORT_PRODUCT_VERSION="7.6"'
$TestData3 = 'NAME="Centos" VERSION="7.654 (Maipo)" ID="rhel" ID_LIKE="fedora" VARIANT="Server" VARIANT_ID="server" VERSION_ID="7.6" PRETTY_NAME="Red Hat Enterprise Linux Server 7.6 (Maipo)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:redhat:enterprise_linux:7.6:GA:server" HOME_URL="https://www.redhat.com/" BUG_REPORT_URL="https://bugzilla.redhat.com/" REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7" REDHAT_BUGZILLA_PRODUCT_VERSION=7.6 REDHAT_SUPPORT_PRODUCT="Red Hat Eterprise Linux" REDHAT_SUPPORT_PRODUCT_VERSION="7.6"'
$TestData4 = 'NAME="Arch Linux" VERSION="24.6 (Maipo)" ID="rhel" ID_LIKE="fedora" VARIANT="Server" VARIANT_ID="server" VERSION_ID="7.6" PRETTY_NAME="Red Hat Enterprise Linux Server 7.6 (Maipo)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:redhat:enterprise_linux:7.6:GA:server" HOME_URL="https://www.redhat.com/" BUG_REPORT_URL="https://bugzilla.redhat.com/" REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7" REDHAT_BUGZILLA_PRODUCT_VERSION=7.6 REDHAT_SUPPORT_PRODUCT="Red Hat Eterprise Linux" REDHAT_SUPPORT_PRODUCT_VERSION="7.6"'
$TestData,$TestData2,$TestData3,$TestData4 |
ForEach-Object {
$_ |
ConvertFrom-String -TemplateContent $Template
}
输出:
Name
----
Red Hat Enterprise Linux Server
Ubuntu
Centos
Arch Linux
编辑:这是一个正则表达式变体:
$Regex = '.*="(.*)"\sVERSION='
$TestData,$TestData2,$TestData3,$TestData4 |
ForEach-Object {
[void]($_ -match $Regex)
$Matches.1
}
输出:
Red Hat Enterprise Linux Server
Ubuntu
Centos
Arch Linux
推荐阅读
- css - 在 flex 项目中缩放 svg 以匹配 flex 容器的高度并保持纵横比
- css - 如何在 0 秒内转换一个属性,在 1.5 秒内转换所有其他属性
- graphql - graphql中未知对象的模式类型
- java - 如何从我的 servlet 中获取 org.eclipse.jetty.server.Request
- javascript - 如何在 php 中捕获 javascript 请求有效负载
- r - 如何找到数字序列中连续数字的总数
- ios - 无法符号链接到 Catalina 中的 NAS
- javascript - 避免命名函数调用的 Webpack 配置
- google-apps-script - 每天在同一时间进行谷歌日历活动,无需重复活动
- c# - 选择一个随机 XPath 元素