1. ホーム
  2. powershell

[解決済み] Get-ADUserとフィルタを含むForEach-Objectループ

2022-02-19 02:59:52

質問

私の会社では、O365のライセンスを処理するスクリプトがあり、現在、次のようなすべてのユーザーに同じ国を割り当てています。

$Location = "US"
$E2Users = Get-ADGroupMember lg.o365.Office | Select SamAccountName
$E2Users | ForEach-Object{
$UPN = $E2Users[$Counter].SamAccountName + "@company.com"
Set-MsolUser -UserPrincipalName $UPN -UsageLocation $Location
##lots of other code

各ユーザーの国を取得し、文字列ではなくそれを使用する必要があります。 正しい国を取得するために、out-putを使用して結果を確認するための小さなテストを設定しましたが、動作させるためにそれを理解することができないようです。 他のフォーラムで$username = $_を見かけ、それを使用しようとしました。

$E2Users = Get-ADGroupMember lg.o365.Office | Select SamAccountName
$E2Users | ForEach-Object{
$username = $_
$Location = Get-ADUSer -filter {samaccountname -like "*$username*"} -properties * | Select country
write-output $Location
}

あるいは、フィルタが必要なのか?下記を使用すると、国の出力が得られますが、各ユーザーに正しくマッチングされていることを確認するにはどうしたらよいでしょうか。 いくつかの結果の行は、国またはcを使用して空白があり、ユーザーアカウントをチェックすると、これらの属性は値を持っています。

$E2Users = Get-ADGroupMember lg.o365.Office.PlanK1 | Select SamAccountName
$E2Users | ForEach-Object{
$Location = Get-ADUSer -filter * -properties * | Select country
write-output $Location
}

最終的には、次のようなものになります。

$E2Users = Get-ADGroupMember lg.o365.Office | Select SamAccountName
$E2Users | ForEach-Object{
$UPN = $E2Users[$Counter].SamAccountName + "@company.com"
$Location = Get-ADUSer -filter {not sure what to use} -properties * | Select country    
Set-MsolUser -UserPrincipalName $UPN -UsageLocation $Location
##lots of other code

何が足りないのか、理解できていないのか。 何かありましたら、よろしくお願いします。

どのように解決するのですか?

ここで問題となるのは、各メンバーが $E2Users という単一のプロパティを持つオブジェクトです。 samaccountname そして、そのオブジェクトをループ内で$username変数に代入していますが、これはフィルタとして使用することができません。 この問題を解決する方法はいくつかありますが、最も簡単なのは、プロパティを拡張することでしょう。

$E2Users = Get-ADGroupMember lg.o365.Office | Select -expandproperty SamAccountName

また、フィルタを-likeから-eqに変更し、"**"を不要なものとして削除します。