12 Ocak 2021 Salı

Powershell Get-Content

Giriş
Dosyanın okunabilirliğini kontrol etmek için önce Test-Path kullanılabilir.

Dosyayı bir Object[] içine okur. Ayraç olarak newline kullanılır. Sonucun string dizisi olduğunu görmek için şöyle yaparız
$object = Get-Content data.txt
$object.GetType()                                                  
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

Örnek
Şöyle yaparız. Her satırı okur. INSERT INTO ile başlıyorsa ilk ' (single quote) karakterini bulur. ' karakterini escape etmek için 4 defa '''' şeklinde kullanmak gerek.
foreach($line in Get-Content data.sql) {
  if($line.StartsWith('INSERT INTO')) {
    $startIndex = $line.IndexOf(''''');
    if ($startIndex -ne -1) {
      $endIndex = $line.IndexOf('''',$startIndex + 1)
      $length = $endIndex - $startIndex + 1
      Write-Output $line.SubString($startIndex,$length);
    }
  }
}
Örnek
Bir başka bilgisayardaki dosyayı okumak için şöyle yaparız
Get-Content -Path "\\xx.xxx.xx.xxx\c$\App_configuration.txt"
-Raw seçeneği
Dosyayı tek bir string değişkeni içine okur
Örnek
Şöyle yaparız
$text = Get-Content .\file.txt -Raw 
Örnek
İkinci dosyadaki bir alanı birinci dosyada içeren satırları bulmak için  şöyle yaparız
$filename="insert.txt"
Remove-Item $filename

$file1 = Get-Content -RAW .\file1.txt
$file1lines = $file1.Split(';')

$file2 = Get-Content -RAW .\file2.txt
$file2lines = $file2.Split(';')

foreach($file2line in file2lines) {
  $file2line = $file2line - replace "'n'r",""
  $file2line = $file2line.Trim()
  if($file2line.StartsWith('INSERT INTO')) {
    $startIndex = $file2line.IndexOf(''''');
    if ($startIndex -ne -1) {
      $endIndex = $file2line.IndexOf('''',$startIndex + 1)
      $length = $endIndex - $startIndex + 1
      $id = $file2line.SubString($startIndex,$length);

      $file1lines |foreach {
        if ($_.Contains($id) {
          $_ | Out-File -Append -FilePath $filename
        }
      }
    }
  }
}

Hiç yorum yok:

Yorum Gönder