9 Kasım 2021 Salı

Windows tasklist komutu

/fi seçeneği
Filtreler şöyle
STATUS
IMAGENAME
PID
SESSION
SESSIONNAME
CPUtime
MEMUSAGE
USERNAME
SERVICES
WINDOWTITLE
MODULES
Örnek
Şöyle yaparız
tasklist /fi "WindowTitle eq TF*" /v /fo list

tasklist /fi "WindowTitle eq TF*" /v /fo csv

tasklist /fi "WindowTitle eq TF*" /v /fo list | find /i "TF"
/fo seçeneği
Çıktı formatını belirtir. {table | list | csv} seçeneklerinden birisi verilebilir

/v seçeneği
verbose yani detaylı çıktı verir.

29 Eylül 2021 Çarşamba

Windows where komutu

Giriş
Bu komutu yeri şöyle
C:\Windows\System32\where.exe
Path içindeki bir dosyayı kolayca bulabilmeyi sağlar. Linux'taki "which" komutuna benzer

Örnek
Şöyle yaparız
where java D:\Kurulumlar\jdk-16.0.2.7-hotspot\bin\java.exe

13 Eylül 2021 Pazartesi

Windows mdsched komutu - Running a Memory Check

Giriş
Bu komutu ilk olarak burada gördüm. Tüm uygulamaları kapattıktan sonra komut satırından "mdsched.exe" çalıştırılır. Bilgisayarı yeniden başlatır ve bellek modüllerinin kontrolünü yapar. Hata varsa gösterir.

10 Ağustos 2021 Salı

Windows fsutil komutu

createnew
Belirtilen büyüklükte dosya oluşturur

Örnek
Şöyle yaparız
fsutil file createnew <filename> <length>

27 Haziran 2021 Pazar

ipconfig komutu

Giriş
Bu komut Windows'ta çok kullanılır

all seçeneği
Windows'ta ipconfig /all ile hangi DHCP sunucusundan IP adresi aldığımız öğrenilebilir. Şöyle yaparız.
ipconfig /all > output.txt
flushdns seçeneği
Şöyle yaparız.
ipconfig /flushdns
registerdns seçeneği
Açıklaması şöyle. Domain Controller'da çalıştırılırsa, kendisini DNS sunucusuna ekler.
ipconfig /registerdns registers the main A and PTR records for a server;
release seçeneği
DHCP sunucusundan alına IP adresini bırakır. Şöyle yaparız.
ipconfig /release

9 Haziran 2021 Çarşamba

Powershell Get-WinEvent

Örnek
Şöyle yaparız
Get-WinEvent | ?{$_.id -eq 307} | Export-Clixml 307Events.xml  

14 Mayıs 2021 Cuma

w32tm Servisi - NTP İçindir

Giriş
NTP ile zaman senkronizasyonu içindir

resync seçeneği
Örnek
Şöyle yaparız
net start W32Time 
w32tm /resync
Örnek
Senkronizasyonu beklemeden zorla saatleri eşitlemek için şöyle yaparız
net stop W32Time 
net start W32Time 
w32tm /resync /force

25 Mart 2021 Perşembe

Windows sfc komutu - System File Checker

Örnek
Şöyle yaparız
sfc /scannow
Açıklaması şöyle
The sfc /scannow command will scan all protected system files, and replace corrupted files with a cached copy that is located in a compressed folder at %WinDir%\System32\dllcache. The %WinDir% placeholder represents the Windows operating system folder. For example, C:\Windows.

8 Mart 2021 Pazartesi

Powershell Set-Clipboard

Örnek
Şöyle yaparız
$date =  get-date -format "dd-MM-yyyy hh:mm:ss"

$name = "Graeme"

$clipboard = $date + " " + $name

$clipboard | Set-Clipboard

28 Şubat 2021 Pazar

Powershell Rename-Item

Örnek
Şöyle yaparız
CMD Example: ren c:\exampledirectory\examplefileold.txt
c:\exampledirectory\examplefilenew.txt 

Powershell Example: rename-item -path "c:\exampledirectory\examplefileold.txt"
-newname "examplefilenew.txt" 

12 Şubat 2021 Cuma

Powershell wsl komutu

Giriş
-d seçeneği
Eğer birden fazla WSL kuruluysa seçili olana login olmak için şöyle yaparız
wsl -d <distrib> -u root
Örnek
Şöyle yaparız
wsl ~ -d Debian
-u seçeneği
Login olmak için şöyle yaparız
wsl -u root
--list seçeneği
Örnek
Şöyle yaparız
wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-22.04    Running         2
--update seçeneği
Örnek
Şöyle yaparız
wsl --update
--set-default-version seçeneği
PowerShell'de şöyle yaparız
wsl --set-default-version 2
--status seçeneği
Şöyle yaparız
PS C:\Users\user> wsl --status
Default Distribution: Ubuntu-20.04
Default Version: 2

Windows Subsystem for Linux was last updated on 31.05.2022
WSL automatic updates are on.

Kernel version: 5.10.102.1


10 Şubat 2021 Çarşamba

Windows Subsystem for Linux - WSL

Giriş
WSL'in iki tane sürümü var. WSL 1 eski, kullanmamak lazım. WSL 2 tercih edilmeli

WSL 1
Açıklaması şöyle. 2016 yılında çıktı
When the Windows Subsystem for Linux (WSL 1) was released in 2016, it became possible to run a real Linux dev environment in a Linux shell, while retaining the familiar Windows UX around the shell. Even File Explorer was integrated nicely with the Linux file system.

The big drawbacks are that WSL 1 emulates a Linux kernel, and it runs in a full VM. The first means processes that require a native kernel, like Docker, can’t run. The second means that WSL 1 consumes a lot of resources. WSL 1 was not sufficient to run Kafka reliably.
WSL 2
Açıklaması şöyle. 2019 yılında çıktı
But Microsoft delivered WSL 2 in 2019, and it’s a whole new world. They fixed the two biggest limitations, so WSL 2 runs a real Linux kernel, and the kernel runs on a subset of Hyper-V features, not in a full VM.
WSL Kurulumu
1. Enable the Windows Subsystem for Linux
PowerShell'de şöyle yaparız
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all
/norestart
2. Enable the Virtual Machine Feature
PowerShell'de şöyle yaparız
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
3. Set the Default WSL Version
PowerShell'de şöyle yaparız
wsl --set-default-version 2
4. Install From Microsoft Store
Microsoft Store'a gidip Linux yazarak bir tane Linux türevi seçeriz ve kurarız

Exe
Microsoft Store'dan yapılan kurumlar için bir exe olmayabilir. Açıklaması şöyle
Apps installed from the Microsoft Store are not traditional Windows "executables". They are Appx packages with a manifest and resources, and they aren't launched with a traditional "command line." 
Ancak WSL için var. Çalıştırmak için wsl.exe kullanılabilir. Açıklaması şöyle
wsl.exe or wsl should work. It can be found in C:\Windows\System32. 
Ancak ben Ubuntu kurdum ve sadece Ubuntu yazınca da çalışıyor.

WSL'den Local Host'a Erişim
Açıklaması şöyle
By default wsl2 enables wsl localhost to be accessible from windows but not vice versa.
Windows bilgisayarın adresini bulmak için şöyle yaparız. Bu adresi ping'lersek erişilemediğini görürüz
grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'
Windows bilgisayardaki Windows Defender yani Firewall üzerinde WSL2 IP adresine erişim hakkı vermek gerek. Bir örnek burada. Bur örnekte tüm uzak bilgisayarlara ping hakkı veriliyor. Biz ise sadece "Kapsam" alanında Uzak IP adresi olarak örneğin "192.168.238.1" ile WSL2'ye hak versek daha iyi.

Network Share'e Erişim
Örnek - Common Internet File System
Şöyle yaparız
$ sudo apt install cifs-utils
$ sudo mount -t cifs -o user={user},pass={password},vers=1.0 //server/share /mnt/share
Systemd
Sanırım WSL Systemd'yi desteklemiyor




DLL İçinde Static Değişken

Giriş
Açıklaması şöyle
Variables that are declared as global in a DLL source code file are treated as global variables by the compiler and linker, but each process that loads a given DLL gets its own copy of that DLL's global variables. The scope of static variables is limited to the block in which the static variables are declared. As a result, each process has its own instance of the DLL global and static variables by default.
Örnek - global değişken
global değişken, sadece içinde bulunduğu translation unit içinde kullanılabilir, ancak linker tarafından .o dosyasına yazılırlar. Dolayısıyla bir başka, .c dosyasında da aynı isimle bir değişken tanımlanamaz.


Örnek - static global değişken
static global değişken, sadece içinde bulunduğu translation unit içinde kullanılabilir. linker tarafından .o dosyasına yazılmazlar. Dolayısıyla bir başka, .c dosyasında da aynı isimle bir değişken tanımlanabilir.

Elimizde şöyle bir kod olsun. Bu static değişken DLL'i her yükleyen uygulama için ayrı ayrı yaratılır.
private static bool isConnected = false;

public static void Connect()
{
    // TODO: Connect.
    isConnected = true;
}

public static void Disconnect()
{
    // TODO: Disconnect.
    isConnected = false;
}

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);