2011-11-16 57 views
0

我正在使用PowerShell添加或删除文件中的文本。我一直在我的文件中收到有趣的文字。使用PowerShell添加或删除文本文本

这只发生在我从文本文件中删除该行并且尝试添加新行时出现有趣的文本时。

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=""; 
} 

当我删除文本从文件中的行,并添加新的用户,这都是一个有趣的文本字符串:

见下

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

我有一个包含以下信息的文本文件。

- // 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 

如果你看到用户5和6或7和8有额外的空间,我不会删除和广告只是sinlge空间。

回答

0

我认为你需要设置编码为您Add-Content

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

+0

是他们的任何方式,我可以删除文本文件行。例如,如果他们是两条线我不会删除他们,但如果他们是文本之间的单一空白行,那么我不会离开它。 – hello

+0

@hello - 我不确定我完全理解这个问题。您应该能够将线内容相互比较,或使用正则表达式来查找特定内容并根据它执行删除/删除。你能提供一个你在这里问的例子吗? – ProfessionalAmateur

+0

我在顶部添加了更多信息。 – hello