0
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"

4

1 回答 1

2

您所拥有的只是一个恰好包含一个变量(已扩展)的字符串。在字符串内部,您处于表达式模式,因此您不能使用运算符。他们只是得到嵌入的字符串内容,就像你在那里看到的那样。你想要的可能是:

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

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

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

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

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

PS:我还冒昧地重新格式化了您的原始代码,读起来真是一团糟。

于 2013-09-06T06:56:30.493 回答