简体   繁体   中英

Add or remove text from text file using PowerShell

I'm using PowerShell to add or remove text from file. I'm keep getting funny text in my file.

This only happens when I have removed the line from the text file and when I try to add new line I get funny text.

cls
IMPORT-MODULE ActiveDirectory

$fileLocation = "E:\Script\MatchCadTest\ptc.opt";

function addUser( $username=''){

    $user = Get-ADUser -Identity $username -ErrorAction SilentlyContinue;
    $userFullName = $user.Name;
    $empty = [string]::IsNullOrEmpty($userFullName);

    if ( !($empty) ){
        $userExisted = Get-Content $fileLocation | Select-String "$username" -quiet

        if( ! $userExisted ){
            $newLocation =  "E:\Script\MatchCadTest\backup\";

            if((Test-Path -Path $fileLocation)) {
               Copy-Item "$fileLocation" "$newLocation"
            }

            $date = Get-Date -Format "d-M-y Hms";
            $newName = "ptc_$date.opt"
            Rename-Item "$newLocation\ptc.opt" $newName

            # Add-Content $fileLocation ""
            Add-Content  -Path $fileLocation -Value "# $userFullName";
            Add-Content  -Path $fileLocation -Value "INCLUDE MATHCAD USER $username";

            Write-Host "User has been added to file. Please restart the service." -BackgroundColor Green -ForegroundColor Black
        }
        else{
            Write-Host "User already existed" -BackgroundColor Red -ForegroundColor White
        }
    }
}

function removeUser( $username=''){
    $user = Get-ADUser -Identity $username -ErrorAction SilentlyContinue;
    # $user
    $userFullName = $user.Name;
    $empty = [string]::IsNullOrEmpty($userFullName);

    if ( !($empty) ){
        $userExisted = Get-Content $fileLocation | Select-String "$username" -quiet
        if( $userExisted ){
            $remove="# $userFullName";
            $removeUser = (Get-Content $fileLocation);
            $removeUser | where {$_ -ne $remove};

            $remove="INCLUDE MATHCAD USER $username";
            $removeUser | where {$_ -ne $remove}

            $removeUser |Out-File $fileLocation;

            #$removeUser = (Get-Content $fileLocation) | where {$_ -ne $remove} | Out-File $fileLocation;

            #$content = Get-Content $fileLocation
            #$content | Foreach {$_.TrimEnd()} | Set-Content $fileLocation

            Write-Host "User removed" -BackgroundColor Green -ForegroundColor Black
        }
        else{
            Write-Host "User does not existed" -BackgroundColor Red -ForegroundColor White
        }
    }
    else{
        Write-Host "User not found in ad" -BackgroundColor Red -ForegroundColor White
    }
}


$option=''
while ( $option -ne 0){

    Write-Host "What would you like to do?"
    Write-Host "1= Add new user"
    Write-Host "2=  Remove user"
    Write-Host "0= No (Exit)"

    $option = Read-Host "Select option"
    $username = Read-Host "Please enter Username"
    if( $option -eq 0 ){
        exit 1
    }

    elseif( $option -eq 1){
        addUser($username);
    }
    elseif ( $option -eq 22){
        removeUser ($username);
    }

    else{
        cls
        Write-Host
        Write-Host " Invaild Choice  " -BackgroundColor Red #-ForegroundColor White
        Write-Host
    }

    #Reset
    $option=444;
    $username="";
    $userFullName="";
    $user="";
    $empty="";
}

When I remove the line of text from file and add a new user, it's all a funny text string:

See below

‣潍慨浭摡䴠橡摩਍义䱃䑕⁅䅍䡔䅃⁄单剅洠ㅭ㘳㐰ല

I have a text file with following information.

- // Full name 1
- User ID of User 1

- // Full name 2
- User ID of User 2

* // Full name 3
* User ID of User 3

* // Full name 4
* User ID of User 4

* // Full name 5
* User ID of User 5

* // Full name 6
* User ID of User 6

* // Full name 7
* User ID of User 7

* // Full name 8
* User ID of User 8

If you see that user 5 and 6 or 7 and 8 has extra space which i wont to remove and ad just sinlge space.

I think you need to set the encoding for your Add-Content

Try: Add-Content -Encoding UTF8 -Path $fileLocation -Value "# $userFullName";

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM