嗨,我正在尝试从文本输出中提取一个单词。这应该很容易,但是我已经花了很多时间了。现在,我可以提取一行,而不仅仅是单词。
例如
w32tm /query /status | Select-String -pattern "CMOS"
输出行 “来源:本地CMOS时钟”
我只想提取“本地CMOS时钟”
$var1=w32tm /query /status | Select-String -pattern "CMOS"
$var2=($var1 -split ':')[1] | Out-String
我能够提出上述建议,但似乎行得通。我不确定是否有更好的方法,我试图通过对/错进行评估,尽管看起来总是正确 例如
if($var2 = "Local CMOS Clock"){
Write-Output "True";
}Else{
Write-Output "False";
}
始终为真:即使条件不正确
提前谢谢。
答案 0 :(得分:0)
我不确定您的动机,但这是获得所需答案的一种更简洁的方法:
PSObject将包含w32tm的输出。该代码通过循环输出命令输出来工作,首先我们创建一个HashTable,然后将其用于构建易于操作的PowerShell对象:
# Pipe the w32tm command through a foreach
# Build a hashtable object containing the keys
# $_ represents each entry in the command output, which is then split by ':'
$w32_obj = w32tm /query /status | ForEach-Object -Begin {$w32_dict = @{}} -Process {
# Ignore blank entries
if ($_ -ne '') {
$fields = $_ -split ': '
# This part sets the elements of the w32_dict.
# Some rows contain more than one colon,
# so we combine all (except 0) the split output strings together using 'join'
$w32_dict[$fields[0]] = $($fields[1..$($fields.Count)] -join ':').Trim()
}
} -End {New-Object psobject -Property $w32_dict}
只需运行以下命令即可显示已创建的新PSObject:
$w32_obj
现在,我们可以通过使用点符号$w32_obj
从$w32_obj.Source
中请求“源”对象:
if($w32_obj.Source -eq "Local CMOS Clock"){
Write-Output "True";
}Else{
Write-Output "False";
}
这显示了从HashTable到PSobject的转换,反之亦然
答案 1 :(得分:0)
这是从w32tm获取错误/真实的另一种方法。我的系统在输出中没有“ cmos”,因此我使用“系统时钟”,但是这个想法将适合您的情况。
[bool]((w32tm /query /status) -match 'system clock')
以上内容在我的系统上返回了$True
。这似乎比您使用的方法更直接。 [咧嘴]
保重,
李