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"
答案 0 :(得分:2)
你所拥有的只是一个碰巧包含变量(扩展)的字符串。在字符串中,您在表达式模式下不,因此您无法使用运算符。他们只是像你在那里看到的那样嵌入字符串内容。你想要的可能是:
$a = -join $Computername[1..3]
但这不正确,因为它会为计算机名oob
产生Foobar
。如果你想要前三个字母,你需要
$a = -join $Computername[0..2]
甚至更简单(更容易阅读,更快):
$a = $Computername.Substring(0, 3)
P.S。:我也冒昧地重新格式化你的原始代码,这是一个可怕的混乱阅读。