-join运算符用于参数的变量

时间:2013-09-06 06:42:42

标签: powershell powershell-v3.0 powershell-remoting

function Get-Diskinfo {
    param(
        [string[]] $Computername = 'XEUTS001',
        [string[]] $drive = 'c:'
    )

    $a = "-join $Computername[1..3]" 

    Get-WmiObject Win32_LogicalDisk `
            -Filter "DeviceID = '$drive'" `
            -ComputerName $Computername `
            -Credential (Get-Credential -Credential ayan-$a) |
        Select-Object `
            @{n='Size'; e={$_.size / 1gb -as [int]}},
            @{n='free';e={$_.freespace / 1gb -as [int]}},
            @{n='% free';e={$_.freespace / $_.size *100 -as [int]}} |
        Format-Table -AutoSize 
}

我写了这个函数来获取有关特定磁盘的一些细节。但是,我必须在多域环境中远程运行它们。我们为不同OU中的计算机提供了不同的用户名。我希望脚本能够从计算机名本身获取用户名。用户名采用此格式---- "name"+ "first 3 letters of the computername",即OU名称。我能够使-Join方法正常工作。但是,如果变量是函数中的参数,则它不起作用。在我希望它显示为"ayan--join xeuts001[1..3]"

时,用户名显示为"ayan-xeu"

1 个答案:

答案 0 :(得分:2)

你所拥有的只是一个碰巧包含变量(扩展)的字符串。在字符串中,您在表达式模式下,因此您无法使用运算符。他们只是像你在那里看到的那样嵌入字符串内容。你想要的可能是:

$a = -join $Computername[1..3]

但这不正确,因为它会为计算机名oob产生Foobar。如果你想要前三个字母,你需要

$a = -join $Computername[0..2]

甚至更简单(更容易阅读,更快):

$a = $Computername.Substring(0, 3)

P.S。:我也冒昧地重新格式化你的原始代码,这是一个可怕的混乱阅读。