何か返り値がおかしい
- 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
user1のAD情報
user2のAD情報
...
Powershell でちゃんとコーディングしようとするとスーパー辛い、せめてC#で書かせろ
- まぁ便利なんだけど・・・