将一个函数变量正确传递给另一个函数?

时间:2021-02-26 04:32:25

标签: powershell scripting

好吧偷看,说我有这样的东西:

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 值为空。我已经调试了它,它确实是空的。如何将一个函数中创建的变量传递给另一个函数?我应该把它们结合起来吗?

1 个答案:

答案 0 :(得分:1)

您需要做的是从函数中返回一些内容并将其作为参数传递给另一个。但是在您的情况下,不需要第一个功能类似这样的东西

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
}

请记住,每个函数都有自己的作用域,并且在函数完成时会清除其中声明的变量