2017-10-29 14 views
0

Powershellを使用して広告内の '電話'タブから '情報'フィールドに情報を追加しようとしました。情報 '電話'タブ - Powershell

ipmo ActiveDirectory 
Set-ADUser SAMACCOUNTNAME -Replace @{info="$($_.info) noAGD"} 

事は、それが動作しないことである。ここでは

は私がいることをスクリプト化する方法です。 しかし、私は完璧に動作Googleの周りに下記のスクリプトが見つかりました:?来るどのよう

ipmo ActiveDirectory 
Import-Csv C:\Users\MyID\Desktop\test.txt | foreach { 
    Get-ADUser $_.sAMAccountname -Properties info} | foreach { 
     Set-ADUser $_ -Replace @{info="$($_.info) noAGD" 
    } 
} 

を...君たちの誰もがそれを明確にすることはできますか?

答えて

0

私が働いている間に、あなたが見つけたスクリプトとそれがなぜ機能しないのかについてもう少し説明したいと思いますので、別の答えを投稿しています。

このスクリプトでは、CSVファイルからパイプ( "|"文字)をGet-ADUserコマンドレット(およびその後Set-ADUserコマンドレット)に転送することがわかります。私が立ち上がったところで、2つのforeachループを使用している理由です。しかし、さらなる調査の結果、私はその理由を知りました。

私はただの実行:

Get-ADUser SAMACCOUNTNAME -Properties info | Set-ADUser -Replace @{info="$($_.info) noAGD"}" 

それは「情報」にあったと「noAGD」を書き込む何でも空白確かに出ません。私は同じことを実行しますが、私の「セットADUserを」foreachループの内側に置くときしかし、-Identityパラメータ

Get-ADUser SAMACCOUNTNAME -Properties info | foreach { Set-ADUser $_.SamAccountName -Replace @{info="$($_.info) noAGD"}" } 

含め、この時間は、それはそこにあるものに「noAGD」を追加しません。パイプライン変数とforeachループは特別な関係を持っています。私はパイプライン変数を使用しようとしていた他のインスタンスに遭遇し、foreachループを使用して動作させる必要があることがわかっています。

スクリプトでは何もパイプしていないので、 "$($ .info ..."は使用できません。パイプライン変数が設定されておらず、 "$"は空です。あなたのスクリプトを実行すると、ユーザオブジェクトに "[スペース] noAGD"が含まれている必要があります。

0

完全なスクリプトを投稿しましたか?そのままでは、SAMACCOUNTNAMEに値を指定しません。あなたが見つけたスクリプトは、オブジェクトをCSVからpiplelineにインポートし、それを2つのforeachループにパイプします(これは不要です)。あなたが見つけたものを書く良い方法は次のとおりです。

Import-Csv C:\Users\MyID\Desktop\test.txt | foreach {Get-ADUser $_.sAMAccountname -Properties info | Set-ADUser $_.SamAccountName -Replace @{info="$($_.info) noAGD"}} 

追加するには、まったく別の問題であり、本当に変数が必要です。下記を参照してください:

$UsersInfo = Import-Csv C:\Users\MyID\Desktop\test.txt 
foreach ($Userinfo in $UsersInfo) { 
    $info = Get-ADUser $UserInfo.SamAccountName -Properties Info | Select -ExpandProperty Info 
    $info += $Userinfo.info 
    Set-ADUser $UserInfo.SamAccountName -Replace @{info="$info noAGD"} 
} 

もっと理解していないと、本当に近いです。

+0

はい、しました。 「SAMACCOUNTNAME」という言葉はまったく一般的なものではありません...あなたのスクリプトはどちらの場合でも動作しません。私はそれをテストしましたが、情報全体が置き換えられますが、追加されません – Charlypop

+0

ところで、 @Manu、 '情報'は英語では常に単数形です(ちょうどあなたが赤ちゃんを知っているので) – Charlypop

+0

ああ、追加は何か違うのですが、そうするためにはまず変数を追加して追加する必要があります。 – Joseph

0

ありがとうございました!あなたの調査に感謝しています。それについて本当に感謝しています。

「foreach」ループといえば、必要であれば、リンクここ

Import-Module ActiveDirectory 
foreach($j in Get-Content c:\userdata.txt) 
{ 

$i = Get-ADUser $j -Properties info | %{ $_.info} 
Set-ADUser $j -Replace @{info="$($i) `r`n Account Disabled for O365  Cleanup"} 

} 

されています:私は(TechNetの)私の問題への解決策を探していた間、私は以下のスクリプトに出くわした

https://gallery.technet.microsoft.com/scriptcenter/Powershell-Append-Info-5f613638

はあなたが見ることができるようにguyは変数$ iをforeachループで終了します。foreachループは、それをテストした後、値を普通の情報として返します(ヘッダーやものはありません...)。 私はかつてそれを見たことがなかった。

私はこのforeachループの使用について疑問に思っています。それについてもっと教えてくれませんか?

私はちょっと正直であると思っています。

+0

彼がやっていることは、基本的には "$ i = Get-ADUser $ j - プロパティ情報| Select -ExpandProperty info "パイプライン変数にアクセスする方法としてforeachを実行します。これは一度だけ実行されますが、それはちょっと変わっていて、推薦しません。あなたが正しい答えとして私の答えを記入してもらえますか?それは助けてください。 – Joseph

+0

これらのすべての明確化のためにありがとうございます! – Charlypop

関連する問題