Powershell脚本foreach($x in$y)工作不正常
在远离PowerShell太久之后,我只是写了一些基本的脚本,我有点被困在这里了。试图将多个参数传递给函数中的单个“参数”,但它只会返回字符串中的第一个值Powershell脚本foreach($x in$y)工作不正常,powershell,automation,Powershell,Automation,在远离PowerShell太久之后,我只是写了一些基本的脚本,我有点被困在这里了。试图将多个参数传递给函数中的单个“参数”,但它只会返回字符串中的第一个值 #-------------------------------- # Returns logged on user of machine(s) given in parameter #-------------------------------- function Get-UserLogged{ param($computerNa
#--------------------------------
# Returns logged on user of machine(s) given in parameter
#--------------------------------
function Get-UserLogged{
param($computerName)
foreach ($computer in $computerName) {
return (query user /server:$computerName)
}
}
现在如果我调用函数并运行,例如
Get-UserLogged Server01 Server02 Server03
它将只返回服务器1的输出,因此foreach似乎没有按预期工作
同一问题的不同脚本:
function p{
param($computerName)
foreach ($computer in $computerName) {
return (test-connection $computer -Count 1)
}
}
如果我跑步:
p localhost, google.com, bbc.com
它只会尝试在循环中引用数组
$computerName
,而不是“当前项”$computer
function Get-UserLogged{
param($computerName)
foreach ($computer in $computerName) {
query user /server:$computer
}
}
要将字符串数组传递给参数,请使用逗号分隔项目:
Get-UserLogged -computerName Server01, Server02, Server03
谢谢,那么参数在默认情况下是一个数组,还是在不带空格的字符串的情况下成为数组?我的印象是,默认情况下,它是一个字符串,如果你在它前面加上@it,那么它就是一个数组。它是由逗号组成的数组。您尚未在
param()
-部分中为参数指定类型,因此当它是单个单词时(如果值中有空格,则将其引用),powershell会将其设置为字符串。如果使用了-computerName 1
,则它将是一个int
。在引用当前项而不是数组后,实际上仍然存在相同的问题。无法测试Get UserLogged,因为我家里没有任何服务器,但我尝试了另一个脚本:(将代码粘贴到原始帖子中,因为不确定注释格式)$computer
无法工作,因为您调用它时没有逗号。因此,只有Server1
被传递到您的“数组”$computerName
Server02
和Server03
作为未捕获的参数转到参数数组$args
。我的答案是由两部分组成的:)我相信我已经解决了这两个问题,但仍然得到了相同的结果,请参见顶部帖子中的编辑。谢谢你的帮助,我不知道为什么我觉得这么难,需要去买一本初学者的书我想这是什么类型的?Server01 Server02 Server03无论默认值是什么,我确实尝试将参数设置为字符串和数组,但得到了相同的结果您不应该使用return语句。Return告诉PowerShell退出当前函数/脚本。相反,当您想要返回多个值时,只需调用将生成这些值的命令(例如,在上面的示例中,删除return语句和圆括号)。另外,在第一个示例中,foreach语句中的命令使用$computerName(传入的集合),而不仅仅是$computer(foreach循环的当前迭代中当前正在处理的项)。改变这两件事,你的状态就会好得多。@KirkMunro我不知道你从哪里得到的。这是一种回归的方式,但不是唯一的方式。Return可用于从函数返回值,而不会出现问题或退出脚本。@KirkMunro我不知道删除“Return”的原因,但它解决了问题。。。谢谢你的帮助