如何解决将一个函数变量正确传递给另一个函数?
好吧偷看,说我有这样的东西:
Function Get-Reports {
# Get managers direct report,calls function above
$DirectReports = Get-DirectReport $Manager -norecurse | Select-Object samAccountName
if ($null -ne $DirectReports) {
#$LogLine = "Gathering direct reports for " + $Manager
#Log-Write -LogPath $sLogFile -LineValue $LogLine
} else {
$LogLine = $Manager + " has no reports."
#Log-Write -LogPath $sLogFile -LineValue $LogLine
#Continue
}
}
Function Set-RTGmembers {
# Get manager's 'report to <manager>' group again to update members
$managerReportToGroup = Get-ADGroup -SearchBase $ou -Filter "Name -like 'Report to $Manager'"
if ($managerReportToGroup) {
Add-ADGroupMember -identity $managerReportToGroup.Name -members $DirectReports
Add-ADGroupMember -identity $managerReportToGroup.name -members $Manager
$LogLine = "Report to " + $Manager + " updated."
#Log-Write -LogPath $sLogFile -LineValue $LogLine
} else {
$LogLine = "Could not find group for " + $Manager
#Log-Write -LogPath $sLogFile -LineValue $LogLine
}
}
Foreach ($manager in $managers) {
Get-Reports
Set-RTGmembers
}
我收到一条错误消息,指出 Add-ADGroupMember 的 -members $DirectReports 值为空。我已经调试了它,它确实是空的。如何将一个函数中创建的变量传递给另一个函数?我应该把它们结合起来吗?
解决方法
您需要做的是从函数中返回一些内容并将其作为参数传递给另一个。但是在您的情况下,不需要第一个功能类似这样的东西
Function Set-RTGmembers {
Param(
$Reports,[string]$Manager,[string]$OU
)
# Get manager's 'report to <manager>' group again to update members
$managerReportToGroup = Get-ADGroup -SearchBase $OU -Filter "Name -like 'Report to $Manager'"
if ($managerReportToGroup) {
Add-ADGroupMember -identity $managerReportToGroup.Name -members $Reports
Add-ADGroupMember -identity $managerReportToGroup.name -members $Manager
$LogLine = "Report to " + $Manager + " updated."
#Log-Write -LogPath $sLogFile -LineValue $LogLine
} else {
$LogLine = "Could not find group for " + $Manager
#Log-Write -LogPath $sLogFile -LineValue $LogLine
}
}
$ou = 'SomeOUName'
Foreach ($manager in $managers) {
$DirectReports = $null #This is to make sure if the Get-DirectReport fails on the last loop,it won't use the last set value
$DirectReports = Get-DirectReport $manager -norecurse | Select-Object samAccountName
if ($null -ne $DirectReports) {
#$LogLine = "Gathering direct reports for " + $Manager
#Log-Write -LogPath $sLogFile -LineValue $LogLine
} else {
$LogLine = $manager + " has no reports."
#Log-Write -LogPath $sLogFile -LineValue $LogLine
Continue
}
Set-RTGmembers -Reports $DirectReports -Manager $manager -OU $ou
}
请记住,每个函数都有自己的作用域,并且在函数完成时会清除其中声明的变量
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。