19 Ocak 2021 Salı

Server Message Block (SMB) Protocol

Giriş
SMB protokolüyle diğer bilgisayarlardaki paylaşılan (shared) dosya sistemine erişmek mümkün.

13 Ocak 2021 Çarşamba

Powershell String

split metodu ve split operator Farklıdır
- split() metodu verilen tüm girdiyi tek tek karakterler gibi değerlendirir ve ona göre böler. Ayrıca büyük küçük fark farklına duyarlıdır
- split operator ise verilen tüm girdiyi tek bir ayraç olarak algılar. Ayrıca büyük küçük fark farklına duyarlı değildir.
Örnek
Elimizde şöyle bir kod olsun
$Str="This is the<BR />source string<BR />ALL RIGHT"
$Str.Split("<BR />")
This
is
the
(multiple blank lines)
source
string
(multiple blank lines)
ALL
IGHT
$Str -Split("<BR />")
This is the
source string
ALL RIGHT 
Açıklaması şöyle
From this you can see that the string.split() method:

- performs a case sensitive split (note that "ALL RIGHT" his split on the "R" but "broken" is not split on the "r")
- treats the string as a list of possible characters to split on

While the -split operator:

- performs a case-insensitive comparison
- only splits on the whole string
split metodu
Örnek
Şöyle yaparız. Split sonucu direkt değişkenlere atanıyor.
$string = 'FirstPart SecondPart'
$a,$b = $string.split(' ')
$a
$b
Örnek
Şöyle yaparız. Burada | ile ayrılmış alanlar split edildikten sonra alanlar tekrar sıralanıp yine | ile birleştiriliyor. Yani aslında sütunların sıralaması değiştiriliyor.
$File = get-content "D:\test\1234.txt"
$OutputFile = foreach($line in $File){($line.split('|'))[0,4,1,2,3,5] -Join '|'}
$OutputFile | out-file -filepath "D:\test\4321.txt" -Encoding "ascii"
split operator
Örnek
Şöyle yaparız. Çıktı olarak "1stZAP/SFR" alırız
$MilitaryDude = "Doe, Jane C LTC MMUA DCC 1stZAP/SFR"
($MilitaryDude -split "DCC" | Select -First 1).Trim()

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

10 Ocak 2021 Pazar

timeBeginPeriod metodu

Giriş 
Açıklaması şöyle
The timeBeginPeriod function requests a minimum resolution for periodic timers.
Örnek 
Şöyle yaparız
int main(){
  begintimePeriod(1);
  HANDLE event = CreateEvent(NULL,TRUE,FALSE,NULL);
  WaitForSingleObject(event,1);
}

WaitForSingleObject

Örnek
Şöyle yaparız
HANDLE event = CreateEvent(NULL,TRUE,FALSE,NULL);
WaitForSingleObject(event,1);