簡體   English   中英

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

[英]Extract string without spacing in powershell cmdlet

我有一些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 get-process -Name totalcmd* | format-wide -property Name輸出並正確比較字符串?

您不會以字符串結尾,因為您通過管道傳遞到format-wide 這些cmdlet最適合在屏幕上表示數據。 而是選擇屬性,然后使用-ExpandProperty將其作為字符串返回:

$tc = get-process -Name totalcmd* | Select-Object -ExpandProperty Name 
echo $tc
...

通常,您認為$ tc不等於“ totalcmd”是正確的,這是因為設置$ tc時,您正在創建一個數組(很可能是一個元素)。 您可以通過運行$tc | get-member $tc | get-member以查看您正在使用哪種對象。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM