Извлечь строку без пробелов в PowerShell - PullRequest
0 голосов
/ 08 марта 2019

У меня есть сценарий powershell.Вместо totalcmd * вы можете ввести другой процесс, который хотите.

$tc = get-process -Name totalcmd* | format-wide -property Name 
echo $tc
if ($tc -eq "Totalcmd64")
{
Stop-Process -Name totalcmd*
}
Start-Sleep 10

Я думаю, он не работает, потому что мой $ tc не равен строке "totalcmd".Как удалить ненужные пробелы в выводе командлета get-process -Name totalcmd* | format-wide -property Name и правильно сравнить строки?

Ответы [ 3 ]

1 голос
/ 08 марта 2019

Как правило, вы правы, что $ tc не равен "totalcmd", и это потому, что когда вы устанавливаете $ tc, вы создаете массив (скорее всего, из одного элемента). Вы можете проверить это, запустив $tc | get-member, чтобы увидеть, с каким объектом вы работаете.

Для работы со строковыми объектами вы также можете использовать командлет Out-String.

1 голос
/ 08 марта 2019

Если вы хотите явно остановить процессы TotalCmd64, почему бы просто не использовать:

Get-Process -Name TotalCmd64 | Stop-Process

Если вы хотите переключаться между 64/32-битными версиями программы, используйте оператор switch (не проверено):

$tc = (Get-Process -Name TotalCmd*).Name
switch ($tc){
    'TotalCmd'   {Get-Process -Name TotalCmd  |Stop-Process;"Start TotalCmd64";Break}
    'TotalCmd64' {Get-Process -Name TotalCmd64|Stop-Process;"Start TotalCmd32";Break}
    default      {"No TotalCmd* processes found"}
}
1 голос
/ 08 марта 2019

Строка не заканчивается, потому что вы передаете format-wide. Эти командлеты лучше всего подходят для представления данных на экране. Вместо этого выберите свойство и используйте -ExpandProperty, чтобы вернуть его в виде строки:

$tc = get-process -Name totalcmd* | Select-Object -ExpandProperty Name 
echo $tc
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...