2016-12-13 9 views
0

ここでは、コードです:PowerShellのスクリプト再帰エラー

import-module ActiveDirectory 
function Reset-Passwords{ 

#Imports csv containing user details. The column names indicate the property type of the values in each row. 
$users = import-CSV -path "C:\Users\administrator\Desktop\Powershell\Scripts\NQSMoves\NQS\NQSDetails.csv" 
$SamAccountNames = $Users | select sAMAccountName 

$password = Convertto-SecureString -string "228Hamilton" -asPlainText -force 


foreach($SamAccountName in $SamAccountName){ 
    set-adAccountPassword -identity $SamAccountName -reset -newPassword $password 
} 


} 
Reset-Passwords 

実行すると、それはエラー出力:何私から

The script failed due to call depth overflow. The call depth reached 1001 and the maximum is 1000. 

は、集まった、これは再帰エラーです。

しかし、foreachループは26回だけ実行する必要があるので、26 '$ samAccountName'変数がありますか? csvファイル自体は26行しか持たないので、foreachループを制限する必要があります。

これは大きなAD管理スクリプトの一部であり、問​​題を提起している唯一の部分です。

ご協力いただければ幸いです。

+1

を支援持っている問題は、これは正しいコードされている修正プログラムでしょう

、それは foreachの($ SamAccountNamesで$ SAMアカウント) – superblygeneralobject

+0

すべきではありませんあなたの反復のリストは、それがあなたが思うものではありません。それが問題に寄与している可能性があります。 –

+0

プラスコード内に再帰がありません – superblygeneralobject

答えて

0

素晴らしいものとして、記載されています。それが実際にあなたが実行しているコードであれば、あなたは現在繰り返しループしています。

ForEach($SamAccountName in $Users.SamAccountName){ 
.... 
} 

これはあなたが持っているコードの$SamAccountNAmes = $Users | select sAMAccountName行を取り除くためにできるようになる:

私はあなたのスクリプトに以下の変更を行い簡素化します。また、あなたは、コード自体が

希望をループしているここは

+0

Powershell ISEを閉じて再オープンしました。 これは、set-ADAccountPasswordが-identityで$ null引数を受け入れることができないことを示しています。 – Zeruko