LoginSignup
0
3

More than 5 years have passed since last update.

PowershellでCollection返すFunction作ったら返り値変わってびっくりしたのでメモ

Posted at

何か返り値がおかしい

  • ADのグループメンバーを対応表をもとに別のADのユーザーに変換するのをつくってた
function convertToAnotherGroupMembers ($groupName) {
    $resurt = New-Object System.Collection.ArrayList
    foreach ($member in (Get-ADGroupMember $groupName)) {
        if (($convertMember = (対応表で変換する処理) -ne $null) {
            $result.Add($convertMember)
        }
    }
    return $result
}

$converGroupMembers = convertToAnotherGroupMembers("groupA");

  • 結果みてみたら0とか1とか入ってた
> $converGroupMembers
0
1
user1のAD情報
...
  • ステップ実行してみたらreturn直前のときにはそんなもん入ってなかった。funcrionから抜けたときに変換されてるみたい

  • 調べてると数字部分はMemberの数だけ入ってることが分かった。つまりArrayList.Addの戻り値

  • そーいえば実行してるときにAddメソッドしたらコンソールに0とか1とかでてたなと思いだす。

  • functionでCollectionを返却するとストリームまで返却されるらしい。

解決策

  • ストリームにださなきゃいい
  • [void]つければ戻り値いらないと判断されストリームにもでなくなる
  • ちなみにクラスのreturnはそのまま返すらしい。パイプのため?
function convertToAnotherGroupMembers ($groupName) {
    $resurt = New-Object System.Collection.ArrayList
    foreach ($member in (Get-ADGroupMember $groupName)) {
        if (($convertMember = (対応表で変換する処理) -ne $null) {
            [void]$result.Add($convertMember)
        }
    }
    return $result
}

$convertGroupMembers = convertToAnotherGroupMembers("groupA");

---
> $convertGroupMembers
user1AD情報
user2AD情報
...

Powershell でちゃんとコーディングしようとするとスーパー辛い、せめてC#で書かせろ

  • まぁ便利なんだけど・・・
0
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3