Извлечь слово из вывода powershell Search-String - PullRequest
0 голосов
/ 05 октября 2018

Привет всем Я пытаюсь извлечь слово из текстового вывода.Это должно быть довольно легко, но я уже потратил на это столько времени.Прямо сейчас я могу извлечь строку, а не только слово.

Например,

w32tm /query /status | Select-String -pattern "CMOS"

выводит строку "Источник: локальные часы CMOS"

Я хочу толькоИзвлечь "Локальные часы CMOS"

$var1=w32tm /query /status | Select-String -pattern "CMOS"

$var2=($var1 -split ':')[1] | Out-String

Мне удалось придумать выше, это, кажется, работает, я не уверен, есть ли лучший способ, я пытаюсь оценить его через истинный /Кажется, что false всегда передается как true, например

if($var2 = "Local CMOS Clock"){
Write-Output "True";
}Else{
Write-Output "False";
}

Всегда true: даже при неправильном условии

заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

вот еще один способ получить False / True от w32tm.моя система не имеет «cmos» в выводе, поэтому я использую «системные часы», но идея подойдет для вашей ситуации.

[bool]((w32tm /query /status) -match 'system clock')

вышеизложенное возвращает $True в моей системе.это кажется немного более прямым, чем метод, который вы использовали.[ ухмылка ]

береги себя,
ли

0 голосов
/ 05 октября 2018

Я не совсем уверен в ваших мотивах, но вот более чистый способ получить ответ, который вы ищете:

Создайте PSObject, содержащий выходные данные

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

Просто запустите это, чтобы отобразить новый PSObject, который был создан:

$w32_obj

Теперь проверьте 'Source'

Теперь мы можем запросить объект 'Source' из $w32_obj с использованием точечной нотации: $w32_obj.Source:

if($w32_obj.Source -eq "Local CMOS Clock"){
Write-Output "True";
}Else{
Write-Output "False";
}

Дальнейшее чтение

Здесь показано преобразование из HashTable в PSobject и наоборот

PSCustomObject to Hashtable

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...