#string #powershell #comparison
#строка #powershell #сравнение
Вопрос:
У меня есть некоторый скрипт 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
и правильно сравнить строки?
Комментарии:
1. Если в конечном итоге будет запущено более одного процесса, который начинается с «totalcmd», то ваша инструкция «if» никогда не примет значение true, потому что объект array
$tc
никогда не будет равен объекту string «Totalcmd64».
Ответ №1:
В конечном итоге строка не получается, потому что вы передаете в format-wide
. Эти командлеты лучше всего подходят для представления данных на экране. Вместо этого выберите свойство и используйте -ExpandProperty
, чтобы вернуть его в виде строки:
$tc = get-process -Name totalcmd* | Select-Object -ExpandProperty Name
echo $tc
...
Ответ №2:
В целом вы правы в том, что $ tc не равно «totalcmd», и это потому, что когда вы устанавливаете $ tc, вы создаете массив (скорее всего, из одного элемента). Вы можете проверить это, выполнив $tc | get-member
, чтобы увидеть, с каким типом объекта вы работаете.
Для работы со строковыми объектами вы также можете использовать Out-String
командлет.
Ответ №3:
Если вы хотите явно остановить процессы 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. Возможно, вы правы. В глобальном масштабе мне нужен скрипт для перезапуска Totalcmd64.exe для Totalcmd.exe и наоборот.
2. Смотрите расширенный ответ для переключения между 64/32-разрядными версиями.