2016-11-08 22 views
1

このコードはにあり、Tee-ObjectはすべてWrite-Hostコマンドをfile.txtに保存できません。私はこのコードを修復するために何ができますか?Teeオブジェクトは出力コマンドコメントをファイルに保存できません

Import-Module ActiveDirectory 
Add-Type -AssemblyName System.Web 
$users = Get-Content -Path 'G:\Shares\xx xxx\ResetPassword\UserList.txt' 
ForEach ($user in $users) 
{ 
$unsecuredpwd = [System.Web.Security.Membership]::GeneratePassword(10, 3) 
$password = ConvertTo-SecureString -AsPlainText $unsecuredpwd -Force 
Get-ADUser $user | Set-ADAccountPassword -NewPassword $password -Reset 
Get-ADUser $user | Set-AdUser -ChangePasswordAtLogon $true 
Enable-ADAccount -Identity $user 
Write-Host “uzytkownik: $user” 
Write-Host “haslo: $unsecuredpwd” 
Write-Host “ `r`n`r`n” 
} | Tee-Object -FilePath G:\Shares\xx xxx\ResetPassword\Output.txt 
Read-Host -Prompt "click enter to exit" 
+0

ティー・オブジェクトがファイルへの書き込みを何/あなたの出力は何ですか? – restless1987

+0

Tee-Objectはユーザーごとにユーザ名と生成されたパスワードを出力する必要があります –

答えて

1

Write-Hostあなたの代わりにWrite-Outputのようなものを使用する必要がありますので、パイプラインには何も送信しません。また、Out-Fileコマンドレットがあります。これは、出力結果をファイルに保存するのではなく、Tee-Objectになります。

これは、あなたのスクリプトをchnageしなければならない方法です:

Import-Module ActiveDirectory 
Add-Type -AssemblyName System.Web 
Get-Content -Path 'G:\Shares\xx xxx\ResetPassword\UserList.txt' | ForEach-Object { 
    $user = $_ 
    $unsecuredpwd = [System.Web.Security.Membership]::GeneratePassword(10, 3) 
    $password = ConvertTo-SecureString -AsPlainText $unsecuredpwd -Force 
    Get-ADUser $user | Set-ADAccountPassword -NewPassword $password -Reset 
    Get-ADUser $user | Set-AdUser -ChangePasswordAtLogon $true 
    Enable-ADAccount -Identity $user 
    Write-Output "uzytkownik: $user" 
    Write-Output "haslo: $unsecuredpwd" 
    Write-Output " `r`n`r`n" 
} | Out-File -FilePath G:\Shares\xx xxx\ResetPassword\Output.txt 
Read-Host -Prompt "click enter to exit" 
+0

snap ............ – TessellatingHeckler

+0

申し訳ありません:-)。しかし、私はforeachループでポイント2について言及するのを忘れていたので、あなたの答えはおそらくより良いので、upvoted –

1

あなたは2つの問題を抱えています。

  1. パイプラインには書き込まれず、画面にのみ表示されます。
  2. foreach(...){}ループはパイプラインにも出力されないため、Tee-Objectが入力として使用されることはありません。

ではなくForEach-ObjectWrite-Objectを使用してみてください:

Import-Module ActiveDirectory 
Add-Type -AssemblyName System.Web 
$users = Get-Content -Path 'G:\Shares\xx xxx\ResetPassword\UserList.txt' 
$users | ForEach-Object { 

    $user = $_ 

    $unsecuredpwd = [System.Web.Security.Membership]::GeneratePassword(10, 3) 
    $password = ConvertTo-SecureString -AsPlainText $unsecuredpwd -Force 
    Get-ADUser $user | Set-ADAccountPassword -NewPassword $password -Reset 
    Get-ADUser $user | Set-AdUser -ChangePasswordAtLogon $true 
    Enable-ADAccount -Identity $user 

    Write-Output “uzytkownik: $user” 
    Write-Output “haslo: $unsecuredpwd” 
    Write-Output “ `r`n`r`n” 

} | Tee-Object -FilePath "G:\Shares\xx xxx\ResetPassword\Output.txt" 
Read-Host -Prompt "click enter to exit" 
+0

しかし、今、私はエラーを取得し、私はユーザー名が表示されません。 'Get-ADUser:パラメータ 'Identity'の引数を検証できません。引き数は です。 NULL以外の引数を指定して、コマンドを再試行してください。 G:\ Shares \ xx xxx \ ResetPassword \ ResetPwd.ps1:16文字:16 + Get-ADUser $ user |セットADAccountPassword -NewPassword $パスワード-Reset + ~~~~~ + CategoryInfo:InvalidDataを:(:)、ParameterBindingV alidationException [-ADUserを取得] + FullyQualifiedErrorId:ParameterArgumentValidationError、Microsoft.Activ eDirectory.Management.Commands。 GetADUser' –

関連する問題