我認為這個問題已經被問過了,盡管我進行了各種搜索,但我真的找不到答案。
我從服務器獲取 WSUS 組,并將資料集成到一個變數中。我想洗掉此變數中的特定行。
例如,虛構腳本的一部分:
Write-Output "Delete start"
$Var = ("one", "two", "three", "four")
$Var
$Var_end = $Var.Remove("two")
Write-Output "Delete end"
$Var_end
我想洗掉這兩個值,以便腳本的其余部分可以檢索我的變數中的內容,而無需檢索這兩個值或傳遞一個空行(正如我已經設法做到的那樣)
我已經嘗試了幾個功能,在不同的方向,但沒有什么可做的我也嘗試了這個功能
$Var_end = $Var | select -skip 1
但這不是我要找的,因為它作為一個函式看起來并不干凈,如果值發生變化,我將不得不在之后調整腳本
uj5u.com熱心網友回復:
洗掉陣列中項的慣用解決方案是使用 PowerShell 的管道和Where-Object
cmdlet 過濾原始集合并通過將結果分配給變數來創建新集合:
$list = 'one','two','three','four'
$filteredList = $list |Where-Object { $_ -ne 'two' }
但是在這種情況下,我們希望排除一個精確值,您也可以在過濾模式下使用比較運算子:
$filteredList = @($list) -ne 'two'
PowerShell 將識別出操作的左側-ne
是一個可列舉的集合,并將-ne
作為過濾器應用,為您提供與使用Where-Object
.
請注意,這兩個選項都不能保證結果是陣列 - 為此,您需要將整個陳述句包裝在 中@(...)
,或者強烈鍵入接收變數:
$filteredList = @( ... )
# or
[array]$filteredList = ...
uj5u.com熱心網友回復:
您已經得到了一個有用的答案,它顯示了在 PowerShell 中解決問題的正常方法。
至于你嘗試過的:
$Var = ("one", "two", "three", "four") $Var_end = $Var.Remove("two")
雖然 anArray
有一個 method Remove()
,但它是非功能性的,因為陣列是固定大小的。因此,要更改 an 的大小,Array
您必須創建一個所需大小的新陣列,并將舊陣列中的元素復制到新陣列中。Remove()
甚至可以解釋該方法存在,因為Array
該類實作了介面。IList
.NET 框架確實提供了可動態調整大小的資料結構,在大多數情況下其行為類似于陣列。其中之一是類:List
$var = [Collections.Generic.List[object]] ("one", "two", "three", "four")
$null = $var.Remove("two")
該方法就地Remove()
修改$var
物件。分配到避免隱式輸出我們不感興趣的方法的結果(它是指示是否找到該專案)。$null
boolean
雖然該方法有效,但大多數情況下它并不需要并且只會使代碼復雜化,因為它適用于 PowerShell 慣用語。正如Mathias 的回答所解釋的那樣,使用 PowerShell 的過濾功能,我們可以撰寫更簡潔的代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/497378.html