我有两个功能,但为什么它们不能一起工作?
function OnlineADComputer {
Get-ADComputer -filter {(enabled -eq "True") -and (operatingsystem -like "windows*") -and (operatingsystem -notlike "*server*")} -properties *|sort Name | % {
$rtn = Test-Connection -CN $_.name -Count 1 -BufferSize 16 -Quiet
IF($rtn -match 'True') {
Return $_.dnshostname
}
}
}
function Get-LoggedIn {
[CmdletBinding()]Param(
[Parameter(Mandatory=$True)]
[string[]]$computername
)
ForEach ($pc in $computername){
$logged_in = (gwmi Win32_ComputerSystem -Computer $pc).UserName
$name = $logged_in.split("\")[1]
"{0}: {1}" -f $pc,$name
}
}
Get-LoggedIn OnlineADComputer
- 所以不起作用,为什么?
答案 0 :(得分:0)
当您运行Get-LoggedIn OnlineADComputer
时,PowerShell会将此解释为Get-LoggedIn
的调用,其中包含单个值的数组,即文字OnlineADComputer
。我们可以用一些更简单的函数证明这一点:
Function Func1 {
'Hello!'
}
Function Func2 {
[CmdletBinding()] Param(
[Parameter(Mandatory=$true)][string[]]$text
)
$text | % { $_.ToUpper() }
}
Func2 Func1
返回FUNC1
- PowerShell试图通过让你在没有引号的情况下编写字符串文字来提供帮助。您可以通过将其括在括号中来明确表示要调用Func1
。 Func2 (Func1)
根据需要打印HELLO!
。同样,Get-LoggedIn (OnlineADComputer)
应该根据需要链接您的函数。
有趣的是,PowerShell控制台中的语法突出显示了对命令的解释。在无括号的版本中,Func1
以白色呈现,并被解释为文本。在带括号的版本中,它是黄色并解释为命令。