将一个函数变量正确传递给另一个函数?
Passing one functions variable to another function correctly?
好的偷看,说我有这样的东西:
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 值为空。我已经调试过了,它确实是空的。如何将在一个函数中创建的变量传递给另一个函数?我应该把它们结合起来吗?
您需要做的是 return 从函数中提取一些东西并将其作为参数传递给另一个函数。但是在你的情况下,不需要第一个函数像这样
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
}
请记住,每个函数都有自己的范围,并且在函数完成时会清除其中声明的变量
好的偷看,说我有这样的东西:
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 值为空。我已经调试过了,它确实是空的。如何将在一个函数中创建的变量传递给另一个函数?我应该把它们结合起来吗?
您需要做的是 return 从函数中提取一些东西并将其作为参数传递给另一个函数。但是在你的情况下,不需要第一个函数像这样
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
}
请记住,每个函数都有自己的范围,并且在函数完成时会清除其中声明的变量