2016-11-08 114 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' –