2017-02-24 46 views
2

可以說,我想要做這樣的事情:獲取所創建的字符串長度動態

$string = 'arbitrary string' # << is random 
(Do-Something -Name ($string + (Get-Random)).Substring(0, [math]::Min(20, ??) 

如何我指的是內部($string + (Get-Random))表達式的結果,目前的長度是多少?

使用Substring(0, 20)當失敗時的字符串超過20個字符

異常呼叫「串」與「2」的參數(一個或多個)短:「索引和長度 必須引用位置的字符串內參數名稱:長度」

回答

4

你必須要分配新的字符串變量:

Do-Something -Name ($s = $string + (Get-Random)).Substring(0, [math]::Min(20,$s.Length)) 

上述的一個不太簡潔版本:

$Name = $string + (Get-Random) 
if($Name.Length -gt 20){ 
    $Name = $Name.Substring(0, 20) 
} 
Do-Something -Name $Name 

正如在評論中提到,你也可以從字符串選擇第20個字符的指標,並與運營商-join再次結合(V3.0及更高版本):

$Name = "$string$(Get-Random)"[0..19] -join '' 

感覺活潑?使用正則表達式(如suggested by wOxxOm):

$Name = "$string$(Get-Random)" -replace '^(.{20}).+','$1' 

如果連接字符串少於20個字符,什麼也不會更換,否則整個字符串匹配並獲得通過前20個字符

另一種方法是更換 - 產生的X位,其中X爲20的隨機數$string.Length(如果$string是保證字符2和19之間的長只適用):

$Name = "$string$(Get-Random -Min ('1' * (20 - $string.Length)) -Max ('9' * (20 - $string.Length)))" 
+0

好,我壓根沒想到這個 – 4c74356b41

+0

@ 4c74356b41現在你呢:-) –

+0

順便說一句,有沒有其他的方式,這似乎有點hackish? ;) – 4c74356b41