在Powershell cmdlet中提取字符串时不留空格

时间:2019-03-08 10:07:55

标签: string powershell comparison

我有一些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”。如何删除cmdlet get-process -Name totalcmd* | format-wide -property Name输出的多余空格并正确比较字符串?

3 个答案:

答案 0 :(得分:1)

由于用管道输送到<div class="row col-md-12"> <div class="col-md-12"> Votre entité générale :&nbsp;&nbsp; <select data-val="true" data-val-number="The field TypeEntityId must be a number." data-val-range="The field TypeEntityId must be between 1 and 2147483647." data-val-range-max="2147483647" data-val-range-min="1" data-val-required="Vous devez donner un TYPE d'entité" id="TypeEntityId" name="TypeEntityId"> <option value="">Sélectionnez une entité générale</option> <option value="2">Départements &amp; Services centraux</option> <option value="3">Centre de secours</option> <option value="4">Section locale (Bruxelles) </option> <option value="5">Comité Provincial</option> <option value="6">Relais</option> <option value="7">SISU</option> <option value="8">Centre ADA</option> <option value="9">Maison Croix-Rouge</option> </select> <span class="field-validation-valid text-danger" data-valmsg-for="TypeEntityId" data-valmsg-replace="true"></span> </div> </div> <br> <div class="row col-md-12"> <div class="col-md-12"> Votre entité locale :&nbsp;&nbsp; <select data-val="true" data-val-number="The field EntityId must be a number." data-val-range="The field EntityId must be between 1 and 2147483647." data-val-range-max="2147483647" data-val-range-min="1" data-val-required="Vous devez donner une ENTITE" id="EntityId" name="EntityId"><option value="">Sélectionnez une entité locale</option> </select> <span class="field-validation-valid text-danger" data-valmsg-for="EntityId" data-valmsg-replace="true"></span> </div> </div>,所以不会以字符串结尾。这些cmdlet最适合在屏幕上表示数据。而是选择属性,然后使用format-wide将其作为字符串返回:

-ExpandProperty

答案 1 :(得分:1)

您通常认为$ tc不等于“ totalcmd”,这是因为设置$ tc时,您正在创建一个数组(最有可能是一个元素)。您可以通过运行$tc | get-member来测试您正在使用的对象类型。

要使用字符串对象,也可以使用Out-String cmdlet。

答案 2 :(得分:1)

如果要显式停止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"}
}