2016-11-08 113 views
1

我在Tee-Object中的此代码无法将所有Write-Host命令保存到file.txt。我能做些什么来修复这些代码?Tee-Object无法将输出命令注释保存到文件

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 cmdlet,因为您只希望将输出保存到文件中,所以它适合于此处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循环的第二点,所以你的答案可能更好,因此upvoted –

1

你有2个问题。

  1. Write-Host不写入管道,它只显示在屏幕上。
  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:无法验证参数'身份'的参数。参数是 null。提供一个非空参数并再次尝试该命令。 在G:\ Shares \ xx xxx \ ResetPassword \ ResetPwd.ps1:16 char:16 + Get-ADUser $ user |设置ADAccountPassword -NewPassword $密码-Reset + ~~~~~ + CategoryInfo:InvalidData:(:) [获取-ADUser便有],ParameterBindingV alidationException + FullyQualifiedErrorId:ParameterArgumentValidationError,Microsoft.Activ eDirectory.Management.Commands。 GetADUser' –