Function 如何使用Powershell创建函数

Function 如何使用Powershell创建函数,function,powershell,adgroup,Function,Powershell,Adgroup,我需要以下代码的帮助。我希望脚本执行以下操作:提示用户输入广告组名,如果找到组名,则将组成员导出到CSV文件。其中一个要求是我必须包含一个函数语句。先谢谢你 如果我使用如下示例所示的变量:$groupsusers=Get-ADGroup-Identity$nameofgroup,而不是function语句,则代码可以工作。 但是,我不想使用变量,我想实现一个函数语句 $prompt = "Enter A Group Name" do { $nameofgroup = Read-Host $pro

我需要以下代码的帮助。我希望脚本执行以下操作:提示用户输入广告组名,如果找到组名,则将组成员导出到CSV文件。其中一个要求是我必须包含一个函数语句。先谢谢你

如果我使用如下示例所示的变量:$groupsusers=Get-ADGroup-Identity$nameofgroup,而不是function语句,则代码可以工作。 但是,我不想使用变量,我想实现一个函数语句

$prompt = "Enter A Group Name"
do
{
$nameofgroup = Read-Host $prompt
}
until(!$(dsquery Group-Object $nameofgroup; $prompt = "Group 
'$nameofgroup' was not found, try again"))

$nameofgroup = Read-Host $prompt

function GetGroupInfoToCsv (#what parameters go here?){

ForEach-Object{

$settings = @{ Group = $_.DistinguishedName; Member = $null }
$_| Get-ADGroupMember |
ForEach-Object{
    $settings.Member = $_.DistinguishedName
    New-Object PsObject -Property $settings
}

}

}

GetGroupInfoToCsv | Export-Csv .\GroupMembers.csv -NoTypeInformation

您可以将请求用户输入和返回信息合并到同一个函数中。大概是这样的:

function Get-GroupMembers {
    $prompt = "Enter A Group Name. Press Q to quit"
    # create an endless loop
    while ($true) {
        Clear-Host
        $answer = Read-Host $prompt
        # if the user has had enough, exit the function
        if ($answer -eq 'Q') { return }

        # try and find one or more AD groups using the answer as (part of) the name
        $group = Get-ADGroup -Filter "Name -like '*$answer*'"
        # if we have found something, exit the while loop and start enumerating the members
        if ($group) { break }

        $prompt = "Group '$answer' was not found, try again. Press Q to quit"
    }

    # you only get here if Get-ADGroup found one or more groups
    $group | ForEach-Object {
        # output a PSObject with the properties you are after
        $members = $_ | Get-ADGroupMember
        foreach ($member in $members) {
            [PsCustomObject]@{
                'Group'  = $_.DistinguishedName
                'Member' = $member.DistinguishedName
            }
        }
    }
}

# call the function
$groupinfo = Get-GroupMembers
# test if the function returned anything. 
# the user could have cancelled of the group had no members to output
if ($groupinfo) {
    Write-Host "Adding $($groupinfo.Count) items to the CSV file"
    # without -Append, you would overwrite your CSV file..
    $groupinfo | Export-Csv .\GroupMembers.csv -NoTypeInformation -Append
}
else {
    Write-Host 'Nothing found..'
}

如您所见,我已更改了函数名,使其符合PowerShell中的约定。

您的代码没有任何意义。。。至少有一部分根本不会运行。您希望函数做什么?你有没有工作代码放在函数中?Theo,谢谢你为我的初始问题提供了知识/解决方案。您的代码执行得非常完美。问题:如何实现这一行或类似的内容:在脚本要求输入组名之前获取ADgroup-filter*| sort name | select name?提前感谢。@20您可以将这一行放在函数的最顶端:
$allgroups=Get-ADGroup-Filter*
,然后在While循环中更改
$group=Get-ADGroup-Filter“Name-like'*$answer*'”
到:
$group=$allgroups | Where对象{$..Name-like'*$answer*$code}