让我们说我想做这样的事情:
$string = 'arbitrary string' # << is random
(Do-Something -Name ($string + (Get-Random)).Substring(0, [math]::Min(20, ??)
如何引用($string + (Get-Random))
内表达式结果的当前长度?
当字符串短于20个字符
时使用Substring(0, 20)
时失败
异常调用&#34;子串&#34;用&#34; 2&#34;参数:&#34;索引和长度 必须引用字符串中的位置。参数名称:长度&#34;
答案 0 :(得分: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)))"